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  精美的窗花图案

(0)

相关推荐

  • JavaScript动画实例:沿五角星形线摆动的小圆

    五角星形线的笛卡尔坐标方程式可设为: r=10+(3*sin(θ*2.5))^2  x=r*cos(θ) y=r*sin(θ)              (0≤θ≤2π) 根据这个曲线方程,在[0,2 ...

  • JavaScript图形实例:再谈IFS生成图形

    在"JavaScript图形实例:迭代函数系统生成图形"一文中,我们介绍了采用迭代函数系统(Iterated Function System,IFS)创建分形图案的一些实例.在该文 ...

  • JavaScript动画实例:曲线的绘制

    在"JavaScript图形实例:曲线方程"一文中,我们给出了15个曲线方程绘制图形的实例.这些曲线都是根据其曲线方程,在[0,2π]区间取一系列角度值,根据给定角度值计算对应的各 ...

  • JavaScript图形实例:曲线方程

    在HTML5 Canvas画布中,我们可以根据曲线的方程绘制出曲线.例如,在笛卡尔坐标系中,圆的方程为: x=r*cos(θ) y=r*sin(θ)     (0≤θ≤2π) 编写如下的HTML代码. ...

  • JavaScript图形实例:Canvas API

    JavaScript图形实例:Canvas API

  • JavaScript图形实例:随机SierPinski三角形

    在"JavaScript图形实例:SierPinski三角形"中,我们介绍了SierPinski三角形的基本绘制方法,在"JavaScript图形实例:迭代函数系统生成图 ...

  • JavaScript图形实例:H分形

    H分形是由一个字母H演化出迷宫一样场景的分形图案,其构造过程是:取一个中心点(x,y),以此中心点绘制一条长为L的水平直线和两条长为H的竖直直线,构成一个字母"H"的形状:再以两条 ...

  • JavaScript图形实例:Hilbert曲线

    德国数学家David Hilbert在1891年构造了一种曲线,首先把一个正方形等分成四个小正方形,依次从西北角的正方形中心出发往南到西南正方形中心,再往东到东南角的正方形中心,再往北到东北角正方形中 ...

  • JavaScript图形实例:SierPinski三角形

    JavaScript图形实例:SierPinski三角形

  • JavaScript图形实例:Levy曲线及其变形

    Levy曲线是将一条线段不停地分形成两条长度相等且相互垂直的线段而生成的.Levy分形的最后很像一个英文字母C,所以也称它为C曲线. Levy曲线的生成示意如图1所示. 图1  Levy曲线的生成 1 ...

  • JavaScript图形实例:黄金螺旋线

    黄金螺旋线是根据斐波那契数列画出来的螺旋曲线.自然界中存在许多黄金螺旋线的图案,是自然界最完美的经典黄金比例.例如,如图1所示的海螺身上的曲线,图2所示的漩涡,图3所示的人耳. 图1 海螺 图2  漩 ...