Permítanme decir esto por adelantado: este problema es difícil. Hay una razón por la cual la pregunta vinculada de Dan Story no ha sido respondida. Deje que proporcione una explicación para las personas que quieran probarlo. Aunque espero estar equivocado sobre lo difícil que es.
Supongo que usted conoce las coordenadas de la pantalla 2D y la matriz de proyección/perspectiva. Necesitas saber al menos esto (si no conoces la matriz de proyección, esencialmente estás usando una cámara diferente para mirar el mundo). Vamos a llamar a cada par de coordenadas 2D pantalla (a_i, b_i)
, y asumirá la matriz de proyección es de la forma
P = [ px 0 0 0 ]
[ 0 py 0 0 ]
[ 0 0 pz pw]
[ 0 0 s 0 ], s = +/-1
Casi cualquier proyección razonable tiene esta forma. Trabajando a través del canal de renderizado, se encuentra que
a_i = px x_i/(s z_i)
b_i = py y_i/(s z_i)
donde (x_i, y_i, z_i)
son las coordenadas en 3D originales del punto.
Supongamos que conoce su forma en un conjunto de coordenadas canónicas (lo que desee), de modo que los vértices sean (x0_i, y0_i, z0_i)
. Podemos organizar estos como columnas de una matriz C
. Las coordenadas reales de la forma son una transformación rígida de estas coordenadas. Organicemos de manera similar las coordenadas reales como columnas de una matriz V
.A continuación, estos están relacionados por
V = R C + v 1^T (*)
donde 1^T
es un vector fila de los que tienen la longitud correcta, R
es una matriz de rotación ortogonal de la transformación rígida, y v
es el vector de desplazamiento de la transformación.
Ahora, tiene una expresión para cada columna de V
desde arriba: la primera columna es { s a_1 z_1/px, s b_1 z_1/py, z_1 }
y así sucesivamente.
que debe resolver el conjunto de ecuaciones (*)
para el conjunto de escalares z_i
, y la transformación rígida definida R
y v
.
Dificultades
- La ecuación es no lineal en las incógnitas, que implica cocientes de
R
y z_i
- Hemos asumido hasta ahora que sabe que coordina 2D corresponde a la que los vértices de la forma original (si su forma es un cuadrado, este es un problema levemente menor).
- Suponemos que incluso hay una solución; si hay errores en los datos 2D, entonces es difícil decir qué tan bien se cumplirá la ecuación
(*)
; la transformación será no rígida o no lineal.
Pidiendo una solución específica a este problema en lugar de técnicas generales huele muy parecido a una tarea. –
oh vamos, este caso es general, y la solución específica será una respuesta general a muchos casos como este (para triangules por ejemplo ...) – Rella
posible duplicado de [Vector Normal de Tres Puntos] (http: // stackoverflow .com/questions/2035659/normal-vector-de-tres puntos) – dmckee