【发布时间】:2015-10-15 18:56:43
【问题描述】:
假设我有几个具有 4 个坐标对(仅限长/纬度)的边界框,每个坐标对代表一个方形框的 4 个角。如何检查其中两个框是否相交?
我知道我可以使用 java.awt.Rectangle 检查 2 个矩形是否相交,但问题是它是使用 X/Y/Width/Height 而不是坐标计算的。
有人可以给我一些关于如何进行此计算的指导吗?
谢谢。
编辑
我想要完成的与this library 所代表的相同。
基本上,它会计算给定点周围的正方形边界框,并检查(假想的)正方形是否相互交叉,如下图所示:
(来源:google.com)
到目前为止,我已经能够计算出每个标记的角,现在我需要以某种方式检查它们是否相互交叉。我该如何做这个交集计算?
编辑 2
这就是我计算角的方式:
private static double getLatitude(double distance, double lat, double angle) {
return toDegrees(asin(sin(toRadians(lat)) * cos(distance / RADIUS) + cos(toRadians(lat)) * sin(distance / RADIUS) * cos(toRadians(angle))));
}
private static double getLongitude(double distance, double lat, double lng, double angle) {
double newLat = getLatitude(distance, lat, angle);
return toDegrees(toRadians(lng) + atan2(sin(toRadians(angle)) * sin(distance / RADIUS) * cos(toRadians(lat)), cos(distance / RADIUS) - sin(toRadians(lat)) * sin(toRadians(newLat))));
}
其中 RADIUS = 6378.1,角度 = 45/135/225/315(右上角、右下角、左下角和左上角)。
【问题讨论】:
-
你的代码在哪里?
-
到目前为止,我只编写了边界框生成,它给了我四个角坐标。我不知道如何从这里继续,所以我没有编码交叉部分。
-
到目前为止太宽泛了。
-
我添加了另一个解释,看看它是否能更好地解释我的需要。
-
请记住,如何定义“相交”会有所不同。球体的表面上没有直线,因此如果您将矩形的线定义为在纬度/经度空间中是“直的”,它们在现实生活中实际上是弯曲的。所以盒子是否相交取决于你如何解释这些曲线。
标签: java