Frage

Bei einem gegebenen Punkt, wie etwa (0, 0, 0) und ein Vektor wie (x, y, z). Was ist der einfachste Weg, um die negativen Z-Achse bei (0, 0, 0) zentriert auszurichten, in der Richtung dieses Vektors zeigen? Beispiele OpenGL wäre willkommen, aber nicht erforderlich.

War es hilfreich?

Lösung

Es gibt viele verschiedene Möglichkeiten, einen Koordinatenrahmen zu drehen, um eine bestimmte Richtung zu weisen; sie werden alle verlassen die z-Achse in Richtung spitz Sie wollen, aber mit Variationen, wie die x- und y-Achse ausgerichtet sind.

Im Folgenden wird Ihnen die kürzeste Rotation, die sein kann oder auch nicht, was Sie wollen.

vec3 target_dir = normalise( vector );
float rot_angle = acos( dot_product(target_dir,z_axis) );
if( fabs(rot_angle) > a_very_small_number )
{
    vec3 rot_axis = normalise( cross_product(target_dir,z_axis) );
    glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z );
}

Andere Tipps

Sie wollen wahrscheinlich einen Blick haben unter Diana Gruber Artikel

Um meine eigene Frage zu beantworten, ist die beste Antwort, die ich habe kommen mit, ist dies:

Teilen Sie den Vektor nach oben in die „Komponenten“. Die x-Komponente ist die Verschiebung entlang der x-Achse. Wenn wir Trigonometrie drehen, haben wir, dass cos (alpha) = x / vector_magnitude. Wenn wir die RHS berechnen, dann können wir alpha ableiten, das ist der Betrag, um den würden wir um die y-Achse zu drehen haben.

Dann kann das Koordinatensystem in den Vektor durch eine Reihe von Anrufen an glRotatef ()

ausgerichtet werden,

Es gibt viele Ressourcen gibt, um Ihre Koordinaten drehen (oder Drehen von Objekten, die auf dasselbe hinausläuft). Ich habe viel gelernt von dieser Seite , sowohl über die Programmierung in mehrdimensional und insbesondere zu manipulieren, wie Vektoren

Die Seite hier hat einen Abschnitt „Transformationen für einen Vektor bewegt zur z-Achse“, dass scheint zu sein, was Sie wollen, oder vielleicht das Gegenteil davon.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top