2016-09-12 2 views
0

Мне нужно рассчитать угол между тремя геолокациями, где два из них всегда одни и те же, и только один из них изменяется (например, когда пользователь идет).Угол между тремя геолокациями

enter image description here

Первая точка является начальной позиции пользователя. Вторая точка - текущая позиция пользователя, поэтому в начале первая точка равна второй точке. Первая точка и фиксированная точка всегда одинаковы. У меня есть широта и долгота для каждой точки.

Я пытался использовать эту формулу:

double angle1 = Math.atan2(startingLocation.getLongitude() - destinationLocation.getLongitude(), startingLocation.getLatitude() - destinationLocation.getLatitude()); 
double angle2 = Math.atan2(currentLocation.getLongitude() - destinationLocation.getLongitude(), currentLocation.getLatitude() - destinationLocation.getLatitude()); 

return Math.toDegrees(angle1 - angle2); 

Но, например, когда первая точка == вторая точка я, кроме степени быть 0. Но это дает мне странные результаты, как 176 градусов. В чем проблема?

+0

@ Sabish.M Я только заимствовал фотографию из этой темы. – TomTom

ответ

0

Угол между двумя линиями можно рассчитать по следующей функции

public static double angleBetween2Lines(Line2D line1, Line2D line2) 
{ 
    double angle1 = Math.atan2(line1.getY1() - line1.getY2(), 
          line1.getX1() - line1.getX2()); 
    double angle2 = Math.atan2(line2.getY1() - line2.getY2(), 
          line2.getX1() - line2.getX2()); 
    return angle1-angle2; 
} 

Источник: Calculating the angle between two lines without having to calculate the slope? (Java)

если ваша отправная точка (x1,y1), конечная точка (x2,y2) и неподвижная точка (x3,y3), то вы должны использовать

double angle1 = Math.atan2(y3-y1,x3-x1); 
double angle2 = Math.atan2(y3-y2,x3-x2); 
double result = angle1-angle2; 
+0

Ваше второе решение верно. Спасибо! – TomTom

+0

@TomTom: добро пожаловать :) –

0

Используйте этот

double theta = 180.0/Math.PI * Math.atan2(x1 - x2, y1 - y2); 
+0

Как насчет этой третьей геолокации? – TomTom

Смежные вопросы