2010-01-11 15 views

Respuesta

13

Si quieres un rumbo constante a seguir no desea que el camino más corto (gran círculo) que desea una línea de rumbo

La conversión de las secuencias de comandos de Movable Type para 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

Por último, una buena razón para usar System.Math. Oh, seguro, mucha gente lo hace todos los días, pero en realidad nunca aparece. Gracias. – tsilb

Cuestiones relacionadas