【发布时间】:2015-11-13 09:34:56
【问题描述】:
每个扇区可以表示为(x,y,r,a,d),其中x,y是位置,r是半径,d是方向,a是角度。给定两个圆形扇区的这些信息,如何判断它们是否相互重叠? 有没有有效的算法来解决它?谢谢!
【问题讨论】:
-
你不需要两个角来完全指定一个圆段吗?开始和结束角度?
-
起始角为(d-a/2),结束角为(d+a/2)
-
啊,这样更好。所以
d是一个角度(线段的“中心”),a是线段的“展开”。从描述来看,d似乎是一个简单的顺时针/逆时针说明符。 -
如果没有人想出其他任何东西,最坏的情况是:只有一个完全在另一个内部,或者它们的边缘相交时,它们才会相交。因此,您可以计算一堆“扇区中某个点的成员资格”和“直线段和/或圆弧段之间的交点”。所有这些都很乏味。
-
如果我们可以确定引导给定点的函数应该移动到哪里才能进入扇区,我们可以使用二进制搜索来确定两个扇区中是否存在公共点。我已经尝试了一段时间,但没有运气。也许三点行列式可能是一个好方法