/
main.py
97 lines (89 loc) · 3 KB
/
main.py
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from tkinter import *
from blocks import Block
import time
import math
from frame_rate import *
fr_control = frame_rate_control(30)
#nrDigits = 3
width = 1280
height = 400
def calculate():
global canvas, startTime
fr_control.start()
const = 1 / (width)
k = 0.051
collided = False
canvas.delete(ALL)
nrCollisions = 0
text = canvas.create_text(width/2, 72)
nrDigits = int(digits.get())
TimeSteps = 1
block1 = Block(10, height, 1, 30, 50)
block2 = Block(500, height, 100 **( nrDigits-1), 30, 100, (-100/TimeSteps))
k = - 100
block1.show(canvas)
block2.show(canvas)
numerator = (width - block2.x + k)
oldNumerator = numerator
firstTime = True
#secondTime = False
realNrCollisions = int(math.pi * 10 ** (nrDigits-1))
previousNrCollisions = 0
while(True):
block1.setOld()
block2.setOld()
for i in range(0, TimeSteps):
numerator = (width - block2.x + k)
if (block1.x <= 0):
block1.vx *= -1
#block1.x = block1.x * -1
collided = True
elif (block1.collide(block2)):
collided = True
sumOfMasses = block1.mass + block2.mass
newV1 = (block1.mass - block2.mass) * block1.vx
newV1 += (2 * block2.mass) * block2.vx
newV1 /= sumOfMasses
newV2 = (block2.mass - block1.mass) * block2.vx
newV2 += (2 * block1.mass) * block1.vx
newV2 /= sumOfMasses
#block1.x -= block1.size - (x2 - x1) / 2
#block2.x += block1.size - (x2 - x1) / 2
block1.vx = newV1
block2.vx = newV2
if(nrCollisions == realNrCollisions and firstTime):
firstTime = False
block2.vx *= TimeSteps
TimeSteps = 1
break
elif(numerator - oldNumerator > 100):
#firstTime = False
oldNumerator = numerator
nrSteps = math.ceil(nrDigits * numerator * const)
block2.vx *= TimeSteps
block1.vx *= TimeSteps
TimeSteps = nrSteps ** (nrSteps - 1)
block2.vx /= TimeSteps
block1.vx /= TimeSteps
if(collided):
nrCollisions += 1
collided = False
block1.update()
block2.update()
#print(block2.vx - block1.vx)
canvas.itemconfig(text, text=str(nrCollisions))
canvas.itemconfig(text, font=("Courier", 72))
block1.move(canvas)
block2.move(canvas)
root.update()
fr_control.delay()
block1 = None
block2 = None
root = Tk()
canvas = Canvas(root, width=width, height=height)
canvas.pack()
digits = Entry(root)
digits.pack()
button = Button(root, text="Simular", width=10, command=calculate)
button.pack()
root.mainloop()