如何制作Gears网格

时间:2011-09-12 03:16:21

标签: javascript math physics game-physics

(我不知道很多齿轮类型的术语......)

我有两个齿轮(齿轮A和齿轮B),我正试图啮合。

有效的事情
我已经成功地编写了代码,确保齿轮的距离正确,并根据这个数字以适当的速度旋转不同数量的齿轮。

问题
我无法计算当它放在齿轮A旁边时旋转齿轮B应该是什么,以便齿轮上的齿轮啮合在一起(两个齿轮上的齿轮尺寸相同)。

齿轮A以x1,y1为中心,以 q 度旋转。齿轮B以x2,y2为中心,与齿轮A的距离 d 。齿轮上两个齿轮之间的距离 c

我使用Math.atan2(y2-y1, x2-x1) *(180/Math.PI);来计算两个齿轮相对于原点之间的角度,但并不总是得到好的结果(可能是我的代码在其他地方的问题,不确定......)我的想法是使用此角度和 q 计算齿轮B的旋转值。

我可以使用q%c为齿轮B获得更精确/更小的旋转值,但不确定如何继续。

1 个答案:

答案 0 :(得分:3)

考虑一个带有n个齿轮的齿轮。如果n是偶数,则每个齿轮对面是另一个齿轮。如果n是奇数,那么每个齿轮相反的是一个陷波(或者正确的项是什么)。在任何一种情况下,如果你将齿轮旋转2π/ n弧度,它将看起来像以前一样 - 每个齿轮都“移过”。因此角度仅以2π/ n为模。

考虑两个相同的齿轮,啮合,两者都以x轴为中心(y = 0)。如果n是奇数,那么它们的角度可以相等(当齿轮指向 x 方向时,我们可以称之为角度0),并且通常如果一个齿轮处于角度 a ,然后另一个将处于角度 -a 。如果n是偶数,那么当一个齿轮处于0时,另一个齿轮处于π/ n,并且通常当一个齿轮处于 a 时另一个齿轮处于π/ na

现在假设左侧的齿轮(“齿轮A”)有n个齿轮,右侧的齿轮(“齿轮B”)有m个齿轮。如果m是奇数,那么当齿轮B在 am 时,齿轮A在 -an 。如果m是偶数,当齿轮B在 am 时,齿轮A在π/ n-an

现在假设它们的中心不是相同的y值,因此从齿轮A的中心看,齿轮B的中心处于角度 b 。现在从中减去该角度每个齿轮的旋转角度,你将问题减少到前一个。