【发布时间】:2010-02-20 04:03:17
【问题描述】:
我正在处理一个 3D,它有一个称为 FrontDirection 的 Vector3D 类型的属性。该对象旋转如下:
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 是在不考虑方向的情况下给出向量之间的距离。计算角度的好方法是什么?
【问题讨论】: