gpt4 book ai didi

algorithm - 根据该部分所在的象限将弧分成多个部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:28:30 25 4
gpt4 key购买 nike

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

我有一个 arc

定义
startAngle ( -360 <= startAngle <= 360 ), 
sweepAngle ( -360 <= sweepAngle <= 360 )
and a radius (not important here).

我想把这个弧分成一对 (startAngle1, sweepAngle1), ...这样四个象限中的每一个都有不同的对。

Eg. If startAngle = 45, sweepAngle = 90, then there shall be two pairs (45,45) and (90,45).

一种蛮力方法是检查所有 4^2可能性(每个 startAngle 和相应的 endAngle(由 sweepAngle 计算)可以在 4 个象限中的任何一个)。

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

谢谢。

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

还有更好的吗?

最佳答案

我将从 90-startAngle%90 开始,模运算符为您提供当前象限中的 startAngle 部分。 90 减去该值就是 startAngle 必须进入该象限的部分。所以,这是你的第一个后掠角。现在您可以始终将 90 添加到下一个扫描角度。您这样做直到您计算出的当前 sweepAngle 大于您输入的 sweepAngle。然后你知道你在最后一个象限。在伪代码中,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)

可能您必须更仔细地研究极端情况,当 startAngle 恰好为 90 时会发生什么,例如但基本上这应该是具有合理运行时间(和优雅,imo)的算法。

关于algorithm - 根据该部分所在的象限将弧分成多个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com