我想在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);