Из-за того, что эти координаты очень близки в моем случае, Я сделал приближение, что центр земли и эти две точки образуют треугольник. Таким образом, я могу использовать Al Kashi theorem.
Вот код:
// Common values
double b = EARTH_RADIUS + destination.altitude;
double c = EARTH_RADIUS + this.altitude;
double b2 = b*b;
double c2 = c*c;
double bc2 = 2*b*c;
// Longitudinal calculations
double alpha = destination.longitude - this.longitude;
// Conversion to radian
alpha = alpha * Math.PI/180;
// Small-angle approximation
double cos = 1 - alpha*alpha/2; //Math.cos(alpha);
// Use the law of cosines/Al Kashi theorem
double x = Math.sqrt(b2 + c2 - bc2*cos);
// Repeat for latitudinal calculations
alpha = destination.latitude - this.latitude;
alpha = alpha * Math.PI/180;
double cos = 1 - alpha*alpha/2; //Math.cos(alpha);
double y = Math.sqrt(b2 + c2 - bc2*cos);
// Obtain vertical difference, too
double z = destination.altitude - this.altitude;
return new Vector3D(x, y, z);
Как вы можете видеть, я приближена косинус, потому что углы действительно мало. Я думаю, что добавление высоты к радиусу Земли не дает лучшее приближение, , но так как у меня это ...
Я проверил это по сравнению с Google Maps на расстоянии 38 метров, и я получил результат 37.877. Мой результат может быть более точным! ^^
Вы действительно прочитали то, что вы связали? Это совсем другое. –
Да, извините, я сначала не понял, но теперь я ... Кроме того, я нашел решение. –