-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcircle.py
More file actions
68 lines (57 loc) · 2.04 KB
/
circle.py
File metadata and controls
68 lines (57 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# @Time : 2018-09-08 13:46
# @Author : DuQing
# @File : circle.py
"""
description
"""
import random
import time
from tkinter import Tk, Canvas, TclError
class Circle(object):
def __init__(self, x, y, r, vx, vy):
self.x = x
self.y = y
self.r = r
self.vx = vx
self.vy = vy
class AlgoFrame(object):
def __init__(self, width, height):
self.width = width
self.height = height
self.tk = Tk()
self.tk.resizable(False, False)
self.canvas = Canvas(self.tk, width=width, height=height)
self.canvas.pack()
def draw_circle(self, data_list):
self.canvas.delete('all')
for data in data_list:
self.canvas.create_oval(data.x-data.r,data.y-data.r, data.x+data.r, data.y+data.r, fill='blue')
self.tk.update()
def run_circle(self, data_list):
for data in data_list:
if data.x<= data.r or data.x >=self.width-data.r:
data.vx = -data.vx
if data.y <=data.r or data.y >= self.height-data.r:
data.vy = -data.vy
data.x += data.vx
data.y += data.vy
# for i in range(len(data_list)):
# for j in range(i+1, len(data_list)):
# if (data_list[i].x - data_list[j].x)**2 + (data_list[i].y - data_list[j].y)**2 <= 4*r**2:
# data_list[i].vx = - data_list[i].vx
# data_list[i].vy = - data_list[i].vy
# data_list[j].vx = - data_list[j].vx
# data_list[j].vy = - data_list[j].vy
if __name__ == '__main__':
frame_width = 1000
frame_height = 700
frame = AlgoFrame(frame_width, frame_height)
r = 50
circles_list = [Circle(random.randint(r,frame_width-r), random.randint(r, frame_height-r), r, random.randint(-8, 8), random.randint(-5, 5)) for i in range(10)]
while True:
try:
frame.run_circle(circles_list)
frame.draw_circle(circles_list)
time.sleep(0.05)
except TclError :
break