Pregunta

Quiero proyectar mi Polígono largo de un vector a un plano en el espacio 3D. Me gustaría utilizar preferentemente una matriz de transformación única de hacer esto, pero no sé cómo construir una matriz de este tipo.

Dada

  • parámetros del avión (ax + by + cz + d),
  • las coordenadas mundiales de mi polígono. Como se indica en el el titular, todos los vértices del polígono mi mentira en otro plano.
  • el vector de dirección a lo largo de la cual proyectar mi Polígono (actualmente vector normal del plano del polígono)

objetivo matriz de transformación 4x4 -a que realiza la proyección requerida,

o

  • una idea sobre cómo construir una yo

Actualizar

Gracias por la respuesta, funciona según lo previsto.

Una palabra de advertencia a las personas que encontraron la siguiente: Si el plano de la proyección normal es paralela al vector de proyección, el denominador D se convertirá en (casi) 0, así que para evitar cosas extrañas suceda, algún tipo de manipulación para se necesita este caso especial. Lo resuelto mediante la comprobación de si D <1e-5, y si es así, simplemente traducir mi polígono a lo largo de HTE extrusión de vector.

¿Fue útil?

Solución

uno Supongamos de vértices del polígono es (x0, y0, z0), y el vector de dirección es (dx,dy,dz).

A punto de la línea de proyección es:. (x,y,z) = (x0 + t*dx, y0 + t*dy, z0 + t*dz)

Usted quiere encontrar la intersección de esta línea con el plano, por lo que enchufarlo en la ecuación ax+by+cz+d = 0 avión y resolver para t:

t = (-a*x0 - b*y0 - c*z0 - d) / (a*dx + b*dy + c*dz)

Y entonces usted tiene su vértice de destino:. x = x0+dx*t, etc.

Dado que esta es una transformación afín, puede ser realizado por una matriz de 4x4. Debe ser capaz de determinar los elementos de matriz escribiendo las tres ecuaciones para x, y, z como una función de x0, y0, z0 y tomando los coeficientes.

Por ejemplo, para x:

x = x0 - (a*dx*x0 + b*dx*y0 + c*dx*z0 + d*dx) / D
x = (1 - a*dx/D)*x0 - (b*dx/D)*y0 - (c*dx/D)*z0 - d*dx/D

Donde D = a*dx + b*dy + c*dz es el denominador desde arriba. Y y Z De modo similar trabajo.

matriz Resultado:

1-a*dx/D    -b*dx/D    -c*dx/D   -d*dx/D
 -a*dy/D   1-b*dy/D    -c*dy/D   -d*dy/D
 -a*dz/D    -b*dz/D   1-c*dz/D   -d*dz/D
    0          0          0         1

(Nota: En Direct3D esta matriz debe ser transpuesta, ya que utiliza vectores fila en lugar de vectores de columna).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top