假设我有几个带有4个坐标对的边界框(仅限长/纬),每个边框代表一个方框的4个角。如何检查其中2个框是否相交?
我知道我可以使用Open your console.
来检查2个矩形是否相交,但问题是它是使用X / Y /宽度/高度而不是坐标来计算的。
有人可以给我一些关于如何进行此计算的指示吗?
感谢。
我想要完成的是由this库代表的。
基本上它会计算给定点周围的方形边界框,并检查(虚)方格是否相互交叉,如下图所示:
到目前为止,我已经能够计算每个标记的角落,现在我需要以某种方式检查它们是否相互交叉。我该怎么做这个交叉计算?
这是我计算角落的方式:
java.awt.Rectangle
其中RADIUS = 6378.1且角度= 45/135/225/315(右上角,右下角,左下角和左上角)。
答案 0 :(得分:1)
我假设在你的“纬度/长边框”中,每一边都遵循经度和纬度不变的线 - 换句话说,顶边跟随恒定纬度线,左边是恒定线经度。
虽然这实际上并不是现实生活中的矩形,但实际上它可以被视为一个用于我们目的的矩形。在数学上你可以把它想象为将边界框转换为“纬度/长度”空间,其中形状实际上是一个矩形。如果这没有意义,你可能不得不接受我的话。无论如何它可以表明,当且仅当矩形在弯曲空间中相交时,真实空间中的弯曲形状才会相交。
这个的简短版本是:如果你对矩形交叉进行标准测试(使用Java Rectangle类代码,并使用纬度和经度作为矩形边界)你将得到正确的结果。
示例强>
您有两个区域,定义为:
您可以通过执行以下操作正确测试其交叉点:
Rectangle r1 = new Rectangle(75,50,2,2);
Rectangle r2 = new Rectangle(76,51,2,3);
boolean intersects = r1.insersects(r2);
欧几里德空间中的矩形不是矩形无关紧要。
P.S。如果你的一个矩形实际上包含北极或南极,这将不起作用。在这种情况下,您需要将每个矩形分成两个,一个在杆的两侧。您需要将所有内容标准化为+/- 90纬度和+/- 180经度。如果一个或多个矩形与+/- 180经度线重叠,则需要做一些聪明的事情。