Question

Est-il même que inexactes?Je re-mis le tout avec Apfloat précision arbitraire et il ne fait aucune différence que j'aurais connu pour commencer!

public static double bearing(LatLng latLng1, LatLng latLng2) {
 double deltaLong = toRadians(latLng2.longitude - latLng1.longitude);

 double lat1 = toRadians(latLng1.latitude);
 double lat2 = toRadians(latLng2.latitude);

 double y = sin(deltaLong) * cos(lat2);
 double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLong);
 double result = toDegrees(atan2(y, x));
 return (result + 360.0) % 360.0;
}

@Test
 public void testBearing() {

  LatLng first = new LatLng(36.0, 174.0);
  LatLng second = new LatLng(36.0, 175.0);
  assertEquals(270.0, LatLng.bearing(second, first), 0.005);
  assertEquals(90.0, LatLng.bearing(first, second), 0.005);
 }

La première affirmation dans le test donne ça:

java.lang.AssertionError:prévu:<270.0> mais a:<270.29389750911355>

0.29 semble tout à fait un long chemin?Est-ce la formule que j'ai choisi de le mettre en œuvre?

Était-ce utile?

La solution

Si vous avez fait ce que vous semblez avoir fait et fait correctement, vous avez compris la portée de A de B le long de la route la plus courte de A à B qui, à la surface de la sphère (ish) Terre est la arc du grand cercle entre A et B, pas de l'arc de la ligne de latitude entre A et B.

Fonctions géodésie Mathematica donnent les paliers, pour vos positions de test, comme 89.7061 et 270.294.

Ainsi, il semble que si (a) votre calcul est correct, mais (b) vos compétences de navigation doivent fourbir.

Autres conseils

Êtes-vous sûr cela est dû à des problèmes numériques? Je dois admettre que je ne sais pas exactement ce que vous essayez de calculer, mais quand vous traiter avec des angles sur une sphère, les petits écarts par rapport à ce que vous attendez en géométrie euclidienne.

java.lang.AssertionError:prévu:<270.0> mais a été:<270.29389750911355>

Cette 0.29 erreur absolue représente l'erreur relative de 0,1%.Comment est-ce "un long chemin"?

Flotteurs donnera à 7 chiffres significatifs;les chambres doubles sont bonnes pour 16.Pourraient être les fonctions trigonométriques ou les degrés en radians de conversion.

La formule semble bien, si cette source est pour être cru.

Si je branche le début et la finale valeurs dans cette page, le rapport est 089°42'22".Si je soustrais votre résultat de 360 et de les convertir en degrés, minutes, et secondes, votre résultat est identique à la leur.Soit vous êtes tous les deux corrects ou vous êtes tous les deux tort.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top