Golfspiel
-
Guten Tag alle mit einander. Ich habe ein problem bei meinen Hausaufgaben. Ich würde mich freuen wenn ihr mir helfen könnt.
Aufgabe: Programiere ein Golfspiel. Kurze Daten: Abschlagwinkel; Geschwindigkeit; Höhe und entfernung des Loches.Das habe ich bis jetzt mit hilfe eines Kollegen programmiert. Nur irgendwie rechnet er das wo der Ball landen soll immer nal die höhe des Loches oder so. Wenn mir einer mal bei der Formel Helfen könnte??
--------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <math.h>
#pragma hdrstopvoid eingabe_v(int *); // Prototypendeklarationen
void eingabe_hoehe(float *);
void eingabe_alpha(int *);
void eingabe_xloch(float *);
void berechnung_flug(int *,int *, float *, float *);
void ausgabe_treffer(float *,float *);int i_v,i_alpha; // Variablendeklaration
float f_xloch,f_x,f_yhoehe;#pragma argsused
//---------------------------------------------------------------------------
int main() //Hauptfunktion
{
eingabe_v(&i_v); //Eingabe von eingabe der Geschwindigkeit in i_v "speichern"
eingabe_alpha(&i_alpha); //Eingabe vom Winkel Alpha in i_alpha "speichern"
eingabe_xloch(&f_xloch); //Eingabe von der Entfernung zum Loch mit Hilfe
eingabe_hoehe(&f_yhoehe); //Eingabe von eingabe der Geschwindigkeit in i_v "speichern"
berechnung_flug(&i_v,&i_alpha,&f_x,&f_yhoehe); //Aufruf der Flugbahnberechung mit den Parametern i_v und i_alpha
ausgabe_treffer(&f_x,&f_xloch); // Aufruf der Trefferbestimmung
getch();
return 0;
}void eingabe_v(int *i_temp) //Funktion für die Geschwindigkeitseingabe
{
cout<<"Geben Sie die Geschwindigkeit v ein:"; //Ausgabe auf dem Bildschirm
cin>>*i_temp;
}void eingabe_hoehe(float *f_temp) //Funktion für die Geschwindigkeitseingabe
{
cout<<"Geben Sie die Hoehe des Loches ein:"; //Ausgabe auf dem Bildschirm
cin>>*f_temp;
}void eingabe_alpha(int *i_temp) //Funktion für die Alphawinkeleingabe
{
do{ //do while schleife für die Eingabe vom Alphawinkel
cout<<"Geben Sie einen Abschlagwinkel zwischen 0 und 90 Grad ein:";
cin>>*i_temp;
}while(*i_temp<0 || *i_temp>90); //Ende While schleife wenn i_temp zwischen 0 und 90 liegt
}void eingabe_xloch(float *f_temp) //Funktion für die Eingabe von der XLoch Entfernung
{
cout<<"Geben Sie die Entfernung des Loches ein:";
cin>> *f_temp;
}void berechnung_flug(int *i_v, int *i_alpha, float *f_x, float *f_yhoehe) //Funktion für die Flugbahnberechnung
{
float f_alphabogen,f_y,f_temp,f_t; //Deklaration der Variablen die für die Flugbahnberechnung wichtig sindf_alphabogen = (M_PI/180)* i_alpha; //Berechnung vom Alphabogen
**// f_temp = (2 * *i_v * sin(f_alphabogen))/9.81;
f_temp = ((2 * *i_v * sin(f_alphabogen))/9.81)/2;
// f_temp = (*i_v * sin(f_alphabogen))-(9.81f_t);
for (f_t=f_temp; f_t<f_yhoehe; f_t=f_t+0.1) //Solange f_t< f_hoehe ist wird die Schleife abgearbeitet und f_t um eins erhöht*
{
**f_x = *i_v * cos(f_alphabogen)f_t; //Berechnung von der X Koordinate
f_y = *i_v * sin(f_alphabogen)*f_t-(0.5*9.81*f_t*f_t); //Berechnung von der Y Koordinatecout<< "x-Koordinate: "<<*f_x<<"\n"; //Ausgabe der X Koordinate
cout<< "y-Koordinate: "<<f_y<<"\n\n"; //Ausgabe der Y Koordinate}
}void ausgabe_treffer(float *f_x, float *f_xloch) //Funktion zur Ausgabe
{
cout<<"Der Ball ist bei "<<*f_x<<"m gelandet.\n"; //Ausgabe wo der Ball gelandet ist
if(*f_x>(*f_xloch-0.5) && *f_x<(*f_xloch+0.5)) //Überprüfung ob f_x in dem Toleranzbereich von f_xloch liegt
{
cout<<"\nGewonnen!"; //Ausgabe wenn getroffen wurde
}
else
{
cout<<"\nVerloren!"; //Ausgabe wenn nicht getroffen wurde
}
}
-
Ohne den gruseligen Programmtext vollständig gelesen zu haben (Globale Variablen, überviele Kommentare, eigenwillige Benamsung, komische Einleseroutinen), mach dir doch erst mal die Physik dahinter auf einem Blatt Papier klar. -- Die Flugbahn des Balles folgt hier einer Parabel, die man durch die beiden Koordinaten x(t) und y(t) beschreiben kann (sin(alpha) v_0 t, bzw cos(alpha) v_0 t - 0.5 g t^2). Daraus kann man die Zeit elimieren, also: x = sin(alpha) v_0 t => t = x / (v_0 sin(alpha) => y(x) = cos(alpha) v_0 (x / (v_0 sin(alpha))) - g/2 (x/(v_0 sin(alpha))^2 = x / tan(alpha) - g/2 v_0^-2 sin^-2(alpha) x^2. (Das sollte aber in der Schule drangekommen sein, sowas.)
Du willst jetzt wissen, ob diese Kurve durch das Loch geht, also ob der punktförmige Ball durch den Punkt P(x; y), bzw einen Bereich darum herum verläuft. Das sind zwei, drei Zeilen Programmtext, nehme ich an.
-
Daniel E. schrieb:
(Das sollte aber in der Schule drangekommen sein, sowas.)
Das ist ja ebend mein problem. Ich habe sowas in der Art in Mathe oder Phisik nie gehabt.
Die Kommentare sind teil der hausaufgaben.Irgendwie werde ich aus deiner Formel nicht schlau. Tut mir leid
-
Smokey schrieb:
Phisik
Physik
-
Kann ja mal vorkommen.
-
WebFritzi schrieb:
Smokey schrieb:
Phisik
Physik
Neue Rechtschreibung: Füsig?
Smokey: Daß Du die Anfangsgeschwindigkeit mit dem Abschlagwinkel in eine Geschwindigkeit in X- und eine in Y-Richtung zerlegen kannst, ist Dir klar? Wie die Formeln dafür aussehen auch? Wie Du aus den zwei Einzelformeln auf eine Abhängigkeit y(x) kommst? Wo hapert's genau?
(Googels "schräger Wurf" könnte helfen.)
-
Das problem was ich habe ist folgendes, ich habe 5 jahre lang eine Hauptschule besucht, habe dort meinen Realschulabschluss gemacht. In dieser Zeit habe ich das ganze nicht einmal gehabt. Mein Problem ist also das ich gernicht weiss wie ich auf eine Vernünftige formel komme. Die formel die drinn steht, habe ich mir von einem Kollegen geben lasse, das ich wenigstens etwas stehen habe. Ich brauche also imprienzieb ne komplette formel mit der ich das irgendwie hien bekomme.
-
Ich brauche also imprienzieb ne komplette formel mit der ich das irgendwie hien bekomme.
Foll Gail der Saz!!!
Fiele Grüse
Daneil