2013-01-02 17 views
7

Ich habe folgende Codezeile: Ich habe ein paar Umdrehungen auf das Rechteck angewendet, ohne zu wissen, wie viele Werte (wie viel Grad). Jetzt möchte ich Drehung oder Winkel des Elements in 2D erhalten.Berechne den Winkel aus der Matrix-Transformation

Rectangle element = (Rectangle)sender; 
MatrixTransform xform = element.RenderTransform as MatrixTransform; 
Matrix matrix = xform.Matrix; 
third.Content = (Math.Atan(matrix.M21/matrix.M22)*(180/Math.PI)).ToString(); 

and the matrix is like following 
|M11 M12 0| 
|M21 M22 0| 
|dx dy 1| which is Transformation Matrix I guess !! 

Dies scheint nicht korrekt zu sein. Ich möchte Winkel bekommen in 0 bis 360 Grad

+0

Ich denke, es ist eine Transformationsmatrix. –

+0

Ja, es ist Transformation Matrix und IT-Typ von MatrixTransform in C#. Ich möchte Angle erhalten, nachdem die Transformation angewendet wurde. –

Antwort

9

Sie diese verwenden können:

var x = new Vector(1, 0); 
Vector rotated = Vector.Multiply(x, matrix); 
double angleBetween = Vector.AngleBetween(x, rotated); 

Die Idee ist:

  1. Wir haben eine tempvector erstellen (1,0)
  2. Wir wenden die Matrix-Transformation auf den Vektor und erhalten eine gedrehte Temp Vektor
  3. Wir berechnen den Winkel zwischen dem Original und dem gedrehten Temp Vektor

Mit diesem rumspielen können:

[TestCase(0,0)] 
[TestCase(90,90)] 
[TestCase(180,180)] 
[TestCase(270,-90)] 
[TestCase(-90, -90)] 
public void GetAngleTest(int angle, int expected) 
{ 
    var matrix = new RotateTransform(angle).Value; 
    var x = new Vector(1, 0); 
    Vector rotated = Vector.Multiply(x, matrix); 
    double angleBetween = Vector.AngleBetween(x, rotated); 
    Assert.AreEqual(expected,(int)angleBetween); 
} 
+0

Danke Leute für sofortige Antwort. –

8

FÜR DIE ZUKUNFT AUF:

Dies gibt Ihnen den Drehwinkel einer Transformationsmatrix im Bogenmaß:

var radians = Math.Atan2(matrix.M21, matrix.M11); 

und Sie können den Radianten in Grad konvertieren, wenn Sie benötigen:

var degrees = radians * 180/Math.PI; 
Verwandte Themen