c# - Calcular el ángulo de la transformación de la matriz



wpf math (2)

Puedes usar esto:

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

La idea es:

  1. Creamos un tempvector (1,0)
  2. Aplicamos la transformación de matriz en el vector y obtenemos un vector temporal rotado
  3. Calculamos el ángulo entre el vector temporal original y rotado

Puedes jugar con esto:

[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);
}

https://src-bin.com

Tengo la siguiente línea de código: he aplicado algunas rotaciones al rectángulo sin conocer los valores (de cuántos grados). Ahora quiero obtener la rotación o el ángulo del elemento en 2D.

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 !!

Esto no parece ser el valor correcto. Quiero obtener ángulos de 0 a 360 grados






matrix