【问题标题】:How to compute minimum rotation between two bearings如何计算两个轴承之间的最小旋转
【发布时间】:2018-02-13 12:55:27
【问题描述】:

给定 0 度到 360 度之间的两个轴承 A 和 B,计算 A 到达 B 所需的最小旋转的最有效方法是什么?旋转可以是顺时针(正)或逆时针(负)。最小旋转应该是在绝对度数较小的任何方向上。

例如,

minRotation(30,20) 产生 -10。

minRotation(350,20) 产生 30。

我们如何制定函数 minRotation(A,B)?

【问题讨论】:

    标签: algorithm math geometry geo bearing


    【解决方案1】:
     D = B - A
     while D < -180   // use "if" operator when angles are normalized to 0..360 range
        D = D + 360
     while D > 180
        D = D - 360
    

    【讨论】:

    • 有理由选择“while”而不是“if”吗?
    • 是的,我将 if 更改为 while,用于 (-300, 750) 之类的情况。如果您的角度范围已标准化,请使用if
    【解决方案2】:

    如果您的语言具有与 C 数学库中的剩余 () 函数等效的功能,则

    D = remainder( B-A, 360.0)
    

    【讨论】:

    • 您的公式在 minRotation(20,350) 等情况下失败。它应该是 -30 而不是 330。
    • @Chong 不,在这种情况下,我的公式给出了 -30,从“人余数”中,remainder() 函数计算 x 除以 y 的余数。返回值是 x-n*y,其中 n 是值 x / y,四舍五入到最接近的整数。 “四舍五入到最接近的整数”是关键位。remainder() 不是 fmod()。
    • 我明白了。好久没用C了。我正在使用 JavaScript。也许您可以显示该功能的链接?无论如何 +1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2019-10-06
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多