我正在寻找一种简单的算法来检测aabb的区域是否与弧线(用绳索关闭)或饼(通过圆圈的中心关闭)的区域重叠。
我已经找到了这个答案:Intersection of rectangle and circle (or arc)
但这并不完全是我想要的,因为我对形状轮廓的交点不感兴趣,只是想知道这些区域是否重叠。
例如,一个非常小的AABB只包含饼的中心,但AABB的边缘不相交,馅饼的圆圈将不会覆盖在链接的答案中。同样,电弧完全包含AABB和AABB的两侧甚至不相交的情况下,脐带也不会被覆盖。
现在,在我开始重新发明轮子之前,我想问一下,是否有一个已知的算法来进行这种重叠检查。
AABB的一个例子-部门:

发布于 2015-09-24 14:41:12
考虑到配置的多样性,这不是一个简单的问题。
您将使问题更简单,通过分裂扇区与一个交叉通过中心,这样一条水平或垂直线将不会遇到两次弧线,并分别处理。
然后,考虑其中的一部分,“充气”,而你“放气”的矩形。更准确地说,扇区的每个点都变成了源自它的矩形(左上角),而矩形则缩小到它的右下角。
你得到的形状(绿色区域)是所谓的Minkowski和(也就是膨胀)。
正如你所看到的,它有5条直边和一条弯曲边。您可以很容易地预测所有扇区方向的形状。

现在有一个交点,如果矩形收缩到一个点,在这个曲线六边形内。使用极坐标(r < R和Θ' < Θ < Θ")检查点是否属于扇区,并通过标准的多边形点对点测试检查(直)六边形的不平顺性。
类似的推理也适用于圆形段(chord)。

这种几何变换允许使用“轨迹”方法,即将解集可视化为几何形状,以支持推理。考虑到区域的性质(一个凸六边形),我们可以得出结论:在最坏的情况下,4项比较(涉及线性或二次项)就足以通过二分法得到答案!
发布于 2015-09-23 16:31:39
部门和部门的情况不同。
关于某一部分:
对于扇区,可以将其视为一个段加一个三角形,或者:
https://stackoverflow.com/questions/32744344
复制相似问题