Cuestión : El traducir coordina a partir de un sistema coordinado a otro

En una hoja del papel: la coordinada del
The X aumenta de izquierda a derecha aumentos de la coordinada Y del
The del
(0.0) está en el corner.

I tiene dos puntos en esta hoja: (x1, y1) y (x2, y1) (es decir, están ambos en la misma linea horizontal) el

I ahora fotocopia esta hoja. Durante la fotocopia, el papel original cambiado de puesto levemente, y también gira levemente. Consecuentemente, mis dos puntos originales ahora se convirtieron (en esta nueva hoja del papel):
(x3, y3) y (x4, y4). ¿el

Now, dado punto (a1, b1) en la hoja original del papel, cuáles sus coordenadas serían en la nueva hoja del papel? el

I pensó que había derivado el formulat correcto para esto, pero parezco siempre ser algunos pixeles off.

Thanks.
class= del

Respuesta : El traducir coordina a partir de un sistema coordinado a otro

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!
Otras soluciones  
 
programming4us programming4us