五角星形線的笛卡爾座標方程式可設爲:javascript
r=10+(3*sin(θ*2.5))^2 html
x=r*cos(θ)java
y=r*sin(θ) (0≤θ≤2π)canvas
根據這個曲線方程,在[0,2π]區間取一系列角度值,根據給定角度值計算對應的各點座標,而後在計算出的座標位置繪製一個填充色交替變換的小圓,從而獲得沿五角星形線擺動的小圓的動畫效果。瀏覽器
編寫以下的HTML代碼。oop
<!DOCTYPE html>動畫
<html>spa
<head>htm
<title>沿曲線擺動的小圓</title>blog
</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>
在瀏覽器中打開包含這段HTML代碼的html文件,能夠在瀏覽器窗口中呈現出如圖1所示的沿五角星形線擺動的小圓動畫效果。
圖1 沿五角星形線擺動的小圓
將上面程序中的語句
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;
改寫爲:
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);
就能夠在畫布中看到如圖2所示的沿四瓣花型線擺動的小圓。
圖2 沿四瓣花型線擺動的小圓
若改寫爲:
var r = 200 * Math.pow(Math.cos(i/3),3);
var x = 200 + r * Math.sin(i);
var y = 110 + r * Math.cos(i);
同時修改 if (i>2*Math.PI) 爲 if (i>3*Math.PI)
就能夠在畫布中看到如圖3所示的沿蘋果形線擺動的小圓。
圖3 沿蘋果形線擺動的小圓
若改寫爲:
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)));
就能夠在畫布中看到如圖4所示的沿心形線擺動的小圓。
圖4 沿心形線擺動的小圓
有興趣的讀者,能夠根據本身感興趣的曲線的參數方程,適當修改座標位置(x,y)的計算語句,就能夠看到沿指定曲線擺動的小圓的動畫效果。