1. 程式人生 > 實用技巧 >JavaScript圖形例項:窗花圖案

JavaScript圖形例項:窗花圖案

1.窗花基本框線

設定曲線的座標方程為:

n=25;

r=100;

x=r/n*cos(5*θ)+r*cos(θ);

y=r/n*sin(5*θ)+r*sin(θ); (0≤θ≤2π)

編寫如下的HTML程式碼。

<!DOCTYPE html>

<head>

<title>窗花基本框線</title>

<script type="text/javascript">

function draw(id)

{

var canvas=document.getElementById(id);

if (canvas==null)

return false;

var context=canvas.getContext('2d');

context.fillStyle="#EEEEFF";

context.fillRect(0,0,300,300);

context.strokeStyle="blue";

context.lineWidth=2;

context.beginPath();

var n=25;

var r=100;

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/180)

{

x=150+r/n*Math.cos(5*theta)+r*Math.cos(theta);

y=150+r/n*Math.sin(5*theta)+r*Math.sin(theta);

if (theta==0)

context.moveTo(x,y);

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body onload="draw('myCanvas');">

<canvas id="myCanvas" width="300" height="300"></canvas>

</body>

</html>

將上述HTML程式碼儲存到一個html文字檔案中,再在瀏覽器中開啟包含這段HTML程式碼的html檔案,可以看到在畫布中繪製出如圖1所示的一條閉合曲線。

圖1 n=25,r=100時的閉合曲線

上述程式碼中,引數n和r可以根據需要進行設定,r的含義相當於閉合曲線的半徑(實際的閉合曲線半徑會比r大一些),r/n的比值給定閉合曲線的平滑度,r/n越大,閉合曲線的旋結越大。例如,n=5,r=100時繪製的閉合曲線如圖2所示。n=2,r=100時繪製的閉合曲線如圖3所示。

圖2 n=5,r=100時的閉合曲線

圖3 n=2,r=100時的閉合曲線

2.簡單的窗花圖案

我們採用圖1所示的閉合曲線作為外框線,圖3所示的閉合曲線作為內部圖案線(r值需要適當減小,使得繪製的曲線不會超出外框線),可以繪製出簡單的窗花圖案。編寫的HTML檔案內容如下。

<!DOCTYPE html>

<head>

<title>簡單的窗花圖案</title>

<script type="text/javascript">

function draw(id)

{

var canvas=document.getElementById(id);

if (canvas==null)

return false;

var context=canvas.getContext('2d');

context.fillStyle="#EEEEFF";

context.fillRect(0,0,300,300);

context.strokeStyle="blue";

context.lineWidth=2;

context.beginPath();

var n=25;

var r=100;

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/180)

{

x=150+r/n*Math.cos(5*theta)+r*Math.cos(theta);

y=150+r/n*Math.sin(5*theta)+r*Math.sin(theta);

if (theta==0)

context.moveTo(x,y);

else

context.lineTo(x,y);

}

var n=2;

var r=50;

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/180)

{

x=150+r/n*Math.cos(5*theta)+r*Math.cos(theta);

y=150+r/n*Math.sin(5*theta)+r*Math.sin(theta);

if (theta==0)

context.moveTo(x,y);

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body onload="draw('myCanvas');">

<canvas id="myCanvas" width="300" height="300"></canvas>

</body>

</html>

將上述HTML程式碼儲存到一個html文字檔案中,再在瀏覽器中開啟包含這段HTML程式碼的html檔案,可以看到在畫布中繪製出簡單的窗花圖案,如圖4所示。

圖4 簡單的窗花圖案

3.精美的窗花圖案

在上面程式的基礎上,我們編寫如下的HTML檔案,可以繪製出更精美的窗花圖案。

<!DOCTYPE html>

<head>

<title>精美的窗花圖案</title>

<script type="text/javascript">

function draw(id)

{

var canvas=document.getElementById(id);

if (canvas==null)

return false;

var context=canvas.getContext('2d');

context.fillStyle="#EEEEFF";

context.fillRect(0,0,300,300);

context.strokeStyle="blue";

context.lineWidth=2;

context.beginPath();

var n=25;

for (r=100;r<=115;r+=5)

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/180)

{

x=150+r/n*Math.cos(5*theta)+r*Math.cos(theta);

y=150+r/n*Math.sin(5*theta)+r*Math.sin(theta);

if (theta==0)

context.moveTo(x,y);

else

context.lineTo(x,y);

}

var r=45;

for (n=1;n<=4;n++)

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/180)

{

x=150+r/n*Math.cos(5*theta)+r*Math.cos(theta);

y=150+r/n*Math.sin(5*theta)+r*Math.sin(theta);

if (theta==0)

context.moveTo(x,y);

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body onload="draw('myCanvas');">

<canvas id="myCanvas" width="300" height="300"></canvas>

</body>

</html>

將上述HTML程式碼儲存到一個html文字檔案中,再在瀏覽器中開啟包含這段HTML程式碼的html檔案,可以看到在畫布中繪製出精美的窗花圖案,如圖5所示。

圖5 精美的窗花圖案