在HTML5的Canvas 2D API中,可以调用arc方法绘制圆或圆弧。该方法调用格式为:

context . arc(x, y, radius, startAngle, endAngle, anticlockwise)

其中:(x,y)为圆心坐标,radius为半径,startAngle和endAngle给定圆弧的开始角度和结束角度,anticlockwise给定方向,为布尔类型,规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。

例如,编写如下的HTML文件。

<!DOCTYPE html>

<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.beginPath();

context.arc(75,75,50,0,Math.PI*2,true);  // 圆脸

context.moveTo(110,75);

context.arc(75,75,35,0,Math.PI,false);   // 口(顺时针)

context.moveTo(65,65);

context.arc(60,65,5,0,Math.PI*2,true);  // 左眼

context.moveTo(95,65);

context.arc(90,65,5,0,Math.PI*2,true);  // 右眼

context.stroke();

}

</script>

</head>

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

<canvas id="myCanvas" width="300" height="200" style="border:3px double #996633;"></canvas>

</body>

</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出笑脸图案,如图1所示。

图1  笑脸图案

再例如,编写如下的HTML文件。

<!DOCTYPE html>

<head>

<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,400,300);

context.lineWidth=2;

for (var i=1;i<10;i++)

{

context.beginPath();

context.arc(i*20,i*20,i*10,0,Math.PI*2,true);

context.strokeStyle = 'rgb('+(25*i)+','+(255-25*i)+',255)';

context.closePath();

context.stroke();

}

}

</script>

</head>

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

<canvas id="myCanvas" width="400" height="300">您的浏览器不支持canvas!

</canvas>

</body>

</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出9个圆形沿直线从小到大抛出的图案,如图2所示。

图2  沿直线从小到大抛出的9个圆

1.圆周上的圆图案

在半径为60的圆周上取36个点作为圆心,绘制36个半径为60的圆。

可编写如下的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="#EEEEDD";

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

context.strokeStyle="blue";

context.lineWidth=1;

var dig=Math.PI/18;

var radius=60;

context.beginPath();

for (var i=0;i<36;i++)

{

var x=radius*Math.cos(i*dig)+150;

var y=radius*Math.sin(i*dig)+150;

context.arc(x,y,radius,0,Math.PI*2,true);

}

context.closePath();

context.stroke();

}

</script>

</head>

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

<canvas id="myCanvas" width="300" height="300">您的浏览器不支持canvas!

</canvas>

</body>

</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出圆周上的圆图案,如图3所示。

图3  圆周上的圆图案

上面绘制的圆的颜色全部采用蓝色,若颜色采用rgb函数计算,可以修改上述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="#EEEEDD";

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

context.strokeStyle="blue";

context.lineWidth=1;

var dig=Math.PI/20;

var radius=70;

for (var i=0;i<40;i++)

{

context.beginPath();

var x=radius*Math.cos(i*dig)+150;

var y=radius*Math.sin(i*dig)+150;

context.arc(x,y,radius,0,Math.PI*2,true);

context.strokeStyle = 'rgb('+(6.25*i)+','+(255-6.25*i)+',255)';

context.closePath();

context.stroke();

}

}

</script>

</head>

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

<canvas id="myCanvas" width="300" height="300">您的浏览器不支持canvas!

</canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出圆周上的圆图案,如图4所示。

图4 圆周上的圆

2.圆的叠加

随机选定40个圆心坐标,绘制50个半径为40的圆,并用给定颜色进行填充。可编写的HTML代码如下。

<html>

<head>

<title>圆的叠加</title>

<script type="text/javascript">

function draw(id)

{

var canvas=document.getElementById(id);

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

context.globalCompositeOperation = "lighter";

context.fillStyle = "#ff6699";

for(var i=0; i<50; i++)

{

context.beginPath();

context.arc(Math.random()*400,Math.random()*400, 40, 0,Math.PI*2);

context.closePath();

context.fill();

}

}

</script>

</head>

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

<canvas id="myCanvas" width="400" height="400" style="border:3px double #996633;">

</canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出圆的叠加图案,如图5所示。

图5  圆的叠加图案

3.心脏形图案

在半径为60的圆周上选取28个圆心坐标,根据当前圆心坐标的椭圆公式计算出半径,按计算的半径分别绘制28个圆。可编写的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,400,400);

context.strokeStyle="red";

context.lineWidth=2;

var r1=60;

var y1=150-r1;

var PI=3.1415926;

context.beginPath();

for(a=0;a<2*PI;a+=PI/27)

{

x=200+r1*Math.cos(a);

y=150+r1*Math.sin(a);

rs=Math.sqrt((x-200)*(x-200)+(y-y1)*(y-y1));

context.beginPath();

context.arc(x,y,rs,0,Math.PI*2,true);

context.closePath();

context.stroke();

}

}

</script>

</head>

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

<canvas id="myCanvas" width="400" height="400">您的浏览器不支持canvas!

</canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出心脏形图案,如图6所示。

图6 心脏形图案

4.肾形图案

在半径为80的圆周上选取28个圆心坐标,将当前圆心坐标与画布中心位置的横向距离作为半径分别绘制28个圆。可编写的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,400,300);

context.strokeStyle="red";

context.lineWidth=2;

var r1=80;

var PI=3.1415926;

for(a=0;a<=2*PI;a+=PI/27)

{

x=200+r1*Math.cos(a);

y=150+r1*Math.sin(a);

rs=Math.abs(x-200);

context.beginPath();

context.arc(x,y,rs,0,Math.PI*2,true);

context.closePath();

context.stroke();

}

}

</script>

</head>

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

<canvas id="myCanvas" width="400" height="300">您的浏览器不支持canvas!

</canvas>

</body>

</html>

在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出肾形图案,如图7所示。

图7  肾形图案

JavaScript图形实例:圆形图案的更多相关文章

  1. JavaScript图形实例:线段构图

    在“JavaScript图形实例:四瓣花型图案”和“JavaScript图形实例:蝴蝶结图案”中,我们绘制图形时,主要采用的方法是先根据给定的曲线参数方程计算出两点坐标,然后将两点用线段连接起来,线段 ...

  2. JavaScript图形实例:再谈IFS生成图形

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

  3. JavaScript图形实例:随机SierPinski三角形

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

  4. JavaScript图形实例:图形的扇形变换和环形变换

    1.1  扇形变换 将如图1所示的上边长方形的图形变换为下边的扇形图形的变换称为扇形变换. 设长方形图形中任一点P1(X1,Y1)变换为扇形图形上的点P2(X2,Y2),长方形的长为X,扇形圆心坐标为 ...

  5. JavaScript图形实例:图形的平移和对称变换

    1.1  六瓣花平移变换 平移变换是指图形从一个位置到另一个位置所作的直线移动.如果要把一个位于P(x,y)的点移到新位置P’(x’,y’),如图1,则只要在原坐标上加上平移距离Tx和Ty即可. 即  ...

  6. JavaScript图形实例:四瓣花型图案

    设有坐标计算公式如下: X=L*(1+SIN(4α))*COS(α) Y=L*(1+SIN(4α))*SIN(α) 用循环依次取α值为0~2π,计算出X和Y,在canvas画布中对坐标位置(X,Y)描 ...

  7. JavaScript图形实例:平面镶嵌图案

    用形状.大小完全相同的一种或几种平面图形进行拼接,彼此之间不留空隙.不重叠地铺成一片,就叫做这几种图形的平面镶嵌. 1.用一种多边形实现的平面镶嵌图案 我们可以采用正三角形.正方形或正六边形实现平面镶 ...

  8. JavaScript图形实例:纺织物图案

    1.简单纺织物图案 先在HTML页面中设置一个画布. <canvas id="myCanvas" width="360" height="240 ...

  9. JavaScript图形实例:窗花图案

    1.窗花基本框线 设定曲线的坐标方程为: n=25; r=100; x=r/n*cos(5*θ)+r*cos(θ); y=r/n*sin(5*θ)+r*sin(θ);          (0≤θ≤2π ...

随机推荐

  1. vuejs之路由应用之一

    什么是‘路由’,路由相当于一个映射,一个url地址对应一个组件,当url地址A变为url地址B,那么对应地址A的组件就会改变为对应地址B的组件.应用于spa,即:单页应用,url地址改变,它不会跳转页 ...

  2. 个人收藏--未整理—C# http/https 上传下载文件

    c# HTTP/HTTPS 文件上传. 分类: .net 2015-02-03 08:36 541人阅读 评论(0) 收藏 举报 方法主体 [csharp] view plaincopy public ...

  3. Linux机器相互登录

    1周第4次课(3月22日)课程内容: 1.16 Linux机器相互登录 Linux相互登录可以分2种方式,一种为ssh +IP地址,然后输入对应的root密码,一种为密钥验证方式,其中一台机器放公钥, ...

  4. DNS服务反向解析实验

    DNS域名解析服务是用于解析域名与ip地址对应关系的服务,功能上可以实现正向解析和反向解析 正向解析:根据主机名(域名)查找对应的IP地址. 反向解析:根据IP地址查找对应的主机名(域名). 下面我来 ...

  5. python1:基础数据类型(上)

    https://www.geekdigging.com/2019/10/13/2870915864/ 1.数字 在python的数字有4钟数据类型,分别是: int(有符号整型) long(长整型) ...

  6. MySql数据基础之数据表操作

    MySql数据库中主要利用多个数据表进行数据的存储,我们可以将数据表理解成一个Excel表格,Excel表格的第一列可以将它看为id列,主要任务是数据表中数据的唯一标识,不能重复.不能为空.如果将数据 ...

  7. SI4432和SI1212通讯

    SI4432是美国Silabs研发的一款工作频段低于1GHz的高性能射频收发芯片,属于其EzRadioPro系类.在国内已经广泛应用于工业.科研.医疗(ISM)以及短距离无线通信设备(SRD),其输出 ...

  8. iOS包管理工具Cocoapods的安装与使用

    转自:http://www.sxt.cn/u/10014/blog/6448 在我们开发移动应用的时候,一般都会使用到第三方工具,而由于第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时 ...

  9. OA项目之mybatis动态查询

    类似于三个条件,可以全部选择,也可以选择几个条件进行查询 Mapper.xml文件: <resultMap type="Employee" id="selAll&q ...

  10. 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)

    MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...