2011-05-20 132 views
4

我已經得到了有關實體的信息:計算未來位置

緯度/經度位置 標題(弧度) 速度(節)

如何計算,其中實體LAT /假設實體在一個恆定的高度以恆定速度移動,那麼多頭頭寸將處於任意時間點(或者以間隔計算其位置)?

(正如你所知道的,我的數學能力較弱)

+0

這題外話(應該是http://math.stackexchange.com或類似的)。 – 2011-05-20 15:54:43

+1

@Oli,這裏很好。數學SE是真正的高等數學比這個。 – 2011-05-20 16:05:58

+0

@Mike:也許你對Math SE是對的。但是這個問題完全不依賴於編程,所以我不同意這是關於主題的。 – 2011-05-20 16:14:48

回答

2

首先,你可以在一條直線上,並在同一時間在一個恆定的高度不動。您的緯度/經度座標位於參考橢球(最可能是WGS84)上方。 他們是各種圖書館或數據庫擴展,有一大堆功能來完成這類問題。 Postgis就是其中之一。他們中的大多數都是免費的,經過測試並且能夠工作我不建議自己嘗試實現這一點(假設地球是一個半徑爲r的完美球體),因爲您必須考慮到所使用的參考橢球體。

1

考慮到Hyperboreus提供的答案,這裏有航空公式:http://williams.best.vwh.net/avform.htm,它具有計算給定起點的新緯度/經度的公式,以及角度和距離。你將不得不自己計算距離。這聽起來像你有一切你需要計算的距離,雖然速度只是距離/時間,如果你乘以時間偏移你想使用,你有你的距離。

1 knot = 1 NM/hr distance = yourTimeInDecimalHours * speed;

代碼示例來說明此(從上面提到的鏈接複製):

double lat1 = 0, lon1 = 0;      // NOTE: these are in radians - remember PI/2 radians = 90 degrees 
double d = timeInDecimalHours * speedInKnots; // so a half hour at 35 knots would be .5 * 35 
double tc = usersTrueCourse;     // aka user's heading 
double lat=          // this will be in radians!! 
    Math.asin(
     Math.sin(lat1) 
     * Math.cos(d) 
     + Math.cos(lat1) 
     * Math.sin(d) 
     * Math.cos(tc) 
    ); 
double lon = 0; 
if (Math.cos(lat) == 0) { 
    lon = lon1  // endpoint a pole 
} else { 
    lon = (lon1 - Math.asin(Math.sin(tc)*Math.sin(d)/Math.cos(lat)) + Math.PI % (2*Math.PI))-Math.PI; 
} 
+0

另外,根據Hyperboreus的評論,我認爲航空公式考慮到你不能以真正的直線移動並且仍然保持恆定的高度(相對於地球)。關於航空公式的一個很酷的事情是,他們考慮到了這一點,並且計算都是「大圓圈」數學。 – Travis 2011-05-26 12:51:49