2009-05-19 22 views
5

Hay una función como:¿Dónde está la diferencia entre una "transformación" y una "transformación afín"?

CATransform3DGetAffineTransform

Devuelve la transformación afín representado por 't'. Si 't' no puede ser representado exactamente como una transformación afín, el valor devuelto es indefinido.

No estoy tan orientado a las matemáticas, por lo que una descripción fácil de entender sería muy agradable. Wikipedia no fue de gran ayuda aquí.

+0

Esto es similar a esta pregunta: http://stackoverflow.com/questions/567829/catransform3d-vs-cgaffinetransform –

Respuesta

0

CoreAnimation utiliza transformaciones 3D. Las transformaciones afines son un subconjunto 2D de esas transformaciones 3D. Permiten solo la traducción, la rotación y la escala en el plan X, Y.

+2

Eso no es verdad: las transformaciones afines son transformaciones que preservan la colinealidad y la relación de distancias. La traducción, la rotación, la escala y más son afines en tres dimensiones, también. –

+0

Debería haber precisado que el alcance de mi respuesta era Cocoa y NSAffineTransform. – mouviciel

6

transformaciones afines son transformaciones que no "excesivamente distorsionan" la geometría en el sentido de que:

  • puntos que se ponen en una línea antes de que todavía se encuentran en una línea después de la transformación
  • las distancias relativas entre los puntos permanecen igual (por lo que un cuadrado puede no ser cuadrado, pero aún tiene la misma longitud de lado)

Por lo tanto, la rotación y la escala son afines; por ejemplo, la proyección no lo es.

1

Las transformaciones de Affine son transformaciones, pero las transformaciones no necesitan ser Affine. Por ejemplo, una cizalladura del avión no es Afín porque no envía líneas a las líneas.

Las transformaciones de Affine son, por definición, aquellas transformaciones que conservan proporciones de distancias y envían líneas a líneas (preservando la "colinealidad"). En la geometría euclidiana de dimensión finita, estos actúan mediante una transformación lineal seguida de una traducción, es decir, x -> Ax + b donde x es un vector, A es una transformación lineal y b es un vector.

Las transformaciones de Affine son excelentes para cambiar los sistemas de coordenadas, quizás de una forma bastante difícil de visualizar a las coordenadas habituales.

Las transformaciones de Affine con las que probablemente se encontrará en la práctica son traducciones, dilatación (es decir, escalado), rotación y reflexión. Si está desarrollando para iOS, por ejemplo, consulte las secciones CGAffineTransform de la documentación del desarrollador. Explicarán cómo crear transformaciones de Affine utilizando varios métodos de conveniencia y cómo aplicarlos a las instancias de UIView con el mensaje -setTransform.

pasado, un punto importante acerca de transformaciones afines es que son no conmutativa bajo Composición: aplicación de una transformada T1 seguido por transformar T2 es diferente en general, de la aplicación de T2 seguido por T1. Es decir, el orden en que aplica estos asuntos.

Cuestiones relacionadas