2010-04-15 11 views
2

Je souhaite faire pivoter un vecteur 2D (!) Donné, y at-il une fonction intégrée WPF pour cela? Actuellement, je fais manuellement:WPF: Rotation d'un vecteur 2D

 Vector v = new Vector(); 
     v.X = 10; v.Y = 10; 

     Vector v2 = new Vector(); 

     v2.X = v.X * Math.Cos(-90 * 180/Math.PI) - v.Y * Math.Sin(-90 * 180/Math.PI); 
     v2.Y = v.Y * Math.Cos(-90 * 180/Math.PI) + v.X * Math.Sin(-90 * 180/Math.PI); 

Je pense que cela devrait être également possible en multipliant le vecteur donné par une matrice de rotation? De toute façon, je ne comprends pas, quelqu'un peut-il me donner un exemple? Merci!

Répondre

5

Vous devriez regarder System.Windows.Media.Matrix.Rotate(...). En utilisant cette méthode, vous pouvez créer une matrice de rotation que vous pouvez ensuite appliquer à votre vecteur en utilisant la méthode statique Vector.Mulitply(...) ou la méthode Matrix.Transform(...).

Je n'ai jamais utilisé la classe Matrix jusqu'à présent, mais ma première idée était d'utiliser quelque chose comme ceci:

Matrix m = Matrix.Identity; 
m.Rotate(90); 
Vector v2 = m.Transform(v); 

Notez que la classe Matrix utilise des matrices de 3x3, mais cela ne veut pas dire qu'il est destiné à 3D. Il est plutôt destiné à la 2D (comme vous pouvez le lire dans la documentation). Les paramètres supplémentaires sont utilisés pour combiner une traduction avec une autre transformation en une transformation. Voir Homogenous coordinates pour plus de détails.

+0

Merci, j'ai fini par utiliser Matrix.Rotate (angle). Notez que cette méthode renvoie void. –

+0

Vous avez raison. Edited le code, de sorte que 'Rotate (...)' est utilisé correctement. – gehho