Pregunta

Quiero hacer algunos dibujos en 2D y, por lo tanto, quiero implementar algunas transformaciones matriciales.Con mi ligera experiencia en matemáticas, estoy tratando de entender cómo hacerlo en C# (obviamente, cualquier otro lenguaje de programación lógica lo haría).

Todo lo que leo es explicar que necesitamos trabajar con matrices de 3x3 para poder hacer frente a las traducciones.Porque no se puede hacer traducción con multiplicaciones.Pero es con multiplicaciones de las matrices que creamos nuestras transformaciones.Entonces trabajamos con algo como:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }

Entiendo la media de la tercera columna, pero ¿por qué necesitamos la tercera fila?Tanto en una matriz identidad como en una rotación, escala o rotación la última fila es la misma.¿Hay operaciones a las que aún no llegué y que lo necesitarán?¿Es porque algunos lenguajes (Java) funcionan mejor con matrices de "dimensiones cuadradas"?Si es así, puedo usar 3 columnas y 2 filas en C# (ya que las matrices irregulares funcionan tan bien o mejor).

Por ejemplo, para una rotación + traslación tengo una matriz como esta

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }

No es necesaria la última fila.

¿Fue útil?

Solución

esto es con multiplicaciones de las matrices que creamos nuestras transformaciones

Este Por eso queremos matrices cuadradas.

Supongamos que hicimos lo que propone y usamos matrices de 2x3 para nuestras transformaciones.

Entonces una rotación sería

( x1, x2, 0 )
( y1, y2, 0 )

y una traducción sería

( 1, 0, tx )
( 0, 1, ty )

y podríamos realizar rotaciones o traslaciones multiplicando nuestra matriz por un vector columna que represente el punto:

    ( x )
M   ( y )
    ( 0 )

para obtener respuestas correctas.

Sin embargo - ¿Cómo haríamos? composición transformaciones?De hecho, para su ejemplo "para una rotación + traslación tengo una matriz como esta", ¿cómo llegar a esa matriz?Claro, en este caso puedes simplemente escribirlo, pero ¿en general?Bueno, ya sabes la respuesta:

esto es con multiplicaciones de las matrices que creamos nuestras transformaciones

Entonces debe ser posible multiplica dos matrices de transformación para obtener otra matriz de transformación.Y las reglas de la multiplicación de matrices muestran que esto:

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???

no es una multiplicación de matrices válida.Necesitamos matrices que se puedan multiplicar para que nuestras transformaciones sean componibles.Entonces tenemos esa fila extra.


Ahora bien, la forma en que lo he expresado aquí está, de hecho, completamente alejada de la presentación matemática estándar, en la que las conocidas transformaciones de rotación y traslación son sólo casos especiales del poder total de las transformaciones de coordenadas homogéneas en el plano proyectivo, pero creo que servirá para mostrarle por qué necesitamos esa fila adicional: para hacer que la matriz sea cuadrada y, por lo tanto, pueda multiplicarse con matrices similares.

Otros consejos

La respuesta es coordenadas homogéneas.Para combinar la rotación y la traducción en una operación se necesita una dimensión adicional que el modelo requiere.Para las cosas planas, esto son 3 componentes y para cosas espaciales, esto es 4 componentes.Los operadores toman 3 componentes y devuelven 3 componentes que requieren 3x3 matrices.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top