[page]
1: -gry*5+1.14
倍数5的是这样的,首先需要确定大小齿轮的半径比值,则这个倍数就是
“比值*2+1”。例如大齿轮半径为小齿轮2倍,如果精确的话周长和齿数也是2倍,则比值就是2*2+1=5
同理半径1倍(即相等时比值是1*2+1=3)
6 倍时是13
后边+1.14是最后修正齿轮之间咬合的误差,这应该很容易的得出
2:如何指定公转开始的时间?
这里的方法是小齿轮随着大齿轮同时开始转动
修改小齿轮位置X,Z的表达式
X605.545)*(-sin(tr/pi*180))+gx
tr指向大齿轮Y周旋转
Z:605.545*(cos(tr/pi*180))+gz
tr当然不能换成数字拉
因为里面的角度是需要变化的
tr是指定的一个变量名啊。我再详细说一下,下面说的大齿轮指的是中间那个不动的,小齿轮指产生公转和自转的...
其方法如同前面图片上2,3步一样,首先来到小齿轮位置X的表达式面板中,先在前面create variable下的name栏输入一个名称(这里是tr),你也可以用任何名字只要不与默认名称冲突,点击create按钮就可以在下面的匡匡里看到你定义的变量名,但现在只是一个名称我们还需要把这个名称与场景中物体的某种运动或状态参数联系在一起。点击assign to controller 指定控制器,在列表里面选择
大齿轮Y轴旋转(Y rotation) 这一项,确定后在刚才对话框下面
assigned t后面就会出现相应的文字,现在tr 这个变量在这里就代表大齿轮Y轴旋转的量。
ps:在max中这个值并不是度数而是弧度的数字值,也就是说如果一个物体转动180度的话那么在参数表达式中采集到的值是3.14,但是sin@中需要的是度数所以在公式中用到tr/pi*180转化。
现在看表达式
小齿轮X位置: 605.545*(-sin(tr/pi*180))+gx
小齿轮Z位置: 605.545*(cos(tr/pi*180))+gz
当大齿轮自转时会产生不断变化的转动角度,所以sin@和cos@在大齿轮旋转时也会随之变化,结果小齿轮的X轴和Z轴的坐标也随之变化,这也说明为什么把tr改成一个数字是行不通的。
下面把内容扩展一下
如何进一步控制齿轮的运动?
现在的运动流程是这样的,中间的定齿轮作为主动物体,当设置关键帧动画使该齿轮转动时,动齿轮
由表达式控制做公转和自转。公转表达式对应动齿轮的位置X和Z轴,而自转表达式对应动齿轮旋转Y轴。
由公转表达式: 圆心距离*(-sin(定齿轮旋转的角度))+定齿轮X轴坐标
圆心距离* (cos(定齿轮旋转的角度))+定齿轮Z轴坐标
可以看出,当定齿轮旋转完一周之后,动齿轮也刚好反向公转一周。但实际上动齿轮的公转可能需要更快或更慢,解决公转速度到很简单,只须在sin和cos的括号内乘以一个常数即可。比如定齿轮自转一圈,动齿轮公转两圈的情况:
圆心距离*(-sin(2*定齿轮旋转的角度))+定齿轮X轴坐标
圆心距离* (cos(2*定齿轮旋转的角度))+定齿轮Z轴坐标
但问题来了,这时齿轮的咬合又会有问题。
这时就要看动齿轮自转表达式这边了,因为自转速度控制咬合。
表达式: -定齿轮旋转的角度*倍数+偏移
定齿轮旋转的角度是指定的变量,偏移用来微调齿轮错位情况,这两个都没什么说的。关键的就是中间的倍数了。推导了一下得出倍数公式了,试了几种情况都没什么问题各位拿来用吧...
倍数=K*(R定/R动+1)+(R定/R动)
K是:单位时间内,动齿轮的公转角度/定齿轮的自转角度,这个值就是上面提到过的在sin和cos的括号内乘以的一个值,在实际应用中两边应该是同一个数字。
R定/R动:定齿轮与动齿轮的半径比,也同样是周长比或齿数比。个人觉得用齿数计算更精确一些。
最后动齿轮自转表达式:-定齿轮旋转的角度*(K*(R定/R动+1)+(R定/R动))+偏移
这样就能很好的控制动画了。