三角學之平滑的上下運動

三角學之平滑的上下運動

下圖是一個從0°到360°(或0~2π弧度)的所有值,從左到右是正弦函數所接收的角度值(以弧度為單位),y軸上是這些角度對應的正弦值。

三角學之平滑的上下運動

由圖我們可以看到,從0°到360°,正弦值從0開始逐漸增長至1,隨後下降到0, 再下降到-1,最後增長到0, 如此不斷循環,其軌跡便是我們經常所說的正弦波。

物體的平滑上下運動效果如下圖:

三角學之平滑的上下運動

思路:通過不斷增加角的度數 angle,可以模擬實現正弦值從0變到1,再變到-1,最後回到0的效果。

即假設一個物體位於座標原點(0, 0)處,通過不斷增加角angle的度數值,得到 y = Math.sin(angle) 的是從0 ~ 1 ~ 0 ~ (-1) ~ 0 如此不斷的一系列y值,將這些 y 值不斷更新到物體的y座標,x座標為0不變,則實現了物體不斷上下平滑運動的軌跡。

一、創建一個物體(笑臉)

首先我們需要用 canvas 繪製一個笑臉來模擬物體。

創建一個Smile類,實際上笑臉就是根據 Smile 類創建的新對象,即 我們模擬的物體,Smile類 代碼如下:

三角學之平滑的上下運動

構建物體笑臉的構造函數對象(即其原型對象),定義了主要屬性包括:

半徑、顏色、座標、線寬等屬性。

然後通過prototype為大笑臉對象添加 draw() 屬性如下:

三角學之平滑的上下運動

draw() 屬性主要用於繪製整個物體的圓臉、眼睛以及嘴巴。

到此,該笑臉Smile類便已完成!

二、上下波形動畫實現

思路:

1、不斷增加的角度值:angle;

2、角度變化的幅度值:speed;

3、正弦值變化範圍值:range

(為了使效果更加明顯);

4、改變物體的 y 座標值:

smile.y =

centerY + Math.sin(angle) * range;

angle += speed;

如此一來,笑臉在座標 x 不變的情況下,座標 y 以屏幕中心點為中心進行著平滑的上下波動。

實現代碼如下:

三角學之平滑的上下運動

本章小結

物體平滑的上下運動:

三角學之平滑的上下運動

最終效果:

https://www.latehuiwan.com/dd_js/1_1_sxbd.html


分享到:


相關文章: