我正在使用具有Vector3D类型属性的3D,称为FrontDirection。此对象按如下方式旋转:
var rotate = new AxisAngleRotation3D(new Vector3D(0, 1, 0), deltaAngleInDegrees);
var transform = new RotateTransform3D(rotate);
my3DObject.FrontDirection = transform.Transform(my3DObject.FrontDirection);
经过一些任意旋转后,我想确定从上方看的物体角度。我希望这个值在[0,360]之间变化。我能得到的最接近的是:
var angle = Vector3D.AngleBetween(new Vector3D(1, 0, 1), my3DObject.FrontDirection);
然而,当一个完整的圆圈旋转物体时,角度变化0到180,然后回落到0.似乎AngleBetween给出了矢量之间的距离而没有考虑方向。计算角度的好方法是什么?
答案 0 :(得分:2)
以下是我提出的解决方案:
var axisZ = new Vector3D(0, 0, 1);
var angleZ = Vector3D.AngleBetween(axisZ, my3DObject.FrontDirection);
double currentRotation = my3DObject.FrontDirection.X >= 0 ? angleZ : 360 - angleZ;