JavaScript图形实例:圆形图案
在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图形实例:圆形图案的更多相关文章
- JavaScript图形实例:线段构图
在“JavaScript图形实例:四瓣花型图案”和“JavaScript图形实例:蝴蝶结图案”中,我们绘制图形时,主要采用的方法是先根据给定的曲线参数方程计算出两点坐标,然后将两点用线段连接起来,线段 ...
- JavaScript图形实例:再谈IFS生成图形
在“JavaScript图形实例:迭代函数系统生成图形”一文中,我们介绍了采用迭代函数系统(Iterated Function System,IFS)创建分形图案的一些实例.在该文中,仿射变换函数W的 ...
- JavaScript图形实例:随机SierPinski三角形
在“JavaScript图形实例:SierPinski三角形”中,我们介绍了SierPinski三角形的基本绘制方法,在“JavaScript图形实例:迭代函数系统生成图形”一文中,介绍了采用IFS方 ...
- JavaScript图形实例:图形的扇形变换和环形变换
1.1 扇形变换 将如图1所示的上边长方形的图形变换为下边的扇形图形的变换称为扇形变换. 设长方形图形中任一点P1(X1,Y1)变换为扇形图形上的点P2(X2,Y2),长方形的长为X,扇形圆心坐标为 ...
- JavaScript图形实例:图形的平移和对称变换
1.1 六瓣花平移变换 平移变换是指图形从一个位置到另一个位置所作的直线移动.如果要把一个位于P(x,y)的点移到新位置P’(x’,y’),如图1,则只要在原坐标上加上平移距离Tx和Ty即可. 即 ...
- JavaScript图形实例:四瓣花型图案
设有坐标计算公式如下: X=L*(1+SIN(4α))*COS(α) Y=L*(1+SIN(4α))*SIN(α) 用循环依次取α值为0~2π,计算出X和Y,在canvas画布中对坐标位置(X,Y)描 ...
- JavaScript图形实例:平面镶嵌图案
用形状.大小完全相同的一种或几种平面图形进行拼接,彼此之间不留空隙.不重叠地铺成一片,就叫做这几种图形的平面镶嵌. 1.用一种多边形实现的平面镶嵌图案 我们可以采用正三角形.正方形或正六边形实现平面镶 ...
- JavaScript图形实例:纺织物图案
1.简单纺织物图案 先在HTML页面中设置一个画布. <canvas id="myCanvas" width="360" height="240 ...
- JavaScript图形实例:窗花图案
1.窗花基本框线 设定曲线的坐标方程为: n=25; r=100; x=r/n*cos(5*θ)+r*cos(θ); y=r/n*sin(5*θ)+r*sin(θ); (0≤θ≤2π ...
随机推荐
- PostGIS 导入SHP文件并与ArcGIS连接
运行环境: ArcGIS10.4 PostGreSql9.4 PostGIS2.2(需勾选空间数据库,否则需要重新安装) 实现步骤: 方法一: 1.打开pgAdminIII,数据库节点上右键,新建数据 ...
- PHP创建对象的6种方式
创建对象实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- tcp和udp的网络编程(发送消息及回复)
一.UDP 无连接的 高效的 基于数据报的 不可靠 的连接 主要的应用场景: 需要资源少,网络情况稳定的内网,或者对于丢包不敏感的应用,比如 DHCP 就是基于 UDP 协议的.不需要一对一沟 ...
- C/C++ 条件编译静态库
==>windows 下方法: 1.方法一:VS工程中中直接添加 1.1在VS的属性->常规->附加库目录,添上文件夹的路径:例如:lib/x64: 1.2输入的附加依赖项,添加上库 ...
- 2019-11-4:渗透测试,bypass学习,笔记
编码方式过wafurl编码,针对特殊情况可以两次URL编码十六进制编码,针对某些数据,如特殊字符,特殊字符串等unicode编码,使用两个字节编码一个字符,高位不足使用0填充单引号:%u0027.%u ...
- [ch03-02] 交叉熵损失函数
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 3.2 交叉熵损失函数 交叉熵(Cross Entrop ...
- CCNA 之 七 路由协议 三 OSPF
OSPF协议 OSPF开放式最短路径优先 全称:Open Shortest Path First 是目前使用最为广泛的路由协议,主要因为OSPF是开放式协议,和IGRP.EIGRP思科的私有协议不同. ...
- Chapter 07-Basic statistics(Part3 correlations)
这一部分使用R基础已安装包中的state.x77数据集.该数据集的数据是关于美国50个州在1977年对人口,收入,文盲率,平均寿命,谋杀率,高中毕业率统计所得. 1.关联的种类(types of co ...
- Python实现简单框架及三大框架对比
手撸web框架 简单的请求响应实现 要实现最简单的web框架,首先要对网络熟悉,首先HTTP协议是应用层的协议,只要我们给数据加上HTTP格式的响应报头,我们的数据就能基于socket进行实现了 im ...
- Linux之find命令
1.find命令的作用 主要用于操作系统文件.目录的查找. 2.find命令常用参数 -name #按文件名查找 -type #按文件类型查找:b/p/c/p/l/f -size #但文件大小查找,G ...