Rotación de un polígono 3d en el plano xy manteniendo la orientación

Tengo un polígono orientado de cualquier manera y posicionado en cualquier lugar del espacio 3d. Necesito transformar el polígono en el plano xy para poder realizar varias operaciones en él (en particular, generar una cuadrícula de puntos a través del cuadro delimitador del polígono) en 2d en lugar de 3d, luego transformarlo nuevamente.

El problema viene con la orientación del polígono transformado. Si solo quisiera rotar en el plano, podría tomar el ángulo entre el polígono normal y el plano xy y rotar alrededor de un eje ortogonal a ambos (producto cruzado). Sin embargo, requiero que el cuadro delimitador del polígono esté orientado de manera que el borde inferior (valor z más bajo) del cuadro delimitador sea coplanar con el plano xy, tanto antes como después de la transformación. En otras palabras, el cuadro delimitador descansa al ras en un lado que es paralelo al suelo. Después de la transformación, este borde sería paralelo al eje x. Esto es para que la cuadrícula de puntos que genero en la superficie siempre tenga filas paralelas al suelo, independientemente de la orientación del polígono.

Mi enfoque es realizar dos rotaciones; primero gire alrededor del eje z por el ángulo entre la línea formada por la intersección del plano del polígono y el plano xy, y el eje x. Esto garantiza que la parte inferior del cuadro delimitador no se mueva fuera del plano xy. Luego, gire nuevamente alrededor del eje x por el ángulo entre la normal (nueva) del polígono y el plano xz. Aquí están los pasos:

  1. Encuentra la ecuación para el plano del polígono (del normal).
  2. Encuentra la intersección del plano del polígono y el plano xy. Esta es una línea en el plano xy.
  3. Encuentra el ángulo entre esta línea y el eje x.
  4. Gire el polígono en este ángulo alrededor del eje z.
  5. Determinar nueva normalidad.
  6. Encuentre el ángulo entre la nueva normal y la normal del plano xy.
  7. Gire el polígono en este ángulo alrededor del eje x.
  8. El polígono ahora debería estar en el plano xy; genere un cuadro delimitador utilizando los valores max / min x e y, genere una cuadrícula de puntos, etc., luego transforme todo de nuevo a donde comenzó.

Me doy cuenta de que se deben combinar dos rotaciones para reducir el número de multiplicaciones de matrices, pero este es el algoritmo general.

No soy un experto en gráficos; ¿Alguien puede ofrecer consejos sobre esta técnica? ¿Hay una mejor manera? ¿Mi enfoque suena correcto? Estoy desarrollando en Java y estoy buscando usar la clase Transform3D para las rotaciones.

Respuesta 1

Para manejar polígonos 3D, es común simplemente ignorar la coordenada Z (que efectivamente proyecta el plano directamente en el plano XY) para sus mapeos, luego simplemente restablezca las coordenadas Z más tarde.

El único momento en que esto no funciona es si el polígono original es perpendicular al plano XY, ya que la asignación resultante degenera en una línea.

Respuesta: 2

Esta es mi primera pregunta publicada. Tengo una consulta OQL bastante complicada que enumera campos estáticos de clases cargadas en nuestros paquetes. Un problema que estoy viendo al ejecutar la consulta contra 'jhat' de ...

Tengo una aplicación de primavera con un servlet que tiene mapeo de url de * .html. Todo funciona muy bien con mis controladores anotados. Mi pregunta es cómo puedo configurar mi servlet y asignaciones anotadas para ...

He desarrollado una aplicación de Android para la que ahora estoy creando pruebas unitarias. Creé un segundo proyecto (con el sufijo ".test" como nombre del proyecto) y seleccioné el proyecto original como ...

No tengo experiencia ni con SharePoint ni con los servicios web, pero debería desarrollar un acceso simple a nuestro servidor web Microsoft Office SharePoint 2007. Lo que tengo que hacer es agregar un registro a ...