1 votos

Determinar la dirección de un arco (CW/CCW)

Estoy tratando de escribir una función que determine si un arco circular viaja en el sentido de las agujas del reloj o en sentido contrario.

Dadas las coordenadas X,Y para el punto inicial, el punto central y el punto final, primero calculo el ángulo en radianes desde el punto central hasta los puntos inicial y final.

Pensé que si restaba el ángulo de la línea final del ángulo de la línea inicial podría determinar si la dirección del arco es así:

if (angle1 - angle2 <= 0): # Clockwise
else: # Counter-Clockwise

Esto funciona para los casos en los que el arco no cruza la línea de los radios cero. Pero si el arco cruza esa línea la lógica no funciona.

Esta ilustración muestra que el arco S1-C-E1 funciona pero S2-C-E2 no. Estoy bastante seguro de que tengo la idea correcta, sólo estoy atascado en la parte lógica.

Encontré otra pregunta aquí que parecía ser similar a lo que estoy tratando de hacer, pero su respuesta implicaba una matriz que, me entristece admitir, nunca he aprendido a trabajar con ella. Necesito una respuesta que pueda traducir fácilmente en código o introducir en una hoja de cálculo.

Gracias por toda la ayuda.

3voto

Aretino Puntos 5384

Si su pregunta es sobre el arco menor determinado por los tres puntos $A$ (punto de partida), $O$ (punto central) y $B$ (punto final) entonces se puede calcular $$ c=(A_x-O_x)(B_y-O_y)-(A_y-O_y)(B_x-O_x). $$

Si $c>0$ el arco es contrario a las agujas del reloj, si $c<0$ es en el sentido de las agujas del reloj, si $c=0$ entonces $A$ , $O$ y $B$ están alineados.

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