如何测试 2D“环形部分”或“环形部分”的相交(重叠)?

问题描述 投票:0回答:1

“环形部件”是从环形上切出的部分。

每个“环部分”由一个中心点表示,然后是相对于该中心点的一些边界。

首先,内部和外部距离边界定义一个 2D 环,然后一对角度边界定义围绕该环的起点和终点。 (我以起始角和扫描角的形式指定角度边界,但具体采用什么形式并不那么重要。)

如何测试两个这样的“环形部分”之间的几何相交,同时保持测试代码尽可能简单和健壮?

我尝试了一种方法,首先检测环之间相交的各种情况(即最初忽略角度边界),然后检查相交部分是否落在角度边界内。我认为可能可以减少环相交部分所需的信息以达到角度范围,但我认为这并不适用于所有情况。

我还考虑了沿着另一个环的径向边界线切割(或剪裁)一个环部分的第一步。我认为这可能是一种合理的方法,但是剪切本身具有弯曲边缘的形状开始变得有点复杂。

geometry 2d intersection ring
1个回答
0
投票

要测试两个环形扇区的交集,您需要检查 1) 它们的半径间隔是否相交以及 2) 它们的角度间隔是否相交

令环扇区由内半径和外半径

ri, ro
、起始角
astart
和扫描角
sw
定义:

沿半径的交点:

 not (ri1>ro2 or ri2>ro1)
   equivalent:
 (ri1<=ro2 and ri2<=ro1) 

角度间隔相交更复杂,因为我们应该考虑周期性。让我们找到中间角

ma
和半扫描的余弦
cd
(余弦的使用解决了周期性、不同弧方向等问题)

ma = astart + sw/2
cd = Cos(sw/2)

那么角间隔相交如果

Cos(ma1 - astart2) >= cd1  or 
Cos(ma1 - astart2 - sw2) >= cd1  or 
Cos(ma2 - astart1) >= cd2  or 
Cos(ma2 - astart1 - sw1) >= cd2
© www.soinside.com 2019 - 2024. All rights reserved.