需要验证从矢量方向转换为等效的世界旋转角度

时间:2011-05-20 06:55:55

标签: c# visualization vector-graphics maya

我想在MAYA中可视化方向向量,需要3个角度来输入度数或弧度。我试图通过以下链接转换方向向量。

Click here to see the conversion function

我将其转换为C#代码,以查看该过程没有成功 我使用了来自here的矢量类。

如果在这里可以找到任何错误。

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);

0 个答案:

没有答案