Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from Tkinter import *
- from time import sleep
- from math import cos, sin, pi
- import numpy as np
- from threading import Thread
- points = list()
- mean = 1
- alpha = 0.05
- vecs = [np.asarray([0.0, 1.0, 0.0]), np.asarray([1.0, 0.0, 0.0]), np.asarray([0.0, 0.0, 1.0])]
- def set_points():
- global points
- points = list()
- for i in xrange(8):
- coords = np.asarray([float(mean), float(mean), float(mean)])
- for j in xrange(3):
- if (i & (2 ** j)) != 0:
- coords += vecs[j]
- else:
- coords -= vecs[j]
- points.append(coords)
- def convert_point(point):
- ans = np.asarray([750., 500.])
- v = [np.asarray([cos(-pi/6), sin(-pi/6)]), np.asarray([cos(7 * pi / 6), sin(7 * pi/6)]), np.asarray([0.0, 1.0])]
- for coef, vec in zip(point, v):
- ans += coef * 200 * vec
- return [int(el) for el in ans]
- def set_mask(a, skip, mask):
- posted = 0
- for bit in xrange(mask):
- val = int((mask & (2 ** bit)) != 0)
- for i in xrange(posted, 3):
- if i == skip:
- continue
- posted = i
- if val == 1:
- a ^= (2 ** i)
- return a
- def gen_grans():
- index_bad = sorted([(point, index) for index, point in enumerate(points)], key=lambda x: sum(el ** 2 for el in x[0]))[-1][1]
- ans = list()
- for i in xrange(3):
- cur_ans = list()
- for mask in [0, 2, 1, 3]:
- cur_ans.append(convert_point(points[set_mask(2 ** i - (index_bad & (2 ** i)), i, mask)]))
- ans.append(cur_ans)
- return ans
- widget = None
- def main():
- set_points()
- root = Tk()
- drawing_area = Canvas(root, width=1500, height=1000)
- drawing_area.config(bg='white')
- drawing_area.pack()
- #drawing_area.bind("<Motion>", motion)
- drawing_area.bind("<ButtonPress-1>", b1down)
- #drawing_area.bind("<ButtonRelease-1>", b1up)
- global widget
- widget = drawing_area
- root.mainloop()
- def update_points():
- global vecs
- v0 = cos(alpha) * vecs[0] + sin(alpha) * vecs[1]
- v1 = np.asarray([-v0[1], v0[0], 0.0])
- vecs = [v0, v1, vecs[2]]
- set_points()
- #print points
- def draw_segment(widget, segment, color):
- widget.create_line(segment[0][0], segment[0][1], segment[1][0], segment[1][1], width=1, fill=color)
- def redraw(widget):
- widget.delete(ALL)
- update_points()
- for segment in gen_grans():
- widget.create_polygon(segment, fill='blue', width=10, outline='green')
- widget.update()
- def b1down(event):
- for i in xrange(30):
- redraw(event.widget)
- sleep(0.03)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement