2 votos

Distancia más corta entre una superficie paramétrica 3D y un punto

Ahora mismo estoy trabajando en una librería para encontrar las distancias entre objetos en Lua. He tenido algunos problemas para encontrar la distancia entre un punto y un plano delimitado. Estoy usando estas ecuaciones paramétricas:

$$ \mbox{plane}(s_0,t) = (x_0, y_0, z_0) + s \le(x_1, y_1, z_1) + t(x_2, y_2, z_2), \quad 0 \le (s_0, t) \le 1 $$

y

$$ \mbox{point}(s_1) = (x_3, y_3, z_3) + s(x_4, y_4, z_4), \quad 0 \le s_1 \le 1 $$

Sé que la proyección de un segmento de recta desde cualquier punto del plano hasta el punto del que quiero hallar la distancia sobre la normal del plano me dará la distancia desde un punto a un plano no acotado.

Para intentar resolver mi problema, dije que el punto del plano más cercano a mi punto es mi punto más la inversa de la proyección sobre la normal. Entonces resolvería los valores de s y t para ver si son mayores que uno. Si es así, entonces trataría de encontrar la distancia de los 4 puntos en el plano, y utilizaría la línea entre los dos puntos más cercanos a mi punto para encontrar la distancia entre mi punto y el plano delimitado. Esto es muy ineficiente.

Así que mi pregunta, ¿hay una forma más directa de resolver la distancia entre un punto y una superficie/plano acotado?

2voto

bubba Puntos 16773

Lo mejor es que escribas la ecuación plana de la forma $(\mathbf x - \mathbf p)\cdot \mathbf n = 0$ donde $\mathbf p$ es un punto del plano y $\mathbf n$ es una normal unitaria. Puedes obtener fácilmente esta forma a partir de la que utilizas actualmente. Utilice su punto $(x_0,y_0,z_0)$ como $\mathbf p$ y utiliza un producto cruzado unificado de tus vectores $(x_1,y_1,z_1)$ y $(x_2,y_2,z_2)$ como unidad normal $\mathbf n$ .

Entonces supongamos que tienes algún punto $\mathbf q$ y quieres encontrar su distancia al plano. La distancia (con signo) es $(\mathbf q - \mathbf p) \cdot \mathbf n$ . Si no te importa el signo, toma el valor absoluto.

La expresión que escribiste para tu "punto" en realidad representa una línea, no un punto.

Puede encontrar el código C en esta página

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