Questione : La traduzione coordina da un sistema coordinato ad un altro

Su un foglio di carta: del
The Coordinata x aumenta da sinistra a destra il
(0.0) di aumenti di coordinata y del
The dall'alto al basso è al corner.

I ha due punti su questo strato: (x1, y1) e (x2, y1) (cioè, sono entrambi sulla stessa linea orizzontale) il

I ora fotocopia questo strato. Durante la fotocopiatura, la carta originale spostata un po'ed inoltre gira un po'. Di conseguenza, i miei due punti originali ora sono diventato (su questo nuovo foglio di carta):
(x3, y3) e (x4, y4).

Now, dato del punto (a1, b1) sul foglio di carta originale, che cosa le relative coordinate sarebbero sul nuovo foglio di carta? il

I ha pensato che avessi derivato il formulat corretto per questo, ma sembro sempre essere alcuni pixel off.

Thanks.
class= del

Risposta : La traduzione coordina da un sistema coordinato ad un altro

Probabilmente già avete derivato le equazioni corrette, ma lasciarli passano con esso comunque.

Volete una trasformazione rigida che traduce (x1, y1) (x3, y3) e (x2, y1) a (x4, y4).

Possiamo pensare alla trasformazione rigida come traduzione, seguito da una rotazione.  Cominceremo con una traduzione che si muove (x1, y1) verso (x3, y3).  Ciò è facile:

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

farà il trucco.

Ora, vogliamo una trasformazione a che gira intorno al punto (x3, y3) in modo che il punto originale (x2, y1), che è stato tracciato sopra (x2 + x3 - x1, y3), gira sopra a (x4, y4).

Risolviamo l'angolo di questa rotazione.  Ricordare che il senso di un vettore (x, y) può essere determinata dal atan2 (y, x) funzione (la maggior parte delle biblioteche per la matematica hanno un atan2 che determina il quadrante del vettore come pure relativo arctan - non usano il atan semplice (y/x) funzione per questo).

Così la rotazione totale è appena la differenza fra i due sensi angolari, quella è

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

(ricordar che abbiamo bisogno dei vettori che cominciano al punto (x3, y3), in modo da questo deve essere sottratto da entrambi i punti).

Approvazione, ora, applichiamo semplicemente un funzionamento di rotazione.

(c, d) -----> (c * cos (teta) - d * peccato (teta), c * peccato (teta) + d * cos (teta))

dove (c, d) = (a + x3 - x1, b + y3 - y1), da prima.


Se stiate trovando che potreste essere disinseriti da alcuni pixel vicino al bordo della vostra immagine, state soffrendo da un problema di risoluzione: le posizioni allineare dei vostri due punti non sono realmente (x3, y3) e (x4, y4), ma quelli sono appena il più vicino coordinano.  Ciò non interessa la traduzione, poiché lo stesso errore (del secondario-pixel) ottiene appena propagato durante l'immagine.  Ma per la rotazione, un piccolo errore nella rotazione vicino (x4, y4) potrebbe trasformarsi in un più grande errore più lontano assente.  Basicamente, l'errore sarà qualcosa intorno alla risoluzione della vostra immagine divisa dall'ABS (x2 - x1).  Se x2 e x1 sono insieme vicini, potete vedere perché potreste essere disinseriti da alcuni pixel.

Non ci è realmente buon senso correggere per questo, tranne ottenere più esatto coordina per (x3, y3) e (x4, y4), o ottenendo i rilievi per più di due punti e facendo il il migliore adattamento sulla traduzione e sulla rotazione che volete.

Sperare che questo aiuti!
Altre soluzioni  
 
programming4us programming4us