Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import sqrt
- from tkinter import *
- 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)
- except:
- prev = click_event
- S.append(click_event)
- return
- prev = click_event
- def distance(a, b):
- return sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)
- def point_line_distance(point, start, end):
- if (start == end):
- return distance(point, start)
- else:
- n = abs(
- (end[0] - start[0]) * (start[1] - point[1]) -
- (start[0] - point[0]) * (end[1] - start[1])
- )
- d = sqrt(
- (end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2
- )
- return n / d
- def rdp(points, epsilon):
- # """Reduces a series of points to a simplified version that loses detail, but
- # maintains the general shape of the series.
- # Сводит ряд точек к упрощенной версии, которая теряет детализацию, но
- # сохраняет общую форму серии.
- # """
- dmax = 0.0
- index = 0
- for i in range(1, len(points) - 1):
- d = point_line_distance(points[i], points[0], points[-1])
- if d > dmax:
- index = i
- dmax = d
- if dmax>= epsilon:
- results = rdp(points[:index + 1], epsilon)[:-1] + rdp(points[index:], epsilon)
- else:
- results = [points[0], points[-1]]
- return results
- def move(move_event):
- global prev
- canvas.create_line(prev.x, prev.y, move_event.x, move_event.y, width=2, fill='green')
- # canvas.create_line( rdp(points[:index + 1], epsilon=0.5), width=2)
- rdp(prev[prev.x], 0,5)[:-1] + rdp(prev[prev.y], 0,5)
- prev = move_event # what does this do ?
- def action():
- print(S)
- master = Tk()
- canvas = Canvas(master, width=600, height=300)
- canvas.pack(padx=20, pady=20)
- canvas.bind('<Button-1>', click)
- but1=Button(master,text='show',command=action);but1.pack()
- S=[]
- #canvas.bind('<B1-Motion>', move)
- mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement