如何计算两个轴承之间的最小旋转

Posted

技术标签:

【中文标题】如何计算两个轴承之间的最小旋转【英文标题】: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)?

【问题讨论】:

【参考方案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。

以上是关于如何计算两个轴承之间的最小旋转的主要内容,如果未能解决你的问题,请参考以下文章

找到两个轴承之间的角度

两个轴承之间的差异(角度)

如何计算两个约束段的旋转角度?

寻找两帧之间的变换

两个四元数旋转的点积

在两个摄像机之间进行旋转和平移时计算单应性