在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. python爬取中国知网部分论文信息

    爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...

  2. Python3 之 with语句(高效、便捷)

    在实际的编码过程中,有时有一些任务,需要事先做一些设置,事后做一些清理,这时就需要python3 with出场了,with能够对这样的需求进行一个比较优雅的处理,最常用的例子就是对访问文件的处理. 文 ...

  3. 微信浏览器跳转浏览器下载app解决方案

    新版本微信浏览器中,已禁用下载APP应用,只支持打开微信合作商APP下载,所以无法通过微信浏览器直接下载APP应用.列举微信浏览器下载APP的种解决方案: 方案:通过Url 跳转到手机默认浏览器,或者 ...

  4. 【数据结构】之栈(Java语言描述)

    在前面的[这篇文章]中,我简单介绍了栈这种数据结构的操作功能,并使用C语言对其进行了代码的编写. Java的JDK中默认为我们提供了栈这种数据结构的API—— Stack . Java中的Stack类 ...

  5. linux 生成免密登陆步奏

    1.大致流程 有时需要从服务器A免密连接到服务器B,这时需要在服务器A生成私钥和公钥,大致过程其实就2步. 1.1 在服务器A生成公钥和私钥 在服务器A上输入如下命令: ssh-keygen -t r ...

  6. 原生js删除增加修改class属性

    其实html5已经扩展了class操作的相关API,其中classList属性就以及实现了class的增删和判断. HTML DOM classList 属性 classList属性的方法有: add ...

  7. 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr 使用介绍

    第2周第3次课(3月28日) 课程内容:2.14 文件和目录权限chmod2.15 更改所有者和所属组chown2.16 umask2.17 隐藏权限lsattr/chattr 2.14 文件和目录权 ...

  8. 小白的springboot之路(五)、集成druid

    0-前言 Druid阿里巴巴开源的一个java数据库连接池,是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能:集成它能够方便我们对数据库连接进行监控和分析,下面我们来集成它: ...

  9. 消息通知机制(NSNotification和NSNotificationCenter)

    作者:FlyElephant 出处:http://www.cnblogs.com/xiaofeixiang iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多, ...

  10. AutoLayout的那些事儿

    转自:http://www.cocoachina.com/ios/20160530/16522.html 本文投稿文章,作者:MangoMade(简书) AutoLayout非常强大也非常易用,可读性 ...