GiD - The personal pre and post processor

*LocalAxesDef(EulerAngles)

*LocalAxesDef(EulerAngles)

This is similar to the LocalAxesDef command, only with the EulerAngles option.

It returns three numbers that are the 3 Euler angles (radians) that define a local axes system , with the so-called "x-convention," (see https://mathworld.wolfram.com/EulerAngles.html)




Rotation of a vector expressed in terms of euler angles.




How to calculate X[3] Y[3] Z[3] orthonormal vector axes from three euler angles angles[3]


cosA=cos(angles[0])
sinA=sin(angles[0])
cosB=cos(angles[1])
sinB=sin(angles[1])
cosC=cos(angles[2])
sinC=sin(angles[2])
 
X[0]= cosC*cosA - sinC*cosB*sinA
X[1]= -sinC*cosA - cosC*cosB*sinA
X[2]= sinB*sinA
 
Y[0]= cosC*sinA + sinC*cosB*cosA
Y[1]= -sinC*sinA + cosC*cosB*cosA
Y[2]= -sinB*cosA
 
Z[0]= sinC*sinB
Z[1]= cosC*sinB
Z[2]= cosB


How to calculate euler angles angles[3] from X[3] Y[3] Z[3] orthonormal vector axes

if(Z[2]<1.0-EPSILON && Z[2]>-1.0+EPSILON){
    double senb=sqrt(1.0-Z[2]*Z[2]);
    angles[0]=acos(-Y[2]/senb);
    if(X[2]/senb<0.0) angles[0]=M_2PI-angles[0];
    angles[1]=acos(Z[2]);
    angles[2]=acos(Z[1]/senb);
    if(Z[0]/senb<0.0) angles[2]=M_2PI-angles[2];    
} else {
    angles[0]=0.0;
    angles[1]=acos(Z[2]);
    angles[2]=acos(X[0]);
    if(-X[1]<0.0) angles[2]=M_2PI-angles[2];
}


COPYRIGHT © 2022 · GID · CIMNE