Требуется проверка при преобразовании вектора направления в эквивалентные углы поворота мира - PullRequest
0 голосов
/ 20 мая 2011

Я хочу визуализировать вектор направления в 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);
...