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)