Algorithm 根据圆弧所在的象限将圆弧划分为多个部分

Algorithm 根据圆弧所在的象限将圆弧划分为多个部分,algorithm,math,Algorithm,Math,这个问题看起来很简单,但我找不到一个优雅的解决办法 我有一个由定义的弧 startAngle ( -360 <= startAngle <= 360 ), sweepAngle ( -360 <= sweepAngle <= 360 ) and a radius (not important here). 强力法是检查所有4^2可能性(每个startAngle和相应的endAngle(由sweeping计算)可以在4个象限中的任何一个) 但我认为应该有一个更简单的解

这个问题看起来很简单,但我找不到一个优雅的解决办法

我有一个由定义的

startAngle ( -360 <= startAngle <= 360 ), 
sweepAngle ( -360 <= sweepAngle <= 360 ) 
and a radius (not important here).
强力法是检查所有
4^2
可能性(每个
startAngle
和相应的
endAngle
(由
sweeping
计算)可以在4个象限中的任何一个)

但我认为应该有一个更简单的解决方案。我就是找不到

谢谢

编辑: 我刚刚想到的一个算法是:
1.从startAngle开始,我向扫描角迭代,并不断检查是否遇到任何象限边界(mod(θ)=0、90、180、270、360)。
2.相应地更新到圆弧列表


还有更好的吗?

我将从
90 startAngle%90
开始,模运算符将为您提供当前象限中的
startAngle
部分。90减去这个值就是startAngle在这个象限中必须经过的部分。这是你的第一个扫描角度。现在,您可以将“始终”90添加到下一个扫描角度。执行此操作直到计算的当前
扫掠角度
大于输入的
扫掠角度
。那你就知道你在最后一个象限了。在伪代码中,
out
打印一对新角度:

currentPosition=startAngle
currentSweep = 90-startAngle%90
totalAngle=0
while (currentSweep < sweepAngle)
    out (currentPosition, currentSweep)
    currentPosition += currentSweep
    totalAngle += currentSweep
    currentSweep += 90;
out (currentPosition, sweepAngle-totalAngle)
currentPosition=startAngle
currentSweep=90 StartTangle%90
总角度=0
while(当前扫描<扫描角度)
输出(当前位置、当前扫描)
currentPosition+=电流扫描
总角度+=电流扫描
电流扫描+=90;
输出(当前位置、扫掠角度和总角度)

也许你必须更仔细地研究这些情况,例如,当startAngle正好为90时会发生什么,但基本上这应该是一个运行时间合理的算法(还有优雅,imo)。

谢谢,在类似的线路上实现了我的算法。
currentPosition=startAngle
currentSweep = 90-startAngle%90
totalAngle=0
while (currentSweep < sweepAngle)
    out (currentPosition, currentSweep)
    currentPosition += currentSweep
    totalAngle += currentSweep
    currentSweep += 90;
out (currentPosition, sweepAngle-totalAngle)