Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import sqrt
- from tkinter import *
- def mdp(E):
- D=[]
- x1=E[0][0]
- x2=E[-1][0]
- y1=E[0][1]
- y2=E[-1][1]
- for i in E:
- dist=abs((y2-y1)*i[0]-(x2-x1)*i[1]+x2*y1-y2*x1)/\
- (sqrt((y2-y1)**2+(x2-x1)**2))
- D.append((dist,i[0],i[1],E.index(i)))
- D.sort(reverse=1)
- return D[0]
- def new_line(N):
- for i in range (len(N)-1):
- canvas.create_line(N[i][0], N[i][1], N[i+1][0], N[i+1][1], width=5, fill='red')
- def click(click_event):
- global prev
- try:
- canvas.create_line(prev.x, prev.y, click_event.x, click_event.y, width=2, fill='green')
- S.append((click_event.x,click_event.y))
- except:
- prev = click_event
- S.append((click_event.x,click_event.y))
- return
- prev = click_event
- def action(K):
- if len(K)<=2:
- print('end',K)
- return
- else:
- mdpoint = mdp(K) #макс удаленная точка вида [дистанция, х,у, индекс в списке К]
- print(mdpoint[0])
- if mdpoint[0]<=epsilon:
- for i in range(len(K)-2,0,-1):
- print('remove point',S.remove(K[i]))
- return
- else:
- print('recurs')
- K1=K[0:mdpoint[3]+1]
- K2=K[mdpoint[3]:]
- print(K1)
- print(K2)
- action(K1)
- action(K2)
- return
- def oper():
- global epsilon
- epsilon = int(eps.get())
- action(S)
- new_line(S)
- S=[]
- epsilon=0
- master = Tk()
- canvas = Canvas(master, width=600, height=300,bg='white')
- canvas.pack(padx=20, pady=20)
- canvas.bind('<Button-1>', click)
- but1=Button(master,text='show',command=oper);but1.pack()
- eps=Entry(master,width=5);eps.pack()
- mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement