设定曲线的坐标方程为:javascript
n=25;html
r=100;java
x=r/n*cos(5*θ)+r*cos(θ);canvas
y=r/n*sin(5*θ)+r*sin(θ); (0≤θ≤2π)浏览器
编写以下的HTML代码。spa
<!DOCTYPE html>3d
<head>htm
<title>窗花基本框线</title>blog
<script type="text/javascript">ip
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时的闭合曲线
咱们采用图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 简单的窗花图案
在上面程序的基础上,咱们编写以下的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 精美的窗花图案