ang_diff(ANGLE* a, ANGLE* a1, ANGLE* a2)
Berechnet den Unterschied zwischen zwei Eulerwinkeln. Wird der Winkel a2 um den Ergebniswinkel a gedreht, kommt dabei a1 heraus.
Parameters:
a1 - Zielwinkel
a2 - anfänglicher Winkel
a - Winkeldifferenz zwischen a1 und a2.
Geschwindigkeit:
Mittel
Bemerkungen:
- ang_diff ist nicht dasselbe wie vec_diff. Der Unterschied von willkürlichen dreidimensionalen Winkeln läßt sich nicht durch eine bloße Subtraktion berechnen, sondern erfordert Matrixoperationen (siehe beispielsweise ang_to_matrix). Da unendlich viele verschiedene Drehungen von denselben Startwinkeln zu denselben Endwinkeln möglich sind, ist der Ergebniswinkel a durch diese Operation normalerweise nicht vollkommen bestimmt, sondern hat immer noch ein Grad an Freiheit.
- A7.82 Die sich ergebenden Winkel pan, tilt und roll liegen im Bereich von -180..+180, ihre Vorzeichen lassen sich also dazu benutzen, zu bestimmen, ob die Drehung im Uhrzeigersinn oder im Gegenurzeigersin ist.
Beispiel (lite-C):
// Calculate an angle that aligns an axis to a vector
// (see also the ang_for_axis example for a different method)
function ang_align(ANGLE* ang,VECTOR* to,VECTOR* axis)
{
ANGLE axis_angle,target_angle;
vec_to_angle(axis_angle,axis); // f.i. (0,0,1) for the vertical axis
vec_to_angle(target_angle,to); // target angle to align to
ang_diff(ang,target_angle,axis_angle); // rotate angle by the difference of the axis and vector
}
Siehe auch:
vec_to_angle, ang, ang_for_axis,ang_rotate, vec_diff
► latest
version online