#!/usr/bin/env python3
#vp_wurf.py
from vpython import *
#Daten
v0=30      #Anfangsgeschwindigkeit
R = 2      #Radius des Balls
laenge=100 #Laenge der Bodenplatte
dicke = 1  #Hoehe der Bodenplatte
g=9.81     #Erdbeschleunigung
dt=1e-2    #Zeitschrittweite
y0=R + dicke/2
#Boolesche Variable
run = False
#Funktionsdefinition Start/Stop
def startStop(e):
    global run
    run = not run
    if run:
        e.text = "Stop"
    else:
        e.text = "Start"
#Funktionsdefinition fuer Textausgabe
def winkel(e):
    txtA.text = "%2.0f" %e.value
#Grafikbereich
scene.title="<b>Schiefer Wurf</b>"
scene.width=800
scene.height=400
scene.center=vec(0,laenge/4,0)
scene.background = color.white
scene.userzoom = False #kein Zoom
#Wurfebene
boden=box(size=vec(laenge,dicke,laenge/2),color=color.green)
boden.pos=vec(0,0,0)
#Ball-Objekt erzeugen
ball = sphere(radius=R,color=color.red)
ball.pos=vec(-laenge/2,y0,0) #Startposition
#Slider fuer Abwurfwinkel
scene.append_to_caption("\n\n")
scene.caption="\n Abwurfwinkel &auml;ndern\n\n"
sldWinkel=slider(bind=winkel,min=20,max=80,value=45,length=700)
txtA=wtext(text="%2.1f" %sldWinkel.value)
scene.append_to_caption(" &#8451;\n\n")
#Start-Stop-Button
cmdS=button(bind=startStop,pos=scene.caption_anchor)
cmdS.text="Start"
#Label fuer Ausgabe
lblTw=label(pos=vec(70,62,0))#Wurfzeit
lblXw=label(pos=vec(70,55,0))#Wurfweite
#Animationsschleife
t=x=y=tw=0
while True:
    rate(30)
    if not run:
        alpha=radians(sldWinkel.value)
    if run:
        x = v0*cos(alpha)*t
        y = y0 + v0*sin(alpha)*t - g*t**2/2
        ball.pos=vec(x - laenge/2,y,0)
        tw=t 
        t+=dt
        if y < y0: #Ball erreicht den Boden
            t=y=0
            run = False
            if run == False:
                cmdS.text="Start"
    #Ausgabe für Wurfzeit und Wurfweite
    lblTw.text = '<em>t</em> = %2.1f s' %tw
    lblXw.text = '<em>x</em> = %2.1f m' %x
        
            
        
        
    
#xw=v0**2*sin(2*alpha)/g #Wurfweite
    