我正在尝试解决简单的任务,但我没有找到任何优雅的解决方案。
我基本上解决了两个圆形扇区的交集。每个扇区由 (-pi, pi] 范围内的 2 个角度 (来自 atan2 func) 给出。每个选择器占据的最大角度为 179.999。因此每两个角度就可以知道圆形扇区在哪里。
返回值应基于以下描述相互交集:
value <1 if one angle is contained by second one (value represents how much space occupy percentually)
value >1 if first angle (the dotted one) is outside the other one, value represents how much of dotted angle is out of the other one
基本案例和一些例子在下面的图片中
问题是有太多的案例需要处理,我正在寻找一些优雅的方法来解决它。
只有当它们位于单位圆的右侧(cos> 0)时,我才能比较两个角度,因为在左侧,数值较大的角度在图形上较低。我尝试在右半部分使用一些投影:
if(x not in <-pi/2, pi/2>)
{
c = getSign(x)*pi/2;
x = c - (x - c);
}
但是占据单位圆两半部分的扇区存在问题......
有很多案例......有人知道如何优雅地解决这个问题吗?(我使用 c++,但任何提示或伪代码都可以)