3 votos

Encontrar el punto medio en un arco

Para un arco en el espacio 3D con las siguientes variables conocidas:

  • $A$: punto de inicio
  • $B$: punto final
  • $C$: punto central
  • $r$: radio
  • vector normal a la superficie del arco

¿Cómo podemos calcular las coordenadas del punto $D$ que se encuentra en el medio del arco utilizando el ángulo barrido $\frac2$? ¿Cómo se calcularía este ángulo correctamente?

He intentado lo siguiente:

  • Calcular el vector de dirección $X$ como $X = C - A$.
  • Calcular el vector de dirección Y como Y = normal x X.
  • Obtener los vectores desde el centro hasta el inicio y el fin, $CA$ y $CB$ respectivamente.
  • Calcular el ángulo barrido como $\theta = \arccos\left(\frac{CA\cdot{CB}}{{\lvert CA\rvert}{\lvert CB\rvert}}\right)$.
  • $D = C + X_{dir}\cdot{r}\cdot{\cos{\frac{\theta}{2}}}+ Y_{dir}\cdot{r}\cdot{\sin{\frac{\theta}{2}}}$

De esta manera, a veces obtengo un punto diametralmente opuesto. El problema parece ser que el signo del ángulo $\theta$ que estoy calculando no respeta la dirección del eje normal.

enter image description here

2voto

kotoole Puntos 138

Primero, te aconsejaría no tomar el arco coseno de ese producto punto. Es numéricamente inestable, y podría incluso arrojar un error si los vectores CA y CB son paralelos o antiparalelos y el error de punto flotante cae en la dirección incorrecta.

El producto cruz es una fuente más estable del ángulo. Simplemente calcular CA x CB dará un vector que está a lo largo del vector normal, cuya longitud es tan(θ)(CA · CB)

Entonces, primero podemos usar el vector normal para obtener el ángulo θ:

// posiblemente confirmar que el normal es paralelo a CA x CB
θ = atan2(normal · (CA ⅹ CB), (CA · CB))

Ahora necesitamos resolver la ambigüedad de la pregunta. Hay dos posibles arcos que has especificado: la forma corta y la forma larga.

Si se garantiza que deseas el camino corto, ya hemos terminado. atan2 dará un ángulo en el rango (-180º, 180º], por lo que dividirlo por 2 te dará un ángulo en sentido horario o antihorario en el rango (-90º, 90º] con el camino más corto (la corbata va al ángulo positivo)

Si en cambio se garantiza que el vector normal proporcionado está consistentemente orientado con el arco (para que el extremo B esté en sentido horario desde A mirando hacia abajo el normal, o viceversa), entonces puedes manipular atan2 para que esté en el rango positivo (0º, 360º] con la sustitución atan2(-y, -x) + 180º

θ = atan2(-normal · (CA ⅹ CB), -(CA · CB)) + 180
// posiblemente girar θ dependiendo de la convención

Si no se garantiza ninguno, creo que el problema está mal especificado.

De cualquier manera, ahora tienes un ángulo firmado estable θ de A a B, y puedes obtener el punto medio del arco rotando alrededor del vector normal por θ/2 (usando tu cálculo anterior, o usando la fórmula de rotación de Rodriguez).

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