1 votos

Cálculo de 2 planos ortogonales al ras con 2 vectores correspondientes

Estoy tratando de hacer algún algoritmo OBB mediante el procesamiento de los bordes del casco convexo en 3D. Pero estoy luchando con el cálculo de 2 planos ortogonales al ras con cualquier 2 bordes.

Al grano. Supongamos por un momento que las aristas son vectores. Consideremos lo siguiente:

Dados dos vectores: (1,0,1) y (0,1,1), su producto punto es claramente distinto de 0. Por tanto, no son perpendiculares.

Ejemplo 1: No es ortogonal

Pero si lo miramos de otra manera, desde arriba, sus proyecciones sobre el plano con normal (0,1,0) son perpendiculares. Por lo tanto existen 2 planos que son ortogonales y al ras de esos 2 vectores (En ese caso, planos con normal (1,0,0) y (0,0,1)).

Ejemplo 1: Ortogonal cuando se proyecta

Este es un caso trivial y requeriría proyectar las aristas en un plano alineado axialmente, pero eso sólo daría lugar a la comprobación de tales casos.

Tendríamos que profundizar más. Considera lo siguiente:

Dados dos vectores: (1,0,1) y (1,1,1), ambos productos punto con y sin proyección sobre planos alineados axialmente no son perpendiculares.

Ejemplo 2: No es ortogonal

Pero cuando echamos un vistazo desde un ángulo diferente, existen 2 planos que son ortogonales y a ras de ellos (vistos desde arriba y algún ángulo):

Ejemplo 2: Ortogonal cuando se proyecta

Las normales de los planos calculados tendrían que ser proyecciones de esas aristas sobre algún plano desconocido y ahí es donde he fallado. Por supuesto, por ahora he descuidado el hecho de que los planos consisten no sólo en el vector normal, sino también en el desplazamiento. Esto parece que debería ser posible pero no se me ocurrió nada.

La pregunta: ¿Es posible calcular esos dos planos ortogonales a partir de esos dos vectores? ¿Quizás sería posible con más datos? ¿O tal vez me faltan conocimientos básicos sobre vectores, planos y perpendicularidad?

Gracias de antemano por cualquier ayuda.

1voto

amd Puntos 2503

Dos planos en $\mathbb R^3$ son ortogonales si sus normales lo son. Las normales de los planos que contienen (es decir, están al ras de) una arista son ortogonales al vector de dirección de esa arista. Por lo tanto, tu problema se reduce a encontrar un par de vectores que sean respectivamente ortogonales a un par de vectores dados -los vectores de dirección de las aristas- y entre sí.

Como estás trabajando en $\mathbb R^3$ hay una manera fácil de generar tal par usando productos cruzados. Dejemos que $\mathbf v_1$ y $\mathbf v_2$ sean los dos vectores de dirección de las aristas. Establezca $\mathbf n_1=\mathbf v_1\times\mathbf v_2$ y $\mathbf n_2=\mathbf n_1\times\mathbf v_2$ . Por las propiedades del producto cruzado, $\mathbf n_1$ es ortogonal a $\mathbf v_1$ , $\mathbf n_2$ es ortogonal a $\mathbf v_2$ y $\mathbf n_1$ es ortogonal a $\mathbf n_2$ según sea necesario: $\mathbf n_1$ y $\mathbf n_2$ son las normales de un par ortogonal de planos de borde. Por simetría, por supuesto, se puede tomar $\mathbf n_2=\mathbf v_1\times\mathbf v_2$ y $\mathbf n_1=\mathbf n_2\times\mathbf v_1$ en su lugar.

Aplicando esto a sus ejemplos se obtiene $\mathbf n_1=(-1,-1,1)$ , $\mathbf n_2 = (-2,1,-1)$ para el primero, y $\mathbf n_1=(-1,0,1)$ , $\mathbf n_2=(-1,2,-1)$ para el segundo.

Hay otras formas de encontrar estos pares normales ortogonales, pero no se prestan necesariamente a un cálculo tan directo como el anterior. Por ejemplo, dado un vector distinto de cero $\mathbf v = (a,b,c)$ al menos dos de los elementos $(0,c,-b)$ , $(-c,0,a)$ y $(b,-a,0)$ de su complemento ortogonal también son distintos de cero. Elija dos que sean linealmente independientes (esto es siempre posible) y llámelos $\mathbf v_1^\perp$ y $\mathbf v_2^\perp$ . Todo vector ortogonal a $\mathbf v$ es entonces una combinación lineal $\alpha_1\mathbf v_1^\perp+\alpha_2\mathbf v_2^\perp$ de ellos. Dados dos vectores de aristas $\mathbf v$ y $\mathbf w$ entonces, el problema de encontrar planos ortogonales que los contengan es equivalente a resolver la ecuación $$(\alpha_1\mathbf v_1^\perp+\alpha_2\mathbf v_2^\perp)\cdot(\beta_1\mathbf w_1^\perp+\beta_2\mathbf w_2^\perp)=0$$ para los coeficientes desconocidos $\alpha_1$ , $\alpha_2$ , $\beta_1$ y $\beta_2$ . Para reducir el número de soluciones, muchas de las cuales son redundantes porque son múltiplos escalares de otras soluciones, puedes añadir restricciones adicionales como exigir que los vectores tengan longitud unitaria, pero generalmente seguirá habiendo un número infinito de soluciones incluso con estas restricciones adicionales, por lo que necesitarás algún otro criterio para seleccionar las que sean convenientes para tu aplicación.

Utilizando su primer ejemplo, una base del complemento ortogonal de $(1,0,1)$ es $\{(0,1,0),(-1,0,1)\}$ . La combinación afín $(1-\lambda)(0,1,0)+\lambda(-1,0,1)=(-\lambda,1-\lambda,\lambda)$ es una familia de vectores ortogonales a $(1,0,1)$ , todos los cuales son linealmente independientes entre sí, por lo que representan planos únicos que contienen la arista. Esto no describe todos los planos que contienen la arista, ya que ningún múltiplo de $(0,1,0)-(-1,0,1)=(1,1,-1)$ puede ser representado por esta combinación afín, pero afortunadamente hay muchas soluciones incluso sin este plano. (Nótese también que ésta es la normal del plano generado por el primer método anterior, por lo que ya se sabe cómo encontrar un plano ortogonal a él). Consideraciones similares dan como resultado la familia $(-\mu,1-\mu,\mu-1)$ de vectores ortogonales a $(0,1,1)$ . Resolviendo la ecuación $$(-\lambda,1-\lambda,\lambda)\cdot(-\mu,1-\mu,\mu-1) = (1-\lambda)(1-\mu)+\lambda(\mu-1)+\lambda\mu = 0$$ para $\mu$ da $\mu={2\lambda-1\over3\lambda-1}$ , $\lambda\ne\frac13$ lo que significa que para casi cualquier plano que esté a ras de $(1,0,1)$ hay un plano a ras de $(0,1,1)$ ortogonal a ella.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X