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!