-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwurf_tkinter_canvas.py
More file actions
85 lines (70 loc) · 1.98 KB
/
wurf_tkinter_canvas.py
File metadata and controls
85 lines (70 loc) · 1.98 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from tkinter import *
import math as m
def draw():
## Übernehmen der Variablen aus dem Textfeld
vi_ = float(vi.get())
alpha_ = float(alpha.get())
mauer_ = float(mauer.get())
stosz_ = float(stosz.get())
vx = vi_ * m.cos(m.radians(alpha_))
vy = vi_ * m.sin(m.radians(alpha_))
dt = 0.001 ## Zeit zwischen den berechneten Punkten
ot = 0 ## Gesammtzeit
x = 0 ## X-Koordinate
y = 0 ## Y-Koordinate
g = -9.81 ## Erdbeschleunigung
c = 0 ## Zaehlvariable fuer while-Schleife
## zeichnen der Mauer
cv.create_line(mauer_*75, 0, mauer_*75, 20*75, width=4)
## Berechnung und zeichnen der Punkte
while y >= 0:
c += 1
ot += dt
vyn = vy + g*dt
y += ((vy + vyn)/2)*dt
vy = vyn
x += (vx * dt)
cv.create_oval(x*75, cv.winfo_height() - y*75, x*75, cv.winfo_height() - y*75)
if x > mauer_:
x = mauer_
vx = -vx * stosz_
vy = vy * stosz_
## Aktion zum löschen aller Ein- und Ausgabefelder
def reset():
vi.delete(0, END)
alpha.delete(0, END)
mauer.delete(0, END)
stosz.delete(0, END)
cv.delete(ALL)
## AKtion um das Fenster zu schlieszen
def quitHandler():
root.destroy()
root.quit()
## Groesze des Canvas
w_ = 800
h_ = 600
root = Tk()
root.title("Wurf")
## Erzeugung des Canvas
cv = Canvas(root, width=w_, height=h_)
cv.pack(side = LEFT, fill=BOTH, expand=YES)
frame = Frame(root)
frame.pack(side = RIGHT, fill=BOTH, expand=YES)
## Eingabefelder fuer Variablen
Label(frame, text="Abwurfgeschwindigkeit [m/s]").pack()
vi = Entry(frame)
vi.pack()
Label(frame, text="Abwurfwinkel [°]").pack()
alpha = Entry(frame)
alpha.pack()
Label(frame, text="Mauer [m]").pack()
mauer = Entry(frame)
mauer.pack()
Label(frame, text="Stoszeffizienz").pack()
stosz = Entry(frame)
stosz.pack()
## Knöpfe fuer Bedienung
Button(frame, text = "Start", command=draw).pack(padx = 10, pady = 10)
Button(frame, text = "Reset", command=reset).pack(padx = 10, pady = 10)
Button(frame, text = "Quit", command=quitHandler).pack(padx = 10, pady =10)
root.mainloop()