Usted ha derivado probablemente ya las ecuaciones correctas, pero dejarnos pasan con él de todos modos.
Usted quiere una transformación rígida que traduzca (x1, y1) (x3, y3), y (x2, y1) a (x4, y4).
Podemos pensar en la transformación rígida como traducción, seguido por una rotación. Comenzaremos con una traducción a la cual se mueva (x1, y1) (x3, y3). Esto es fácil:
(a, b) ---> (a + x3 - x1, b + y3 - y1)
hará el truco.
Ahora, queremos una transformación en la cual gire alrededor del punto (x3, y3) de modo que el punto (x2, y1), que se ha trazado encima (x2 + x3 - x1, y3), gira original encima a (x4, y4).
Resolvamos el ángulo de esta rotación. Recordar que la dirección de un vector (x, y) se puede determinar por el atan2 (y, x) función (la mayoría de las librerías matemáticas tienen un atan2 que determine el cuadrante del vector tan bien como su arctan - no utilizan el atan simple (y/x) función para esto).
La rotación total es tan apenas la diferencia entre las dos direcciones angulares, de que es
theta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)
(recordar que necesitamos los vectores que comienzan en el punto (x3, y3), así que éste necesita ser restado de ambos puntos).
Autorización, ahora, aplicamos simplemente una operación de la rotación.
(c, d) -----> (c * lechuga romana (theta) - d * pecado (theta), c * pecado (theta) + d * lechuga romana (theta))
donde (c, d) = (a + x3 - x1, b + y3 - y1), de antes.
Si usted está encontrando que usted puede ser que esté apagado al lado de algunos pixeles cerca del borde de su imagen, usted está sufriendo de un problema de la resolución: las localizaciones verdaderas de sus dos puntos no están realmente (x3, y3) y (x4, y4), pero ésos están apenas los más cercanos coordinan. Esto no afecta a la traducción, puesto que el mismo error (del secundario-pixel) apenas consigue propagado a través de la imagen. Pero para la rotación, un pequeño error en la rotación cerca (x4, y4) podría dar vuelta en un error más grande más lejos ausente. Básicamente, el error será algo alrededor de la resolución de su imagen dividida por el ABS (x2 - x1). Si x2 y x1 son cercanos juntos, usted puede ver porqué usted puede ser que esté apagado al lado de algunos pixeles.
No hay realmente buena manera de corregir para esto, con excepción de conseguir más exacto coordina para (x3, y3) y (x4, y4), o consiguiendo los mappings para más de dos puntos, y haciendo un mejor ajuste en la traducción y la rotación que usted quiere.
¡Esperar que esto ayude!