2010-02-17 51 views
0

我正在使用一個名爲FrontDirection的具有Vector3D類型屬性的3D。此對象旋轉如下:WPF - 獲取從上方看的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被賦予之間的距離矢量而不考慮方向。什麼是計算角度的好方法?

回答

2

這是我想出瞭解決方案:

var axisZ = new Vector3D(0, 0, 1); 
var angleZ = Vector3D.AngleBetween(axisZ, my3DObject.FrontDirection); 
double currentRotation = my3DObject.FrontDirection.X >= 0 ? angleZ : 360 - angleZ;