Nov-23-2019, 10:36 AM
(Nov-22-2019, 05:56 PM)Larz60+ Wrote: OK, now that My code copy is correct, I added some debugging printouts as follows:
import tkinter from tkinter import * from matplotlib.backends.backend_tkagg import * from matplotlib.backend_bases import key_press_handler from matplotlib.figure import Figure from matplotlib import pyplot as plt from matplotlib import animation import numpy as np from scipy.special import comb def inputik(): global nPoints fig.clear("all") nPoints = int(pocetbodu_entry.get()) pocetbodu_entry.delete(0, "end") vykresleni() def bernstein_poly(i, n, t): """ Bernsteinův polynom t ... parametr n ... počet bodů i ... (počet bodů - 1) """ return comb(n, i) * ( t**(n-i) ) * (1 - t)**i def bezier_curve(points, nTimes=1000): """ Ze zadaných bodů a kroku sestrojí bezierovu křivku """ nPoints = len(points) xPoints = np.array([p[0] for p in points]) yPoints = np.array([p[1] for p in points]) t = np.linspace(0.0, 1.0, nTimes) polynomial_array = np.array([ bernstein_poly(i, nPoints-1, t) for i in range(0, nPoints) ]) xvals = np.dot(xPoints, polynomial_array) yvals = np.dot(yPoints, polynomial_array) return xvals, yvals def vykresleni(): if __name__ == "__main__": from matplotlib import pyplot as plt global ax1 #nPoints = (pocetbodu_entry.get()) points = np.random.rand(nPoints, 2) * 200 xpoints = [p[0] for p in points] ypoints = [p[1] for p in points] xvals, yvals = bezier_curve(points, nTimes=1000) print(f"\nPoints") for x, y in points: print(f"x: {x:20}, y: {y:20}") print() ax1 = fig.add_subplot(111).plot(xvals, yvals) ax2 = fig.add_subplot(111).plot(xpoints, ypoints, "ro") for nr in range(len(points)): print(f"nr: {nr}, points[nr][0]: {points[nr][0]}, points[nr][1]: {points[nr][1]}") ax2.text(points[nr][0], points[nr][0], nr) for i in range(nPoints-1): pomocna_1x = [xpoints[i], xpoints[i+1]] pomocna_1y = [ypoints[i], ypoints[i+1]] ax3=fig.add_subplot(111).plot(pomocna_1x, pomocna_1y,'b--', linewidth=2) canvas.draw() # canvas a vykreslovací ploška root = tkinter.Tk() root.wm_title("Beziereček") fig = plt.Figure(figsize=(5, 4), dpi=100, frameon=False) canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea. canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1) toolbar = NavigationToolbar2Tk(canvas, root) toolbar.update() canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1) def on_key_press(event): print("you pressed {}".format(event.key)) key_press_handler(event, canvas, toolbar) canvas.mpl_connect("key_press_event", on_key_press) def konec(): root.quit() root.destroy() #tlačítka a blbítka pocetbodu = Label(root, text = "Počet řídících bodů: ") pocetbodu_entry = Entry(root) buttonQuit = Button(master=root, text="Quit", command=konec) buttonQuit.pack(side=tkinter.BOTTOM) buttonSubmit = Button(master=root, text="Submit", command=inputik) buttonSubmit.pack(side=tkinter.BOTTOM) pocetbodu_entry.pack(side=tkinter.BOTTOM) pocetbodu.pack(side=tkinter.BOTTOM) tkinter.mainloop()which quickly exposed what I think is part the problem.
your line 69 readsax2.text(points[nr][0], points[nr][0], nr)
and I think it should be:ax2.text(points[nr][0], points[nr][1], nr)
There are still some issues
Is that correct?
Oh yeah, you're right, line 69 should in fact read as you said. Still can't figure out how to get it into the plot