Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

115
Vistas
Calcular de qué lado de un punto está otro punto

Necesito calcular de qué lado de un punto está otro punto y he estado buscando en Google, pero no tengo ni idea de qué significan todas esas ecuaciones matemáticas o cómo se traducen en código o JavaScript más específicamente.

Tengo la siguiente información:

  • Punto A: x, y y ángulo (dirección hacia la que va el punto, norte en el sentido de las agujas del reloj)
  • Punto B: x e y

Ahora, ¿cómo sé si el punto B está a la izquierda o al lado derecho del punto A? Las respuestas en JavaScript son muy apreciadas.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Considere el signo de expresión (si el angle está en grados, multiplíquelo por Math.PI/180 para obtener radianes)

 cross = (Bx - Ax)*Math.sin(angle)-(By - Ay)*Math.cos(angle)

Editar: para el sistema de coordenadas OX norte, en el sentido de las agujas del reloj es necesario intercambiar cos y sin

 cross = (Bx - Ax)*Math.cos(angle)-(By - Ay)*Math.sin(angle)

Valor positivo para el lado derecho, valor negativo para el lado izquierdo (o viceversa, dependiendo de la orientación de su sistema de coordenadas)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tú tienes:

  • un punto A (Ax, Ay) ;
  • una dirección de movimiento para A dada como un ángulo A.angle ;
  • un punto B (Bx, By) .

Quiere comparar la dirección de movimiento de A con la dirección del vector AB.

Las coordenadas del vector AB se pueden calcular con una simple resta:

 AB.x = Bx - Ax AB.y = By - Ay

Puede calcular el ángulo correspondiente al vector de dirección AB usando atan2 . Convenientemente, esa función es parte de la biblioteca matemática estándar de la mayoría de los lenguajes de programación.

Cuando usamos atan2, debemos tener cuidado con la convención. En los comentarios, especificaste que querías la convención en el sentido de las agujas del reloj. Para otras convenciones, consulte Wikipedia: atan2 y convenciones . También tenemos que convertir de radianes a grados, lo cual se puede hacer fácilmente con el factor de conversión 180 / pi .

 AB.angle = atan2(AB.x, AB.y) * 180 / pi if AB.angle < 0: AB.angle = AB.angle + 360

Entonces todo lo que tenemos que hacer es verificar si AB.angle está en el intervalo [A.angle - 180°, A.angle] (izquierda), o en el intervalo [A.angle, A.angle + 180°] (derecha), teniendo cuidado porque todos los cálculos son módulo 180°.

 // assuming A.angle > 0 && A.angle < 360 if A.angle > 180: if AB.angle > A.angle - 180 && AB.angle < A.angle: return "Left" else: return "Right" else: // A.angle < 180 if AB.angle > A.angle && AB.angle < A.angle + 180: return "Right" else: return "Left"
about 4 years ago · Juan Pablo Isaza Denunciar

0

Vamos a romper esto.

  • Tenemos una línea dirigida L, que pasa por el punto A en la dirección a (para el ángulo).
  • Tenemos un punto B.
  • Y la pregunta es: ¿B está a la izquierda oa la derecha de L?

Lo que necesitamos es el ángulo de la línea (contra el 'norte', también conocido como eje y positivo) que pasa por A y B. Esto nos permite comparar esos ángulos:

  • si la diferencia está en -180°..0° o 180°..360° (-pi..0 o pi..2pi en radianes), B está a la izquierda de L,
  • si la diferencia está en -360°..-180° o 0°..180° (-2pi..-pi o 0..pi en radianes), B está a la derecha de L.

Sería más fácil encontrar la matemática correcta si su ángulo de 0° fuera 'este, en sentido contrario a las agujas del reloj' (como es la convención matemática), pero simplemente intercambiaremos x e y y estaremos listos (ya están cambiado en las siguientes líneas!).

Obtenemos ese ángulo (llamémoslo b) solo de los puntos, pero al principio estará en radianes (no en grados):

 b_rad = Math.atan((Ax - Bx) / (Ay - By));

No especificaste si el ángulo está en grados o en radianes. Suponiendo grados, el resultado debe convertirse de radianes:

 b_deg = b_rad * (180 / Math.PI);

Ahora solo necesitas tomar la diferencia:

 delta = a_deg - b_deg;

y use ese delta en la comparación que describí anteriormente.

(Si no pensé bien, esta matemática da los resultados opuestos de lo que se necesita; en este caso, debe intercambiar a_deg y b_deg en el cálculo delta)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda