3

对于每个齿轮,我有以下属性:

  • 半径:齿轮中心和边缘之间的长度。
  • OffsetAngle :此齿轮与父齿轮的角度。0 没有父母。
  • CenterX :齿轮的中心。
  • CenterY:齿轮的中心。
  • NumberOfTeeth :此齿轮的总齿数。
  • ToothInterval :每个牙齿之间的角度。
  • Parent :包含此齿轮连接到的齿轮的所有上述属性。

我需要计算每个齿轮的正确偏移旋转,以便齿正确对齐。有关视觉指南,请参见附图。旋转需要参考父级的旋转,当没有父级时(图片中间的32齿齿轮)旋转为0。

显示档位的视觉辅助

我无法为我的一生制定一个适用于此的公式 - 任何帮助将不胜感激。

解决方案:

this.rotation  = function() { 
    if (this.parent) {
        return -this.parent.rotation()*this.ratio() + this.toothsize()/2;
    } else { return gearRot; }
}
4

2 回答 2

2

Tag each gear as either 'even' or 'odd'. Restrict your gears such that no gear can connect to one with the same tag. That is, 'even' gears cannot connect to any gears except 'odd' ones, and 'odd' ones can only connect to 'even" ones. This will correspond to the parity of the depth of the gear in the data structure you're using to describe the overall structure. It will also be helpful to determine which way the gears actually turn with respect to each other.

Rotate all of the "odd" gears by 1/2 of a cycle. So if you have 32 teeth, each cycle is 2π/32 = π/16 radians in length, so add a rotational factor of 2π/64 = π/32 radians.

于 2012-11-19T17:16:07.457 回答
2

您作为解决方案提供的公式仅适用于两个旋转 0 的连接齿轮的齿完全对齐的齿轮位置,就像您的图像中的情况一样。对于任意位置,您还需要计算两个中心之间的角度并将其中一个齿轮旋转该值加上最终 - 正如@andand指出的 - 如果旋转的齿轮具有奇数个齿,则为“半个齿”。前段时间我写了一个类似的齿轮演示:

JavaScript 齿轮

查看源代码中的 GearView.setPos()。使用 »,«, ».« 或鼠标滚轮更改齿数。

于 2013-06-29T15:21:02.393 回答