Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ich habe folgendes Problem, wo ich hoffe das ihr mir helfen könnt.
Ich arbeite gerade an einem Programm, welches einen Ballwurf berechnen und auch animieren soll(Flugbahn).
Ich habe zwar ein Programm geschrieben, welches die maximale Wurfweite und die maximale Wurfhöhe berechnet. Allerdings brauche ich ja eine Liste mit allen x bzw. y Werten, um die Flugbahn animieren zu können.
Ich hoffe ihr könnt mir weiterhelfen.
Erstmal danke für die Antwort. =)
Hat alles gut geklappt.
Jetzt kommt mein nächstes Problem. Ich würde diese Flugbahn des Balles gerne animieren, habe jedoch keine Ahnung wie.
Würde mich über jede Hilfe freuen.
MFG
Anbei der neue Quellcode:
from math import *
from matplotlib.pyplot import *
import numpy as np
x = np.linspace(0, 100, 10)
g = 9.81
v0_kmh = float(raw_input("Bitte geben Sie die Anfangsgeschwindigkeit in KM/H zwischen 0 und 120 KM/H ein: " ))
if v0_kmh > 120:
v0_kmh = 120
print "Die Geschwindigkeit ist groesser als 120 KM/H"
if v0_kmh < 0:
v0_kmh = 0
print "Die Gschwindigkeit ist kleiner als 0 KM/H"
v0_ms = v0_kmh*1000/3600
print "Geschwindigkeit = ",v0_kmh," km/h = ",v0_ms," m/s"
v0_ms2 = v0_ms*v0_ms
print v0_ms
y0 = float(raw_input("Bitte geben Sie eine Abwufshoehe zwischen 0 und 30 in Metern ein: " ))
if y0 > 30:
y0 = 30
print "Die Abwurfshoehe ist groesser als 30 Meter"
if y0 < 0:
y0 = 0
print "Die Abwurfshoehe ist kleiner als 30 Meter"
print "Abwurfshoehe = ",y0," Meter "
theta = float(raw_input("Bitte geben Sie einen Abwurfwinkel zwischen 20 und 80 Grad ein: "))
if theta > 80:
theta = 80
print "Der Abwurfwinkel ist groesser als 80 Grad"
if theta < 20:
theta = 20
print "Der Abwurfwinkel ist kleiner als 20 Grad"
print "Abwurfwinkel = ",theta," Grad "
theta_rad = theta * pi/180
t = v0_ms*sin(theta_rad/g)
t2 = t*t
Wir müssen im Moment ein ähnliches Programm schreiben. Das Programm an sich ist fertig wir bekommen nur die Animation nicht vernünftig zum laufen. Kann sich das vielleicht mal jemand angucken ?
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani
fig, ax = plt.subplots()
fig = plt.figure()
#Eingabe der Werte
#y = float(raw_input("Bitte geben sie eine Abwurfhoehe, die größer als 0m ist, an: "))
#m = float(raw_input("Bitte geben sie eine Masse des Wurfkoerpes in kg an: "))
#a = float(raw_input("Bitte geben sie einen Abwurfwinkel zwischen 0° und 90° an: "))
#v = float(raw_input("Bitte geben sie eine Abwurfgeschwindigkeit in m/s an: "))
#Beispielwerte
y = 50
m = 0.5
a = 30
v = 100
print "\nIhre Werte:\nAbwurfhoehe = " , y ,"m"
print "Masse =" , m , "kg"
print "Abwurfwinkel = " , a , "°"
print "Abwurfgeschwindigkeit = " , v , "m/s"
#Berechnung Gesamtflugdauer
g = float(9.81)
t = v * np.sin(a * np.pi/180) / g
#print "\n=> Gesamtflugdauer = " , t , "s"
PS: Die Frage ist eigentlich wie wir es hinbekommen das er bei der Grafik nicht alle Punkte gleichzeitig setzt sondern einen nach dem anderen damit es sich halt "bewegt"
@jens: das habe ich MagBen schon vor über einem Jahr empfohlen. Er ist aber beratungsresistent. numpy überschreibt mit einem *-Import etliche Built-Ins, wie sum, max, min, abs, die so mit Sicherheit jedes zweite größere Modul unwartbar macht.
Danke für die schnelle Hilfe, das Programm läuft jetzt und tut was es soll, die Animation läuft auch super.
Was ich noch nicht ganz verstanden habe ist was denn die Änderung von
"ax.plot(x,Wurfbahn(x),'r--')" zu "line = ax.plot(x[:1],Wurfbahn(x[:1]),'r--')[0]" genau macht.
Gruß Showtime
# -*- coding: utf-8 -*-
"""
Created on Sat Aug 1 12:10:51 2015
@author: XXX
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani
fig, ax = plt.subplots()
#Eingabe der Werte
y = float(raw_input("Bitte geben sie eine Abwurfhoehe die groeßer als 0m ist an: "))
m = float(raw_input("Bitte geben sie eine Masse des Wurfkoerpes in kg an: "))
a = float(raw_input("Bitte geben sie einen Abwurfwinkel zwischen 0 und 90 Grad an: "))
v = float(raw_input("Bitte geben sie eine Abwurfgeschwindigkeit in m/s an: "))
#TESTWERTE
#y = 20
#m = 0.5
#a = 45
#v = 100
#Ausgabe der eingegebenen Werte
print "\nIhre Werte:\nAbwurfhoehe = " , y ,"m"
print "Masse =" , m , "kg"
print "Abwurfwinkel = " , a , "grad"
print "Abwurfgeschwindigkeit = " , v , "m/s"
#Berechnung Gesamtflugdauer
g = float(9.81)
t = v * np.sin(a * np.pi/180) / g
#print "\n=> Gesamtflugdauer = " , t , "s"
#Berechnung Maximale Hoehe h
h = 0.5*g*t**2+y
print "\n=> Maximale Wurfhoehe =" , round(h,2) , "m"
Showtime3004 hat geschrieben:Was ich noch nicht ganz verstanden habe ist was denn die Änderung von
"ax.plot(x,Wurfbahn(x),'r--')" zu "line = ax.plot(x[:1],Wurfbahn(x[:1]),'r--')[0]" genau macht.
In der Funktion animate(i) wird das line-Objekt des Plots mit neuen Daten versorgt. Dieses line-Objekt wird von ax.plot(...) zurückgegeben. Ein Plot kann mehrere Kurven enthalten, deshalb gibt ax.plot(...) eine Liste von line-Objekten zurück. In diesem Fall ist es aber nur ein line-Objekt, das hole ich mit [0] aus der Liste. Damit beim 1.Plot nicht gleich die ganze Bahn geplottet wird, sondern nur der Anfang, wird der zu plottende Array-Bereich mit x[:1] eingegrenzt, in der slice-Syntax bedeuted x[:1] alle x-Werte bis zum 1.Element. In der Funktion animate(i) werden dann Stück für Stück immer mehr x-Werte genommen, x[:i] sind alle x-Werte bis zum i.Element.
Über dem Editor in dem Du Deinen Forumsbeitrag erstellst, da gibt es ein paar Formatierungsknöpfe, der wichtigste ist der "Code" Knopf. Unter dem Editor gibt's auch Knöpfe, neben dem "Absenden" Knopf gibt's den sehr nützlichen "Vorschau" Knopf.
Alles klar, danke für die schnelle Hilfe. Ich habe den Code jetzt nochmal überarbeitet, dass hier keine ungültigen Werte eingegeben werden können.
Der Code ist zwar nicht sonderlich schön geworden aber tut was er soll
@Showtime3004: beim Input der Werte machst Du 4 mal quasi das selbe. Das schreit nach einer Funktion. if ist keine Funktion, was sollen also diese Klammern? Nackte excepts fangen Dir jeden Fehler (auch manche Programmierfehler) ab. Die einzig erwartete Exception ist hier aber ein ValueError. Auf oberster Ebene sollte kein ausführbarer Code sein. Pack alles was keine imports oder Funktions-Definitionen sind in eine eigene Funktion (üblicherweise main genannt) und rufe sie über folgendes Idiom am Ende Deines Skriptes auf:
Das float( ) in Zeile 61 ist überflüssig, 9.81 ist ein float und braucht nicht erst konvertiert zu werden.
Ohne die vielen "np.pi/180" würde das ganze hübscher aussehen. Bezüglich GRAD und RAD habe ich in meinen Anwendungen die einfache Regel:
GRAD nur im IO
Winkel werden in Variablen nur in RAD gespeichert
Du könntest nach Zeile 31 die Variable a von GRAD nach RAD umrechnen.
Fast die Hälfte Deines Codes brauchst Du zum Einlesen von 4 Zahlen. War das eine Vorgabe? Wenn Dein Skript nur von Dir ausgeführt wird, dann könntest Du diesen Teil auch einfach weglassen und als Benutzerschnittstelle die Zeilen 49 bis 52 für jeden Programmlauf editieren.