2010-01-11 8 views

Répondre

13

Si vous voulez un roulement constant à vous suivre ne voulez pas le plus court (grand cercle) chemin que vous voulez une loxodromie

Conversion des Movable Type Scripts pour que

static double DegreeBearing(
    double lat1, double lon1, 
    double lat2, double lon2) 
{ 
    var dLon = ToRad(lon2-lon1); 
    var dPhi = Math.Log(
     Math.Tan(ToRad(lat2)/2+Math.PI/4)/Math.Tan(ToRad(lat1)/2+Math.PI/4)); 
    if (Math.Abs(dLon) > Math.PI) 
     dLon = dLon > 0 ? -(2*Math.PI-dLon) : (2*Math.PI+dLon); 
    return ToBearing(Math.Atan2(dLon, dPhi)); 
} 

public static double ToRad(double degrees) 
{ 
    return degrees * (Math.PI/180); 
} 

public static double ToDegrees(double radians) 
{ 
    return radians * 180/Math.PI; 
} 

public static double ToBearing(double radians) 
{ 
    // convert radians to degrees (as bearing: 0...360) 
    return (ToDegrees(radians) +360) % 360; 
} 

// verify against the website example 
DegreeBearing(50.36389,-4.15694,42.35111,-71.04083); 
+0

Enfin, bonne raison d'utiliser System.Math. Oh, bien sûr, beaucoup de gens le font tous les jours, mais ça n'arrive jamais vraiment. Merci. – tsilb

Questions connexes