Autor Tema: Distancia entre dos puntos con ángulo

0 Usuarios y 1 Visitante están viendo este tema.

10 Agosto, 2016, 05:17 pm
Leído 2903 veces

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino
Hola,

Tengo este problema. Tengo un pequeño robot con una posición a,b  y un ángulo de giro alfa. Dado un punto otro punto cualquiera x,y me gustaría calcular la distancia y el ángulo para orientar mi robot hacia dicho punto.
Para la distancia no tengo problema d=sqrt((x-a)^2+(y-b)^2, pero para el tema de la orientación no sé muy bien como tratarlo. Se me ocurrió calcular la diferencia con el ángulo (dibujado en verde en el tercer recuadro) y sumarsela o restarsela al actual, pero supongo que habrá una forma más elegante y por eso quiero preguntar a ver si alguien mucho más sabio que yo me lo puede decir.

Agradezco cualquier sugerencia, corrección o ayuda.

Adjunto dibujo para aclarar mi problema.


10 Agosto, 2016, 05:24 pm
Respuesta #1

sugata

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,831
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Lo más fácil es con cálculo vectorial.
Aquí lo explica muy bien.

http://www.geoan.com/vectores/angulo.html

10 Agosto, 2016, 05:28 pm
Respuesta #2

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino

10 Agosto, 2016, 07:12 pm
Respuesta #3

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
En principio se podría pensar en hacer directamente  \( \alpha=\arctan\left(\dfrac{y-b}{x-a}\right) \)
Pero hay que analizar en qué cuadrante se está para sumar/restar \( \pi \) 

Ya que se calculó la distancia se puede hacer  \( \alpha=2\arctan\left(\dfrac{y-b}{d+(x-a)}\right) \) que no tiene ese inconveniente salvo cuando \( \alpha=\pi \)

O con funciones específicas del lenguaje utilizado (si es que las incluye). Por ejemplo en C se tiene la función atan2(y,x) que devuelve el ángulo entre \( -\pi,\pi \)

11 Agosto, 2016, 06:49 pm
Respuesta #4

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino
Abdulai perdona mi ignorancia pero no entiendo de donde sacas esta solución :  α=2*arctan(y−b/d+(x−a))
No entiendo eso de multiplicarlo por 2 y mucho menos lo de la suma de la distancia. Supongo que con eso obtienes el alfa del vertice x,y en mi supuesto.
Repito, perdona mi ignorancia. Tampoco entiendo porqué tendría que fallar para valores α=π

12 Agosto, 2016, 05:08 am
Respuesta #5

Abdulai

  • Moderador Global
  • Mensajes: 3,044
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino

Aplico la identidad trigonométrica  \( tan\left(\frac{\alpha}{2}\right) = \dfrac{\sin\alpha}{1+\cos\alpha} \)

Siendo \( \sin\alpha = \dfrac{x-a}{d} \)  y  \( \cos\alpha = \dfrac{y-b}{d} \) 

resulta  \( tan\left(\frac{\alpha}{2}\right) = \dfrac{\dfrac{y-b}{d}}{1+\dfrac{x-a}{d}} = \dfrac{y-b}{d+x-a} \;\;\longrightarrow\;\; \alpha = 2\arctan\left(\dfrac{y-b}{d+x-a}\right) \)

A falta de funciones especiales como es en C atan2 , esa variante tiene la ventaja que no hay que analizar en que cuadrante se está.

El "fallo"  es que \( \alpha=\pi \)  corresponde a  \( x-a = -d\;\;\longrightarrow\;\; \) se anula el denominador  \( \;\;\longrightarrow\;\; \)  la rutina debe comparar si  \( |d+x-a| < \epsilon \)  y devolver  \( \pi \)  en caso afirmativo.

Como la operación se hace en punto flotante no puede hacerse la comparación contra 0 (por los errores de truncamiento) sino contra un valor mínimo (\( \epsilon \)).    Su valor puede fijarse en \( 10^{-8} \) ...   \( 10^{-12} \) dependiendo de la precisión usada.

16 Agosto, 2016, 07:11 pm
Respuesta #6

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino
Ok. Muchas gracias. Lo he implementado y funciona a la perfección.

17 Agosto, 2016, 02:08 am
Respuesta #7

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino
Abusando de vuestra infinita paciencia, tengo que consultaros una cuestión más:

Gracias a vuestra ayuda ya tengo el robot orientado hacia la pelota, pero ahora quiero hacer un paso más. Ahora me gustaría que el robot según se va acercando se oriente hacia la portería, así cuando esté enfrente del balón, este ya estará en disposición de chutar. Las coordenadas de la portería y del balón son conocidas. Lo único que no sé es como trazar esa curva. Si alguien me puede indicar como calcular la ecuación que la describe o ayudarme aportando algún dato se lo agradecería un montón, como siempre.

Este problema no tengo claro si es muy complejo o simple, no tengo claro que debo hacer desde el punto de vista teórico y conceptual, aquí ando bastante perdido.

Os adjunto imagen para que quede más claro.

Saludos y gracias.

17 Agosto, 2016, 02:12 am
Respuesta #8

lucer

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • Karma: +0/-0
  • Sexo: Masculino
Abusando de vuestra infinita paciencia, tengo que consultaros una cuestión más:

Gracias a vuestra ayuda ya tengo el robot orientado hacia la pelota, pero ahora quiero hacer un paso más. Ahora me gustaría que el robot según se va acercando se oriente hacia la portería, así cuando esté enfrente del balón, este ya estará en disposición de chutar. Las coordenadas de la portería y del balón son conocidas. Lo único que no sé es como trazar esa curva. Si alguien me puede indicar como calcular la ecuación que la describe o ayudarme aportando algún dato se lo agradecería un montón, como siempre.

Este problema no tengo claro si es muy complejo o simple, no tengo claro que debo hacer desde el punto de vista teórico y conceptual, aquí ando bastante perdido.

Os adjunto imagen para que quede más claro.

Saludos y gracias.