Estoy tratando de averiguar el ángulo (en grados) entre dos vectores 2D. Sé que necesito usar trigonometría, pero no soy muy bueno con eso. Esto es lo que estoy tratando de resolver (el eje Y aumenta hacia abajo): alt text http://i38.tinypic.com/2dcefch.png¿Cómo calcular el ángulo de un vector desde la vertical?
Estoy tratando de utilizar este código en el momento, pero que no funciona en absoluto (calcula ángulos aleatorios por alguna razón) :
private float calcAngle(float x, float y, float x1, float y1)
{
float _angle = (float)Math.toDegrees(Math.atan2(Math.abs(x1-x), Math.abs(y1-y)));
Log.d("Angle","Angle: "+_angle+" x: "+x+" y: "+y+" x1: "+x1+" y1: "+y1);
return _angle;
}
Estos son mis resultados (Hay constante al proporcionar una posición constante, pero cuando cambio la posición, el ángulo cambia y no puedo encontrar ningún vínculo entre los dos ángulos):
posición 1: x: 100 y: 100 x1: 50 y1: 50 Ángulo: 45
Posición 2: x: 92 y: 85 x1: 24 y1: 16 Ángulo: 44,58
Posición 3: x: 44 y: 16 X1: 106 y1: 132 Ángulo: 28.12
Editar: ¡Gracias a todos los que me respondieron y me ayudaron a descubrir que estaba mal! Lo siento, el título y la pregunta fueron confusos.
Dudo que sea al azar. ¿Podría publicar los valores de x1, x, y1, y? ¿La salida cambia incluso cuando la entrada es constante? – FrustratedWithFormsDesigner
Su diagrama es incorrecto. Solo has definido 2 puntos, y no hay representación para el vector que crea el ángulo Theta. Usar, p1 y p2 como en este diagrama encontrará un ángulo muy diferente; el ángulo p1 y p2 hacen con el origen. – aepryus
Usted dice que está tratando de calcular el ángulo entre dos vectores, pero el diagrama parece implicar que en realidad está tratando de obtener el ángulo entre un vector y el eje y. ¿Es eso correcto? – Troubadour