Formeln: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:
== Drehung zu einem Ziel im 2D Fall ==
== Drehung zu einem Ziel im 2D Fall ==


Im folgenden wird erklärt wie man ein Objekt im zweidimensionalen Fall, also auf einer Ebene, zu einem Ziel drehen kann. Die Vorraussetzungen die man hierzu benötigt sind der Positionsvektor des Objekts (<math>\vec o_p \!\,</math>), der Forwardvektor des Objekts welcher angibt in welche Richtung es gerade gedreht ist und der Positionsvektor des Zielpunkts zu welchem sich das Objekt drehen soll. Gehen wir im weitern davon aus dass sich das Objekt auf der X-Z-Ebene bewegt, um es zum Zielpunkt zu drehen müssen wir es also um seine eigene Y-Achse drehen. Für andere Ebenen funktioniert das ganze analog, es muss nur entsprechend immer um die zur Ebene orthogonale Achse gedreht werden.
Im folgenden wird erklärt wie man ein Objekt im zweidimensionalen Fall, also auf einer Ebene, zu einem Ziel drehen kann. Die Vorraussetzungen die man hierzu benötigt sind der Positionsvektor des Objekts (<math>\vec o_p \!\,</math>), der Forwardvektor des Objekts (<math>\vec o_f \!\,</math>) welcher angibt in welche Richtung es gerade gedreht ist und der Positionsvektor des Zielpunkts (<math>\vec t_p \!\,</math>) zu welchem sich das Objekt drehen soll. Gehen wir im weiteren davon aus dass sich das Objekt auf der X-Z-Ebene bewegt, um es zum Zielpunkt zu drehen müssen wir es also um seine eigene Y-Achse drehen. Für andere Ebenen funktioniert das ganze analog, es muss nur entsprechend immer um die zur Ebene orthogonale Achse gedreht werden.


Als erstes berechnet man nun den X- und Z-Wert des Richtungsvektors vom Objekt zum Zielpunkt, der Y-Wert bla normalisieren bla:
Als erstes berechnet man nun den X- und Z-Wert des Richtungsvektors vom Objekt zum Zielpunkt (<math>\vec d_{ot}\!\,</math>). Der Y-Wert wird auf 0 gesetzt weil wir den Winkel in der X-Z-Ebene ausrechnen wollen. Zusätzlich wird der Vektor noch normalisiert um die Berechnung des Winkels später zu vereinfachen:
blabla formel ....
 
<math>\vec d_{ot} = \vec t_p - \vec o_p \!\,</math> <br/>
<math>\vec d_{ot}.y = 0 \!\,</math> <br/>
<math>\vec d_{ot}.normalize() \!\,</math>
 
Dann projiziert man den Forwardvektor des Objekts ebenfalls auf die X-Z-Ebene (indem man den Y-Wert auf 0 setzt) und normalisiert den Vektor:
 
<math>\vec o_f.y = 0 \!\,</math> <br/>
<math>\vec o_f.normalize() \!\,</math>
 
Das Skalarprodukt des Richtungsvektors zum Zielpunkt und des Forwardvektors liefert nun den Arkuscosinus des Winkels um den das Objekt zum Zielpunkt auf der Y-Achse gedreht ist:
 
<math>\measuredangle\left(\vec d_{ot}, \vec o_f\right) = \arccos (\vec d_{ot} \cdot \vec o_f) \!\,</math>


[[Kategorie:Mathematik]]
[[Kategorie:Mathematik]]

Version vom 21. Juni 2010, 16:46 Uhr



Dieser Artikel enthält ähnlich einer Formelsammlung nützliche Berechnungen zur Spieleprogrammierung.

Drehung zu einem Ziel im 2D Fall

Im folgenden wird erklärt wie man ein Objekt im zweidimensionalen Fall, also auf einer Ebene, zu einem Ziel drehen kann. Die Vorraussetzungen die man hierzu benötigt sind der Positionsvektor des Objekts (<math>\vec o_p \!\,</math>), der Forwardvektor des Objekts (<math>\vec o_f \!\,</math>) welcher angibt in welche Richtung es gerade gedreht ist und der Positionsvektor des Zielpunkts (<math>\vec t_p \!\,</math>) zu welchem sich das Objekt drehen soll. Gehen wir im weiteren davon aus dass sich das Objekt auf der X-Z-Ebene bewegt, um es zum Zielpunkt zu drehen müssen wir es also um seine eigene Y-Achse drehen. Für andere Ebenen funktioniert das ganze analog, es muss nur entsprechend immer um die zur Ebene orthogonale Achse gedreht werden.

Als erstes berechnet man nun den X- und Z-Wert des Richtungsvektors vom Objekt zum Zielpunkt (<math>\vec d_{ot}\!\,</math>). Der Y-Wert wird auf 0 gesetzt weil wir den Winkel in der X-Z-Ebene ausrechnen wollen. Zusätzlich wird der Vektor noch normalisiert um die Berechnung des Winkels später zu vereinfachen:

<math>\vec d_{ot} = \vec t_p - \vec o_p \!\,</math>
<math>\vec d_{ot}.y = 0 \!\,</math>
<math>\vec d_{ot}.normalize() \!\,</math>

Dann projiziert man den Forwardvektor des Objekts ebenfalls auf die X-Z-Ebene (indem man den Y-Wert auf 0 setzt) und normalisiert den Vektor:

<math>\vec o_f.y = 0 \!\,</math>
<math>\vec o_f.normalize() \!\,</math>

Das Skalarprodukt des Richtungsvektors zum Zielpunkt und des Forwardvektors liefert nun den Arkuscosinus des Winkels um den das Objekt zum Zielpunkt auf der Y-Achse gedreht ist:

<math>\measuredangle\left(\vec d_{ot}, \vec o_f\right) = \arccos (\vec d_{ot} \cdot \vec o_f) \!\,</math>