我有一個圓,實際上是一個以米爲單位測量半徑的latlon位置。而且我還有一條道路A-B被定義爲兩個經緯位置。我如何找到這條路是否跨越了圈內。沒有投影拉伸位置到xy位置可能嗎?如果可能的話,請告訴我如何去做。實際上我試圖在導航軟件中實現捕捉到道路功能。所以這不是一項家庭作業,而且直截了當的可用程序非常值得讚賞,因爲我在數學上非常糟糕。圓和線段交點檢測(LatLon點,儀表半徑和LatLon線)
謝謝。
我有一個圓,實際上是一個以米爲單位測量半徑的latlon位置。而且我還有一條道路A-B被定義爲兩個經緯位置。我如何找到這條路是否跨越了圈內。沒有投影拉伸位置到xy位置可能嗎?如果可能的話,請告訴我如何去做。實際上我試圖在導航軟件中實現捕捉到道路功能。所以這不是一項家庭作業,而且直截了當的可用程序非常值得讚賞,因爲我在數學上非常糟糕。圓和線段交點檢測(LatLon點,儀表半徑和LatLon線)
謝謝。
我不知道緯度長的表示法。
但是 - 通常這個問題並不需要很高的數學。
首先建立A到B之間的線的方程(稱爲線L1)。
然後找到穿過圓心的L1垂直線的方程(稱之爲L2)。
然後找到兩個方程的交點,並檢查交點是否在圓內,是否在[A-B]中。
Itay的,解決方案是優雅的,不需要太多墊子。
但是你可以去一個比較幼稚(CPU重)實現:
讓你的行成點的陣列,然後測量到你的圈子的中心從每個點的距離:
方法變換兩點成座標的陣列(I只測試此方法簡述)
public static Point[] generatePath(int startX, int startY, int endX, int endY) {
_deltaX = Math.Abs(endX - startX);
_deltaY = Math.Abs(endY - startY);
if (_deltaX >=_deltaY) {
//x is independent variable
_numpixels = _deltaX + 1;
_d = (2 * _deltaY) - _deltaY;
_dinc1 = _deltaY << 1;
_dinc2 = (_deltaY - _deltaX) << 1;
_xinc1 = 1;
_xinc2 = 1;
_yinc1 = 0;
_yinc2 = 1;
} else {
//y is independent variable
_numpixels = _deltaY + 1;
_d = (2 * _deltaX) - _deltaY;
_dinc1 = _deltaX << 1;
_dinc2 = (_deltaX - _deltaY) << 1;
_xinc1 = 0;
_xinc2 = 1;
_yinc1 = 1;
_yinc2 = 1;
}
// Make sure x and y move in the right directions
if (startX > endX) {
_xinc1 = -_xinc1;
_xinc2 = -_xinc2;
}
if (startY > endY) {
_yinc1 = -_yinc1;
_yinc2 = -_yinc2;
}
_x = startX;
_y = startY;
Point[] returnPath = new Point[_numpixels];
for (int i = 0;i < _numpixels;i++) {
returnPath[i].X =_x;
returnPath[i].Y =_y;
if (_d < 0) {
_d = _d + _dinc1;
_x = _x + _xinc1;
_y = _y + _yinc1;
} else {
_d = _d + _dinc2;
_x = _x + _xinc2;
_y = _y + _yinc2;
}
}
return returnPath;
}
方法來計算,以在線的每一點從圓的中心距:
public static double GetLenghtBetweenPoints(Point Source, Point Distination) {
return Math.Sqrt((Math.Pow((Source.X-Distination.X), 2) + Math.Pow((Source.Y-Distination.Y), 2)));
}
這真的不會爲我工作。我在.NET CF上使用較少的CPU功率器件。不過謝謝。 – VOX 2010-07-14 16:12:31
@意大利,我的數學是傾銷。我甚至不知道如何建立一條線的方程。更多提示請求? – VOX 2010-07-14 11:42:00
@VOX:你有試過Google嗎? – 2010-07-14 11:54:19
是的。到目前爲止,唷... – VOX 2010-07-14 12:07:25