Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找由纬度和经度表示的两条线段之间是否发生交点_Java_Android_Math_Line_Intersection - Fatal编程技术网

Java 如何查找由纬度和经度表示的两条线段之间是否发生交点

Java 如何查找由纬度和经度表示的两条线段之间是否发生交点,java,android,math,line,intersection,Java,Android,Math,Line,Intersection,在我正在开发的一个应用程序中,我有许多由纬度和经度值表示的线。 我想检查另一条线是否在任何点与这些线相交 假设我有线A-B,我想知道它是否在任何点与线C-D相交。 上面的第一个和第二个示例将导致没有交叉点,而第三个示例将导致交叉点 在我的场景中,应用程序不需要实际的交点才能正常工作,因此只需要对交点进行简单的“是/否”即可 我知道使用纬度和经度值并不是严格精确的,因为世界是一个椭球体,所以需要首先转换这些值。然而,为了证明我正在研究的概念,我正在寻找一种适用于线段任何方向的直线相交算法 我见过

在我正在开发的一个应用程序中,我有许多由纬度和经度值表示的线。 我想检查另一条线是否在任何点与这些线相交

假设我有线A-B,我想知道它是否在任何点与线C-D相交。 上面的第一个和第二个示例将导致没有交叉点,而第三个示例将导致交叉点

在我的场景中,应用程序不需要实际的交点才能正常工作,因此只需要对交点进行简单的“是/否”即可

我知道使用纬度和经度值并不是严格精确的,因为世界是一个椭球体,所以需要首先转换这些值。然而,为了证明我正在研究的概念,我正在寻找一种适用于线段任何方向的直线相交算法

我见过几种算法,但在实践中都没有成功

目前我一直在研究这里提到的方法

我正在使用下面的代码,只是使用简单的坐标来证明它是有效的,但是从我的测试中,它返回交点,即使它们不存在

double lineABxLength = bX - aX;
double lineCDxLength = dX - cX;
double lineAByLength = bY - aY;
double lineCDyLength = dY - cY;

double lineDenomiter = (lineABxLength * lineCDyLength) - (lineAByLength * lineCDxLength);

double a = (aX * aY) - (bY * aX);
double b = (dX * cY) - (dY * cX);

double xIntersection = ((a * lineCDxLength) - (b * lineABxLength)) / lineDenomiter;
double bIntersection = ((a * lineCDyLength) - (b * lineAByLength)) / lineDenomiter;

可能的副本请记住在发布前进行尽职调查。互联网搜索,即使仅限于如此,其回报与卡路里支出的比率也非常高。谢谢你,这绝对是使用图书馆而不是手动计算的一个选择。接下来是下一个问题,我将如何解释lat和long值所代表的elipsoide形状。这是值得遵循的面包屑线索参考其他问题。