对于每个Gear,我都有以下属性:


半径:齿轮中心与边缘之间的长度。
OffsetAngle:此齿轮与父齿轮的角度。没有父母时为0。
CenterX:齿轮的中心。
CenterY:齿轮的中心。
NumberOfTeeth:此齿轮的齿总数。
ToothInterval:分隔每个牙齿的角度。
父级:包含与该齿轮相连的齿轮的所有上述属性。


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



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

解:

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

最佳答案

将每个档位标记为“偶数”或“奇数”。限制您的齿轮,以使任何齿轮都不能与带有相同标签的齿轮连接。也就是说,“偶数”齿轮不能连接到“奇数”齿轮之外的任何齿轮,而“奇数”齿轮只能连接到“偶数”齿轮。这将对应于您在数据结构中齿轮深度的奇偶性用来描述整体结构,也将有助于确定齿轮实际相对于彼此旋转的方式。

将所有“奇数”齿轮旋转1/2个周期。因此,如果您有32个齿,则每个周期的长度为2π/ 32 =π/ 16弧度,因此请添加2π/ 64 =π/ 32弧度的旋转系数。

关于javascript - 计算偏移旋转以使齿轮正确啮合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13456603/

10-10 02:59