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

  • 相关阅读:
    VS GIT 使用入门---我只是搬运工
    虚拟机安装_1_wincc_matriton
    程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
    程序设计入门—Java语言 第五周编程题 2井字棋(5分)
    JAVA入门 第五周 1多项式
    第四周编程作业 2念整数
    第四周编程作业 1素数和(5分)
    第3周作业第2题 数字和特征
    第3周作业第1题 奇偶个数
    第2周作业第2题信号报告
  • 原文地址:https://www.cnblogs.com/cs-whut/p/13201114.html
Copyright © 2020-2023  润新知