三角函數(shù)的推導(dǎo)過(guò)程
我這里只用Math.sin()這個(gè)函數(shù)來(lái)舉例,我們用到這個(gè)函數(shù)時(shí)大多是想得到一個(gè)在某一值域內(nèi)不斷循環(huán)的一個(gè)數(shù)值,比如Math.sin(角度值),無(wú)論“角度值”怎么變化,我們都會(huì)得到一個(gè)值在0->1->0->-1>0間不斷循環(huán)的數(shù)值。
但是如果我們?cè)冢粒胖兄苯訉?xiě)Math.sin(30),我們得到的結(jié)果不會(huì)是0.5。???為啥呢?因?yàn)椋粒胖腥呛瘮?shù)默認(rèn)的單位是弧度而不是角度,很郁悶吧!那我們想正常使用的話(huà)就要把角度變?yōu)榛《?,這樣得出的值才和我們要求的一樣!?
什么是角度,估計(jì)沒(méi)有人忘,那什么是弧度?忘的人有一半吧!呵呵,我也是百度到的?;《鹊亩x是弧長(zhǎng)等于圓半徑的弧所對(duì)的圓心角為1弧度。根據(jù)定義,一周的弧度數(shù)為2πr/r=2π,360°角=2π弧度,最終我們得到 1度=π/180弧度 ,把它帶入三角函數(shù)得到Math.sin(π/180弧度),那30度的SIN值就應(yīng)該是Math.sin(30*π/180弧度),AE默認(rèn)單位就是弧度,π的寫(xiě)法是Math.PI,所以當(dāng)我們要某角度的SIN值時(shí)就可以寫(xiě)成Math.sin(角度值*Math.PI/180)。下面只要引入一個(gè)變量代表角度值,就可以得到一個(gè)在1與-1之間循環(huán)運(yùn)動(dòng)的數(shù)值了。AE中為我們提供了time這個(gè)變量,如果我們把time看做角度值的話(huà),那Math.sin(time*Math.PI/180)則表示每360秒經(jīng)歷一次0->1->0->-1>0的循環(huán),這個(gè)周期太長(zhǎng)了,我們希望1秒經(jīng)歷一次循環(huán),那我們可以把time變成原來(lái)的360倍寫(xiě)成 Math.sin(360*time*Math.PI/180),調(diào)整一下我們得到Math.sin(time*2*Math.PI),這個(gè)表達(dá)式的意思是:SIN值在每一秒內(nèi)都經(jīng)歷了一次0->1->0->-1>0的循環(huán)。?
有了這個(gè)基準(zhǔn),我們?cè)儆衅渌蟮臅r(shí)候就可以在這個(gè)表達(dá)式的基礎(chǔ)上做推導(dǎo)。?
比如我們想1秒內(nèi)循環(huán)3次,那我們就要加快time,就可以寫(xiě)成
Math.sin(3*time*2*Math.PI)?
如果我們想5秒循環(huán)1次,那我們就應(yīng)該減慢time,寫(xiě)成
Math.sin(time/5*2*Math.PI)?
如果我們希望1秒內(nèi)在100與-100之間循環(huán)3次的話(huà),就可以寫(xiě)成
Math.sin(3*time*2*Math.PI)*100?
如果我們希望2秒內(nèi)在100與-100之間循環(huán)3次的話(huà),就可以寫(xiě)成
Math.sin(3*time/2*2*Math.PI)*100?
真啰嗦,呵呵!不過(guò)我們的最終結(jié)果也出來(lái)了。?
當(dāng)我們希望N秒內(nèi)在X與-X之間循環(huán)M次的話(huà),我們可以寫(xiě)成
Math.sin(M/N*time*2*Math.PI)*X?
寫(xiě)了半天,這個(gè)表達(dá)式最簡(jiǎn)單的應(yīng)用應(yīng)該是在彈性類(lèi)表達(dá)式中,比如
Math.sin(M/N*time*2*Math.PI)*X/Math.exp(time*I)。
Math.exp(time*I) 是一個(gè)以時(shí)間為變量的平方值,在上面這個(gè)表達(dá)式中用來(lái)控制彈性衰減的速度,也就是說(shuō)I值越大衰減越快I值越小衰減越慢。
轉(zhuǎn)載自豆瓣:https://site.douban.com/215474/widget/notes/16140669/note/524238426/
原作者:想象C