Я хочу визуализировать вектор направления в MAYA, для ввода требуется 3 угла в градусах или радианах. Я попытался преобразовать вектор направления с помощью следующей ссылки.
Нажмите здесь, чтобы увидеть функцию преобразования
Я преобразовал его в код C #, чтобы увидеть процесс без успеха.
Я использовал векторный класс из здесь .
Если здесь можно обнаружить какую-либо ошибку.
Vector3 vecDir = new Vector3((Double)numericUpDown_InputDirVectX.Value,
(Double)numericUpDown_InputDirVectY.Value,
(Double)numericUpDown_InputDirVectZ.Value);
//vecDir.Normalize();
Vector3 vecWorldUp = new Vector3((Double)numericUpDown_WorldUpVectorX.Value,
(Double)numericUpDown_WorldUpVectorY.Value,
(Double)numericUpDown_WorldUpVectorZ.Value);
vecWorldUp.Normalize();
// calculate the side vector
Vector3 vecSide = Vector3.CrossProduct(vecWorldUp, vecDir);
Vector3 vecUp = Vector3.CrossProduct(vecDir, vecSide);
Double cosY = Math.Sqrt( ((vecSide.X) * (vecSide.X) + (vecSide.Y) * (vecSide.Y)) ) ;
// solve each angle
Double rotZ = Math.Atan2((vecSide.Y), (vecSide.X));
Double rotY = Math.Atan2(-(vecSide.Z), (((vecSide.X) + (vecSide.Y)) / (Math.Cos(rotZ) + Math.Sin(rotZ))));
Double rotX = Math.Atan2((vecUp.Z), (vecDir.Z));
numericUpDown_OutputDirVectXRad.Value = (Decimal)rotX;
numericUpDown_OutputDirVectYRad.Value = (Decimal)rotY;
numericUpDown_OutputDirVectZRad.Value = (Decimal)rotZ;
numericUpDown_OutputDirVectXDeg.Value = RadianToDegree(rotX);
numericUpDown_OutputDirVectYDeg.Value = RadianToDegree(rotY);
numericUpDown_OutputDirVectZDeg.Value = RadianToDegree(rotZ);