Hallo, Leute. Ich möchte ein Spiel programmieren, in dem ein Raumschiff einen bestimmten Punkt in einem 2D Raum anfliegt. Aber damit das etwas schöner aussieht, soll das Schiff erst eine Kurve fliegen und dann zum Ziel (z.B. wenn die ursprüngliche Richtung des Schiffs nach oben geht und das Ziel unten ist). Das Problem ist, dass ich nur den Kurvenradius (bzw den Durchmesser des ganzen Kreises habe), sowie X/Y-Koordinaten von Schiff und Ziel. Siehe Bild:
Was ich suche und einfach nicht herausfinde, ist die Formel, um den Winkel a(alpha) rauszufinden. Bitte nicht auslachen, ich weiß, dass das Mathe aus dem 8./9. Schuljahr ist, aber ich komm trotzdem nicht drauf
Gibt es dazu irgendeine Erklärung? Weil ich versteh das nicht ganz. Auch hier im Tutorial für Curved Surfaces wird mit Formeln wild um sich geschmissen ohne richtig zu erlären, wodrum es sich bei den einzelnen Formelzeichen etc handelt. Und im restlichen Internet ist das gleiche Problem.
stimmt. Ich blick die Materie auch net so ganz Wahrscheinlich ist es im Grunde allerdings ganz einfach und mich interessiert das Thema auch ziemlich.
Kennt wer von euch Metal Fatigue? Da gibt es Jets, die haben extrem coole Flugmanöver drauf Deren Flugbahnen wollte ich schon immer mal berechnen. Das sind nämlich auch solche Kurven.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Was mir fehlt ist die Richtung, in die das Schiff "kuckt".
Dann könnte man es theoretisch berechnen.
Dann würde ich nämlich "einfach" solnage im Kreis fliegen (ob nach links oder rechts müsste man berechnen. Je nachdem, ob das Schiff links oder rechts von einem liegt), bis die Richtung mehr oder weniger auf den Punkt zeigt. Mehr oder weniger deshalb, weil durch das Timebased Movement eine so genaue Genauigkeit nich möglich ist. Aber die Genauigkeit in diesem Fall reicht voll aus und ist IMHO immernoch allzu krass, als das ein normaler Mensch so fliegen würde!
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Wenn V^ (^ für Vektor) die Flugrichtung ist, S^ der Startpunkt und E^ das Ziehl, dann geht als Annäherung:
Cos Alpha = (V^ . (E^ - S^)) / (V * |(E^ - S^)|)
ist wie gesagt nur ne Näherung wenn d im Vergleich zum Abstand relativ klein ist.
Ums genau zu berechnen hab ich auch noch was. Dafür hab ich mal ne Skizze gemacht - mit Paint
d^ ist ja relativ einfach. Einfach von S^ aus im rechten Winkel zu V^ (Komponenten vertauschen und n "-" einbauen) mit der Länge d (Radius). Darüber kommt man dann auch einfach an den Mittelpunkt des Kreises, und kann d2^ berechnen (Vom Mittelpunkt des Kreises zum Endpunkt). So dann kann ja der Spaß beginnen:
Beta kann man über den Cosinuss bekommen :
Cos(180 - Beta) = d / d2
Gamma über das Punktprodukt:
Cos(Gamma) = (-d^ . d2^) / (d * d2)
Und Alpha ist dann einfach nur noch:
Gamma = Alpha + Beta
So in etwa....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
mit ^ meinte ich, dass es der Vektor ist. Da schreibt man normalerweise nen Pfeil drüber, aber das geht hier so schlecht. Punktprodukt ist mathematisch gesehen:
a^, b^ e |R^n (und da meine ich dann wirklich hoch n)
a^ . b^ = Sigma i = 1 bis n über ai * bi
also für Nichtmathematiker: alle entsprechenden Komponenten multiplizieren und die Produkte dann addieren.
Wenn du z.B. 2 Vektoren hast: a^ = ( ax ay az ) und b^ = ( bx by bz ) dann ist a^ . b^ = ax*bx + ay*by + az*bz
Eine immer wieder nützliche Eigenschaft des Punktproduktes ist diese hier:
a^ . b^ = a * b * cos(alpha) (= Länge von a * Länge von b * Cos(Winkel zwischen den beiden) )
Wenn man das umstellt kann man sehr einfch den Winkel zwischen den Vektoren berechnen.
Vllt solltest du dir mal n paar Seiten zu Vektorrechnung anschauen, das vereinfacht einem hinterher das Leben.
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Okay, ich versuche mal es soweit ich kann zusammenzufassen. Sagt mir bitte, ob ichs verstanden hab Also das mit dem Punktprodukt mein ich.
Ein Vektor ist eine Gerade im Raum. Ihre Länge wird mit x, y und z angegeben in die einzelnen Richtungen angegeben. Da ich in diesem Fall alles auf einer Z Ebene habe, ist z=0. Jetzt hab ich meinetwegen die Vektoren a^und b^. Somit hätte ich z.B. beim Vektor a^ ax, ay und az.
Jetzt kommt das Punktprodukt. Ich multipliziere alle x, y und z Längen miteinander und addiere die Ergebnisse.
a^.b^ = ax*bx + ay*by (z hab ich weggelassen, weils 0 ist)
Dementsprechend ist die Formel für gamma:
cos(gamma) = (ax*bx + ay*by) / (a * b) [Ich hoffe, ich liege damit Richtig, dass a und b hier diesmal die "richtigen" Längen der Vektoren sind]
gamma = acos((ax*bx + ay*by) / (a * b))
Auf mein geliebtes FPC müsste das also so ungefähr aussehen:
gamma:= arccos((ax*bx + ay*by) / (a * b)));
eine Gerade ist mathematisch gesehen was anderes, man bezeichnet es eigentlich lieber als Pfeil (darum auch die Pfeilspitzen in meiner Zeichnung).
Die Rechnung hast du allerdings richtig verstanden.
bei meiner Skizze wäre dann a^ = -d^ und b^ = d2^
Ich denke ich mach mal ein Beispiel für meine gesammte Rechnung, dann wirds vielleicht klarer, was ich meine:
Nehmen wir mal an, dein Schiff ist bei S^ = ( 1 2 ) und bewegt sich in Richtung V^ = ( 1 1 ). Der Zielpunkt ist E^ = ( 5 -4 )
Für den Radius des Kreises nehme ich jetzt mal 1
So, der Zielpunkt liegt rechts vom Schiff also muss der Mittelpunkt des Kreises auch rechts liegen. Den Vektor d^ vom Schiff zum Mittelpunkt bekommst du also, indem du V^ rechtsherum um 90° drehst und die Länge auf den Radius anpasst.
Drehen:
v^ = (1 1)
( 1 -1 ) (x und y vertauschen und beim neuen y das Vorzeichen ändern)
Hier tritt jetzt noch ein Problem auf, das ich anfangs nicht bedacht habe: Der Trick mit dem Punktprodukt liefert immer den kleinsten Winkel zurück. Darum sollte man an dieser Stelle noch überprüfen, ob v^ . d2^ <0. Wenn dies der Fall ist, dann muss der errechnete Wert halt noch von 360 abgezogen werden.
v^ . d2^ = 1*3.29 + 1*(-2.71) = 0.58 > 0 also in diesem Fall kein Problem
so, da haben wir schon mal Gamma. Jetzt brauchen wir noch Beta:
An dieser Stelle hab ich oben in der Eile Müll geschrieben, ich meinte nicht Cos sonder Sin und von den 180 Grad Winkelsumme fallen ja bereits 90 an den rechten Winkel ab. Sry deswegen....
Alpha = Gamma - Beta = 175.05 - 76.42 = 98.63 (Mit vielen schlecht gerundeten Werten auf dem Weg...)
Hoffe ich hab mich nicht verrechnet, ich rechne normalerweise lieber mit Variablen und tippe am ende alles in den Taschenrechner ^^
Allerdings komme ich mit der Annäherung auf einen ähnlichen Wert:
Alpha = ArcCos( (v^.(E^-S^)) / (v*|(E^-S^)|) ) = ArcCos( (1*4 + 1*(-6)) / (1 * 7.211) ) = 106.10
also wirds schon passen...
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.