Guest User

Untitled

a guest
Mar 30th, 2020
267
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from math import sqrt
  2. from tkinter import *
  3. def mdp(E):
  4.     D=[]
  5.     x1=E[0][0]
  6.     x2=E[-1][0]
  7.     y1=E[0][1]
  8.     y2=E[-1][1]
  9.     for i in E:
  10.         dist=abs((y2-y1)*i[0]-(x2-x1)*i[1]+x2*y1-y2*x1)/\
  11.              (sqrt((y2-y1)**2+(x2-x1)**2))
  12.         D.append((dist,i[0],i[1],E.index(i)))
  13.     D.sort(reverse=1)
  14.     return D[0]
  15.  
  16. def new_line(N):
  17.     for i in range (len(N)-1):
  18.         canvas.create_line(N[i][0], N[i][1], N[i+1][0], N[i+1][1], width=5, fill='red')
  19.  
  20. def click(click_event):
  21.     global prev
  22.     try:
  23.         canvas.create_line(prev.x, prev.y, click_event.x, click_event.y, width=2, fill='green')
  24.         S.append((click_event.x,click_event.y))
  25.     except:
  26.         prev = click_event
  27.         S.append((click_event.x,click_event.y))
  28.         return
  29.     prev = click_event
  30.  
  31. def action(K):
  32.     if len(K)<=2:
  33.         print('end',K)
  34.         return
  35.     else:
  36.         mdpoint = mdp(K)           #макс удаленная точка вида [дистанция, х,у, индекс в списке К]
  37.         print(mdpoint[0])
  38.         if mdpoint[0]<=epsilon:
  39.             for i in range(len(K)-2,0,-1):
  40.                 print('remove point',S.remove(K[i]))
  41.             return
  42.         else:
  43.             print('recurs')
  44.             K1=K[0:mdpoint[3]+1]
  45.             K2=K[mdpoint[3]:]
  46.             print(K1)
  47.             print(K2)
  48.             action(K1)
  49.             action(K2)
  50.             return
  51.  
  52. def oper():
  53.     global epsilon
  54.     epsilon = int(eps.get())
  55.     action(S)
  56.     new_line(S)
  57.  
  58. S=[]
  59. epsilon=0
  60.  
  61. master = Tk()
  62. canvas = Canvas(master, width=600, height=300,bg='white')
  63. canvas.pack(padx=20, pady=20)
  64. canvas.bind('<Button-1>', click)
  65. but1=Button(master,text='show',command=oper);but1.pack()
  66. eps=Entry(master,width=5);eps.pack()
  67.  
  68. mainloop()
RAW Paste Data