计算偏移旋转以使齿轮正确啮合?

3
对于每个齿轮,我有以下属性:
  • 半径:齿轮中心到边缘的长度。
  • 偏移角度:此齿轮相对于父齿轮的角度。当没有父齿轮时为0。
  • 中心X:齿轮的中心。
  • 中心Y:齿轮的中心。
  • 齿数:此齿轮的总齿数。
  • 齿间隔:分隔每个齿的角度。
  • 父级:包含连接到此齿轮的所有上述属性的齿轮。
我需要计算每个齿轮的正确偏移旋转角度,以便齿轮正确对齐。请参见附图进行视觉指导。旋转将需要参考父级的旋转,当没有父级(图片中间的32齿轮)时旋转为0。
我无法想出一个适用于此的公式-任何帮助都将不胜感激。
this.rotation  = function() { 
    if (this.parent) {
        return -this.parent.rotation()*this.ratio() + this.toothsize()/2;
    } else { return gearRot; }
}

尝试:http://math.stackexchange.com - Diodeus - James MacFarlane
toothsize 是用什么单位来衡量的?像素?度数? - Justin L.
2个回答

2
将每个齿轮标记为“偶数”或“奇数”。限制您的齿轮,以使没有齿轮可以连接到具有相同标记的齿轮。也就是说,“偶数”齿轮除了“奇数”齿轮之外不能连接到任何齿轮,“奇数”齿轮只能连接到“偶数”齿轮。这将对应于您用于描述整体结构的数据结构中齿轮深度的奇偶性。确定齿轮彼此之间实际旋转的方向也会很有帮助。
将所有“奇数”齿轮旋转半个周期。因此,如果您有32个齿,每个周期的长度为2π/32 = π/16弧度,因此添加旋转因子2π/64 = π/32弧度。

我的代码实际上根据父级的反转确定了齿轮的反转,并自动实现了您建议的内容。如果没有父级,则将反转设置为假。this.rotation = function() { if (this.parent) { return -this.parent.rotation() * this.ratio() + this.toothsize() / 2; } else { return globalGearRot; } } - Steffan Donal

2
您提供的解决方案公式仅适用于齿轮位置完全对齐的情况,就像您的图片中所示。对于任意位置,您还需要计算两个齿轮中心之间的角度,并将其中一个齿轮旋转该值加上可能的“半个齿”(如果旋转的齿轮有奇数齿,则如@andand所指出)。不久前,我编写了一个类似的齿轮演示:JavaScript 齿轮。请查看源代码中的GearView.setPos()。使用 »,«, ».«或鼠标滚轮更改齿数。

这是我在接受上面答案后得出的结论。 - Steffan Donal
太好了,这些齿轮很不错!我已经厌倦了看到齿轮图像,其中齿轮的齿不匹配。 - oyophant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接