javascript - 如何制作齿轮啮合

标签 javascript math physics game-physics

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

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

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

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

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

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

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

最佳答案

考虑一个有 n 个齿轮的齿轮。如果 n 是偶数,则每个齿轮的对面是另一个齿轮。如果 n 是奇数,则每个齿轮的对面都是一个缺口(或任何正确的术语)。在任何一种情况下,如果将齿轮旋转 2π/n 弧度,它看起来都和以前一样——每个齿轮都“移动了”。所以 Angular 仅对 2π/n 取模有影响。

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

现在假设左边的齿轮(“齿轮 A”)有 n 个齿轮,右边的齿轮(“齿轮 B”)有 m 个齿轮。如果 m 是奇数,则当齿轮 B 位于 am 时,齿轮 A 位于 -an。若m为偶数,当B档在am时,A档在π/n-an

现在假设它们的中心不在相同的 y 值,因此从齿轮 A 的中心看,齿轮 B 的中心与 Angular b。现在从每个齿轮的旋转 Angular ,您将问题减少到前一个。

关于javascript - 如何制作齿轮啮合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382954/

相关文章:

physics - 如何为太空战做物理学?

javascript - jQuery 包含选择器,用于在将 div 分组到子组时搜索多个字符串

javascript - 如何从odd数组中获取字符串?

javascript - 如何在 Javascript 中获取 float 的小数位?

python - 如何将列表中的整数转换为 int()?

math - 数学/物理负责人的最近方法问题

javascript - 如何将此三元运算符表达式转换为 if/else block ?

javascript - Datagrid 中的 Bootstrap 开关

c++ - 非冗余对列表中的对象索引

java - 尝试制作一个简单的落球程序