Lasciatemelo dire in anticipo: questo problema è difficile. C'è una ragione per cui la domanda collegata a Dan Story non ha avuto risposta. Lascia che fornisca una spiegazione per le persone che vogliono prenderne una pugnalata. Spero di sbagliarmi su quanto sia difficile, però.
Suppongo che le coordinate dello schermo 2D e la matrice di proiezione/prospettiva siano note. Hai bisogno di sapere almeno questo (se non conosci la matrice di proiezione, in pratica stai utilizzando una fotocamera diversa per guardare il mondo). Chiamiamo ogni coppia di uno schermo coordinate 2D (a_i, b_i)
, e vi assumono la matrice di proiezione è di forma
P = [ px 0 0 0 ]
[ 0 py 0 0 ]
[ 0 0 pz pw]
[ 0 0 s 0 ], s = +/-1
Quasi ogni proiezione ragionevole ha questa forma. Lavorando attraverso la pipeline di rendering, si scopre che
a_i = px x_i/(s z_i)
b_i = py y_i/(s z_i)
dove (x_i, y_i, z_i)
sono le coordinate originali 3D del punto.
Ora, supponiamo che tu conosca la tua forma in un insieme di coordinate canoniche (qualunque cosa tu voglia), in modo che i vertici siano (x0_i, y0_i, z0_i)
. Possiamo organizzarli come colonne di una matrice C
. Le coordinate effettive della forma sono una trasformazione rigida di queste coordinate. Analogamente, organizziamo le coordinate attuali come colonne di una matrice V
.Allora queste sono legate dalla relazione
V = R C + v 1^T (*)
dove 1^T
è un vettore di riga quelli con la giusta lunghezza, R
è una matrice di rotazione ortogonale della trasformazione rigida, e v
è il vettore offset della trasformazione.
Ora è presente un'espressione per ogni colonna di V
dall'alto: la prima colonna è { s a_1 z_1/px, s b_1 z_1/py, z_1 }
e così via.
si deve risolvere il sistema di equazioni (*)
per l'insieme di scalari z_i
, e la trasformazione rigida definito R
e v
.
Difficoltà
- L'equazione è lineare nelle incognite, coinvolgendo quozienti di
R
e z_i
- Abbiamo ipotizzato fino ad ora sapere quale coordinate 2D corrisponde a cui vertici della forma originale (se la tua forma è quadrata, questo è un po 'meno un problema).
- Supponiamo che ci sia addirittura una soluzione; se ci sono errori nei dati 2D, allora è difficile dire quanto sarà soddisfatta l'equazione
(*)
; la trasformazione sarà non rigida o non lineare.
Chiedere una soluzione specifica a questo problema piuttosto che le tecniche generali ha un odore molto simile a un compito a casa. –
oh dai, questo caso è generale, e la soluzione specifica sarà di carattere generale per molti casi come questo (per triangoli per ex ...) – Rella
possibile duplicato di [Vettore normale di tre punti] (http: // stackoverflow .com/domande/2035659/normale-vettore-di-tre-punti) – dmckee