JavaScript實(shí)現(xiàn)沿五角星形線(xiàn)擺動(dòng)的小圓實(shí)例詳解
五角星形線(xiàn)的笛卡爾坐標(biāo)方程式可設(shè)為:
r=10+(3*sin(θ*2.5))^2 x=r*cos(θ) y=r*sin(θ) (0≤θ≤2π)
根據(jù)這個(gè)曲線(xiàn)方程,在[0,2π]區(qū)間取一系列角度值,根據(jù)給定角度值計(jì)算對(duì)應(yīng)的各點(diǎn)坐標(biāo),然后在計(jì)算出的坐標(biāo)位置繪制一個(gè)填充色交替變換的小圓,從而得到沿五角星形線(xiàn)擺動(dòng)的小圓的動(dòng)畫(huà)效果。
編寫(xiě)如下的HTML代碼。
<!DOCTYPE html> <html> <head> <title>沿曲線(xiàn)擺動(dòng)的小圓</title> </head> <body> <canvas id="myCanvas" width="400" height="400" style="border:3px double #996633;"> </canvas> <script type="text/javascript"> var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var i = 0; var j = Math.PI/32; var t = 0; var col = ['red','orange','yellow','green','cyan','blue','magenta']; function loop() { t = t + 1; i = i + j; if (t > 6) { t = 0; } var r=10+9*Math.sin(2.5*i)*Math.sin(2.5*i); var x = 7*r*Math.cos(i)+200; var y = 7*r*Math.sin(i)+200; context.beginPath(); context.moveTo(200, 200); context.lineTo(x, y); context.lineCap = 'round'; context.strokeStyle = 'rgba(50,100,255,0.6)'; context.stroke(); context.beginPath(); context.moveTo(200, 200); context.arc(x, y, 8, 0, 2 * Math.PI); context.fillStyle = col[t]; context.fill(); if (i>2*Math.PI) { j =-Math.PI/32; context.clearRect(0, 0, 400, 400); } if (i<0) { j = Math.PI/32; context.clearRect(0, 0,400, 400); } } setInterval('loop()',300); </script> </body> </html>
在瀏覽器中打開(kāi)包含這段HTML代碼的html文件,可以在瀏覽器窗口中呈現(xiàn)出如圖1所示的沿五角星形線(xiàn)擺動(dòng)的小圓動(dòng)畫(huà)效果。
圖1 沿五角星形線(xiàn)擺動(dòng)的小圓
將上面程序中的語(yǔ)句
var r=10+9*Math.sin(2.5*i)*Math.sin(2.5*i); var x = 7*r*Math.cos(i)+200; var y = 7*r*Math.sin(i)+200;
改寫(xiě)為:
var e=80*(1+Math.cos(2*i)/4); var f=e*(1+Math.sin(4*i)); var x=200+f*Math.cos(i); var y=200-f*Math.sin(i);
就可以在畫(huà)布中看到如圖2所示的沿四瓣花型線(xiàn)擺動(dòng)的小圓。
圖2 沿四瓣花型線(xiàn)擺動(dòng)的小圓
若改寫(xiě)為:
var r = 200 * Math.pow(Math.cos(i/3),3); var x = 200 + r * Math.sin(i); var y = 110 + r * Math.cos(i);
同時(shí)修改 if (i>2*Math.PI) 為 if (i>3*Math.PI)
就可以在畫(huà)布中看到如圖3所示的沿蘋(píng)果形線(xiàn)擺動(dòng)的小圓。
圖3 沿蘋(píng)果形線(xiàn)擺動(dòng)的小圓
若改寫(xiě)為:
var r=100*Math.pow(Math.cos(2*i),0.5); var x = 200 + 160*Math.sin(i)*Math.sin(i)*Math.sin(i); var y = -(-170+ 10*(13*Math.cos(i)- 5*Math.cos(2*i) - 2*Math.cos(3*i) - Math.cos(4*i)));
就可以在畫(huà)布中看到如圖4所示的沿心形線(xiàn)擺動(dòng)的小圓。
圖4 沿心形線(xiàn)擺動(dòng)的小圓
有興趣的讀者,可以根據(jù)自己感興趣的曲線(xiàn)的參數(shù)方程,適當(dāng)修改坐標(biāo)位置(x,y)的計(jì)算語(yǔ)句,就可以看到沿指定曲線(xiàn)擺動(dòng)的小圓的動(dòng)畫(huà)效果。
到此這篇關(guān)于JavaScript實(shí)現(xiàn)沿五角星形線(xiàn)擺動(dòng)的小圓實(shí)例詳解的文章就介紹到這了,更多相關(guān)JavaScript 沿五角星形線(xiàn)擺動(dòng)的小圓內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS實(shí)現(xiàn)網(wǎng)頁(yè)煙花動(dòng)畫(huà)效果
- JavaScript canvas動(dòng)畫(huà)實(shí)現(xiàn)時(shí)鐘效果
- js通過(guò)循環(huán)多張圖片實(shí)現(xiàn)動(dòng)畫(huà)效果
- JS實(shí)現(xiàn)水平移動(dòng)與垂直移動(dòng)動(dòng)畫(huà)
- p5.js實(shí)現(xiàn)故宮橘貓賞秋圖動(dòng)畫(huà)
- jquery輕量級(jí)數(shù)字動(dòng)畫(huà)插件countUp.js使用詳解
- 利用d3.js制作連線(xiàn)動(dòng)畫(huà)圖與編輯器的方法實(shí)例
- 利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫(huà)效果
- JavaScript變速動(dòng)畫(huà)函數(shù)封裝添加任意多個(gè)屬性
- JS div勻速移動(dòng)動(dòng)畫(huà)與變速移動(dòng)動(dòng)畫(huà)代碼實(shí)例
相關(guān)文章
window.onbeforeunload方法在IE下無(wú)法正常工作的解決辦法
下面的代碼可以做到不管用戶(hù)是點(diǎn)擊了關(guān)閉,或者是在任務(wù)欄關(guān)閉、點(diǎn)擊后退、刷新、按F5鍵,都可以檢測(cè)到用戶(hù)即將離開(kāi)的消息。2010-01-01js實(shí)現(xiàn)旋轉(zhuǎn)木馬輪播圖效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)旋轉(zhuǎn)木馬輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01在線(xiàn)編輯器的實(shí)現(xiàn)原理(兼容IE和FireFox)
在線(xiàn)編輯器的實(shí)現(xiàn)原理(兼容IE和FireFox)...2007-03-03uniapp開(kāi)發(fā)APP之強(qiáng)制更新和熱更新的實(shí)現(xiàn)
使用uni-app開(kāi)發(fā),可將代碼編譯到iOS、Android、微信小程序等多個(gè)平臺(tái),升級(jí)時(shí)也需考慮多平臺(tái)同步升級(jí),下面這篇文章主要給大家介紹了關(guān)于uniapp開(kāi)發(fā)APP之強(qiáng)制更新和熱更新的相關(guān)資料,需要的朋友可以參考下2022-12-12JavaScript Base64編碼和解碼,實(shí)現(xiàn)URL參數(shù)傳遞。
JavaScript Base64編碼和解碼,實(shí)現(xiàn)URL參數(shù)傳遞。...2006-09-09