Pergunta : Traduzir côordena de um sistema côordenado a outro

Em uma folha de papel: a côordenada do
The X aumenta da esquerda para a direita aumentos da côordenada de Y do
The do
(0.0) está no corner.

I tem dois pontos nesta folha: (x1, y1) e (x2, y1) (isto é, estão ambos na mesma linha horizontal) o

I fotocopia agora esta folha. Durante a fotocópia, o papel original desloc ligeiramente, e igualmente gira ligeiramente. Em conseqüência, meus dois pontos originais tornaram-se agora (nesta folha de papel nova):
(x3, y3) e (x4, y4). o

Now, dado algum ponto (a1, b1) na folha de papel original, que suas côordenadas seriam na folha de papel nova? o

I pensou que eu tinha derivado o formulat correto para este, mas eu pareço sempre ser alguns pixéis off.

Thanks.
class= do

Resposta : Traduzir côordena de um sistema côordenado a outro

Você tem derivado provavelmente já as equações corretas, mas deixar-nos atravessam ele de qualquer maneira.

Você quer uma transformação rígida que traduza (x1, y1) (x3, y3), e (x2, y1) a (x4, y4).

Nós podemos pensar da transformação rígida como uma tradução, seguido por uma rotação.  Nós começaremos com uma tradução que se mova (x1, y1) para (x3, y3).  Isto é fácil:

(a, b) ---> (a + x3 - x1, b + y3 - y1)

fará o truque.

Agora, nós queremos uma transformação em que gire em torno do ponto (x3, y3) de modo que o ponto original (x2, y1), que foi traçado sobre (x2 + x3 - x1, y3), gira sobre a (x4, y4).

Deixar-nos elaborar o ângulo desta rotação.  Recordar que o sentido de um vetor (x, y) pode ser determinado pelo atan2 (y, x) função (a maioria de bibliotecas de matemática têm um atan2 que determine o quadrante do vetor assim como seu arctan - não usam o atan simples (y/x) função para isto).

Assim a rotação total é apenas a diferença entre os dois sentidos angulares, de que é

theta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)

(recordar que nós precisamos os vetores que começam no ponto (x3, y3), assim que este precisa de ser subtraído de ambos os pontos).

Aprovação, agora, nós aplicamos simplesmente uma operação da rotação.

(c, d) -----> (c * cos (theta) - d * pecado (theta), c * pecado (theta) + d * cos (theta))

onde (c, d) = (a + x3 - x1, b + y3 - y1), de antes.


Se você está encontrando que você pôde estar por alguns pixéis perto da borda de sua imagem, você está sofrendo de um problema da definição: as posições verdadeiras de seus dois pontos não são realmente (x3, y3) e (x4, y4), mas aqueles são apenas os mais próximos côordenam.  Isto não afeta a tradução, desde que o mesmo erro (do secundário-pixel) apenas começ propagado durante todo a imagem.  Mas para a rotação, um erro pequeno na rotação próximo (x4, y4) poderia transformar em um erro maior mais distante ausente.  Basicamente, o erro será algo em torno da definição de sua imagem dividida pelo Abs (x2 - x1).  Se x2 e x1 são próximos junto, você pode ver porque você pôde estar por alguns pixéis.

Não há realmente nenhuma boa maneira de corrigir para esta, à excepção da obtenção mais exato côordena para (x3, y3) e (x4, y4), ou começ mappings para mais de dois pontos, e fazendo um melhor ajuste na tradução e na rotação que você quer.

Esperar que isto ajuda!
Outras soluções  
 
programming4us programming4us