Задание такое: задается две произвольные точки после чего из нужно соединить кривой.
Думал сделать это при помощи эллипса, но во-первых нужно рисовать только часть, которая находится в первой четверти, во-вторых как-то это дело поворачивать, если точки задали не на одной прямой. Идея была вывести формулу, по которой определяется координата y, рисовать дугу прибавляя координату по х и высчитывая соответствующий у. Вот мой недо-код на Python:
Код | from Tkinter import * from math import *
def makeModel(event): x1=int(e1.get()) y1=int(e2.get()) x2=int(e3.get()) y2=int(e4.get())
array = [ ] x = x1 a = (sqrt((x2-x1)**2 + (y2-y1)**2))/2 b = a print a print b
while x != x2: y = (b / a) * (sqrt(abs(a**2 - x**2))) #print y array.append(x) array.append(y) x += .5 print array
canv.create_rectangle(x1 - 3, y1 - 3, x1 + 3, y1 + 3, fill='red', outline = 'red') canv.create_rectangle(x2 - 3, y2 - 3, x2 + 3, y2 + 3, fill='red', outline = 'red') ln = canv.create_line(array, width = 1, fill = 'green') ################################### Interface ################################## root = Tk() root.title("Mouse movement model")
lb1 = Label(root, width = 17, text = 'Enter the coordinates:') lb2 = Label(root, width = 3, text = 'x1 =') lb3 = Label(root, width = 3, text = 'y1 =') lb4 = Label(root, width = 3, text = 'x2 =') lb5 = Label(root, width = 3, text = 'y2 =')
canv = Canvas(width = 640, height = 480, bg = 'white')
but = Button(root, width = 15, text = "Make Model") but.bind('<Button-1>', makeModel)
e1 = Entry(root, width = 5) e2 = Entry(root, width = 5) e3 = Entry(root, width = 5) e4 = Entry(root, width = 5)
lb1.grid(row = 1, column = 1) lb2.grid(row = 1, column = 2) e1.grid(row = 1, column = 3) lb3.grid(row = 1, column = 4) e2.grid(row = 1, column = 5) lb4.grid(row = 1, column = 6) e3.grid(row = 1, column = 7) lb5.grid(row = 1, column = 8) e4.grid(row = 1, column = 9) but.grid(row = 1, column = 10, pady = 5, padx = 3) canv.grid(row = 2, column = 1, columnspan = 10)
mainloop()
|
Помогите высчитать правильную формулу. |