分享

最新资讯

 tlrxsw 2015-12-14

我这里只用Math.sin()这个函数来举例,我们用到这个函数时大多是想得到一个在某一值域内不断循环的一个数值,比如Math.sin(角度值),无论“角度值”怎么变化,我们都会得到一个值在0->1->0->-1>0间不断循环的数值。


  但是如果我们在AE中直接写Math.sin(30),我们得到的结果不会是0.5。???为啥呢?因为AE中三角函数默认的单位是弧度而不是角度,很郁闷吧!那我们想正常使用的话就要把角度变为弧度,这样得出的值才和我们要求的一样!


  什么是角度,估计没有人忘,那什么是弧度?忘的人有一半吧!呵呵,我也是百度到的。弧度的定义是弧长等于圆半径的弧所对的圆心角为1弧度。根据定义,一周的弧度数为2πr/r=2π,360°角=2π弧度,最终我们得到 1度=π/180弧度 ,把它带入三角函数得到Math.sin(π/180弧度),那30度的SIN值就应该是Math.sin(30*π/180弧度),AE默认单位就是弧度,π的写法是Math.PI,所以当我们要某角度的SIN值时就可以写成Math.sin(角度值*Math.PI/180)。下面只要引入一个变量代表角度值,就可以得到一个在1与-1之间循环运动的数值了。AE中为我们提供了time这个变量,如果我们把time看做角度值的话,那Math.sin(time*Math.PI/180)则表示每360秒经历一次0->1->0->-1>0的循环,这个周期太长了,我们希望1秒经历一次循环,那我们可以把time变成原来的360倍写成 Math.sin(360*time*Math.PI/180),调整一下我们得到 Math.sin(time*2*Math.PI),这个表达式的意思是:SIN值在每一秒内都经历了一次0->1->0->-1>0的循环。


  有了这个基准,我们再有其他要求的时候就可以在这个表达式的基础上做推导。

  比如我们想1秒内循环3次,那我们就要加快time,就可以写成 Math.sin(3*time*2*Math.PI)

  如果我们想5秒循环1次,那我们就应该减慢time,写成 Math.sin(time/5*2*Math.PI)

  如果我们希望1秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time*2*Math.PI)*100

  如果我们希望2秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time/2*2*Math.PI)*100

  真啰嗦,呵呵!不过我们的最终结果也出来了。

  当我们希望N秒内在X与-X之间循环M次的话,我们可以写成 Math.sin(M/N*time*2*Math.PI)*X


  写了半天,这个表达式最简单的应用应该是在弹性类表达式中,比如 Math.sin(M/N*time*2*Math.PI)*X/Math.exp(time*I)。


  Math.exp(time*I) 这个函数是返回一个以E为底的time*I次幂,在上面这个表达式中用来控制弹性衰减的速度,也就是说I值越大衰减越快I值越小衰减越慢。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多