2010-02-17 3 views
0

Je travaille avec une 3D qui a une propriété de type Vector3D appelée FrontDirection. Cet objet est mis en rotation comme suit:WPF - Récupère l'angle en degrés d'un Vector3D vu de dessus

var rotate = new AxisAngleRotation3D(new Vector3D(0, 1, 0), deltaAngleInDegrees); 
var transform = new RotateTransform3D(rotate); 

my3DObject.FrontDirection = transform.Transform(my3DObject.FrontDirection); 

Après une certaine quantité arbitraire de rotation, je voudrais déterminer l'angle de l'objet en vue de dessus. Je m'attendrais à ce que la valeur varie entre [0, 360). Le plus proche que je peux obtenir est la suivante:

var angle = Vector3D.AngleBetween(new Vector3D(1, 0, 1), my3DObject.FrontDirection); 

Cependant, tout en faisant tourner l'objet dans un cercle complet de l'angle varie de 0 à 180, puis retombe à 0. Il semble que AngleBetween donne la distance entre la vecteurs sans tenir compte de la direction. Quel est un bon moyen de calculer l'angle?

Répondre

2

Voici la solution que je suis venu avec:

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