2010-01-11 11 views

Trả lời

13

Nếu bạn muốn có một ảnh hưởng liên tục để theo bạn không muốn (vòng tròn lớn) con đường ngắn nhất bạn muốn có một dòng rhumb

Chuyển đổi Type Scripts Movable cho rằng

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

Cuối cùng, một lý do tốt để sử dụng System.Math. Ồ, chắc chắn, nhiều người làm mỗi ngày, nhưng nó thực sự không bao giờ xuất hiện. Cảm ơn. – tsilb