在“JavaScript图形实例:四瓣花型图案”和“JavaScript图形实例:蝴蝶结图案”中,我们绘制图形时,主要采用的方法是先根据给定的曲线参数方程计算出两点坐标,然后将两点用线段连接起来,线段的集合会构成一幅幅精美的图形。下面我们继续给出一些用线段构造图形的实例,供大家欣赏和借鉴。

1.莫尔花纹图案

设定曲线的坐标方程为:

b=r*(1+ sin(2.5*θ)/2);

x1=b*cos(θ);

x2=b*cos(θ+π/4);

y1=b* sin(θ);

y2=b* sin(θ+π/4);       (0≤θ≤4π)

在0~4π区间中从θ=0开始,每隔π/180按曲线方程求得两个点的坐标值(x1,y1)和(x2,y2),并将求得的两点连成一条线段,这样,可以绘制出莫尔花纹图案。

编写如下的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=1;

context.beginPath();

for (i=0;i<=720;i++)

{

a=i*Math.PI/180;

e=100*(1+Math.sin(2.5*a)/2);

x1=200+e*Math.cos(a);

x2=200+e*Math.cos(a+Math.PI/4);

y1=150-e*Math.sin(a);

y2=150-e*Math.sin(a+Math.PI/4);

context.moveTo(x1,y1);

context.lineTo(x2,y2);

}

context.closePath();

context.stroke();

}

</script>

</head>

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

<canvas id="myCanvas" width="400" height="300"></canvas>

</body>

</html>

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

图1  莫尔花纹图案

2.环片图案

设定曲线的坐标方程为:

d=100

e=50

m=d+d/3*(1+cos(8*i*dig)/2)*cos(i*dig);

n=e+e/2*(1+sin(8*i*dig)/2)*cos(i*dig);

x1=5*m*cos(i*dig)/4;

x2=5*n*cos(i*dig)/4;

p=d+d/3*(1+cos(10*i*dig)/2)*sin(i*dig);

q=e+e/2*(1+cos(8*i*dig)/2)*sin(i*dig);

y1=p*sin(i*dig);

y2=q* sin(i*dig);      (0≤θ≤2π)

在0~2π区间中从θ=0开始,每隔π/128按曲线方程求得两个点的坐标值(x1,y1)和(x2,y2),并将求得的两点连成一条线段,这样,可以绘制出环片图案。

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

context.lineWidth=2;

var dig=Math.PI/128;

context.beginPath();

var d=100;  e=50;

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

{

m=d+d/3*(1+Math.cos(8*θ)/2)*Math.cos(θ);

n=e+e/2*(1+Math.sin(8*θ)/2)*Math.cos(θ);

x1=100+5*m*Math.cos(θ)/4;

x2=100+5*n*Math.cos(θ)/4;

p=d+d/3*(1+Math.cos(10*θ)/2)*Math.sin(θ);

q=e+e/2*(1+Math.cos(8*θ)/2)*Math.sin(θ);

y1=160-p*Math.sin(θ);

y2=160-q*Math.sin(θ);

context.moveTo(x1,y1);

context.lineTo(x2,y2);

}

context.closePath();

context.stroke();

}

</script>

</head>

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

<canvas id="myCanvas" width="300" height="300"></canvas>

</body>

</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出由线段构成的环片图案,如图2所示。

图2  线段构成的环片图案

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

context.strokeStyle="red";

context.lineWidth=1;

context.save();

context.translate(300,200);

context.beginPath();

for (theta=0;theta<=2*Math.PI;theta+=Math.PI/160)

{

x1=30*Math.cos(theta);

y1=15*Math.sin(theta);

a=60*(1+Math.sin(3*theta)/6);

b=100*(1+Math.sin(4*theta)/6);

c=140*(1+Math.sin(5*theta)/6);

d=180*(1+Math.sin(6*theta)/8);

x2=a*Math.cos(theta+Math.PI/20);

y2=a*Math.sin(theta+Math.PI/20);

x3=b*Math.cos(theta);

y3=b*Math.sin(theta);

x4=c*Math.cos(theta+Math.PI/20);

y4=c*Math.sin(theta+Math.PI/20);

x5=1.5*d*Math.cos(theta);

y5=d*Math.sin(theta);

context.moveTo(x1,y1);

context.lineTo(x2,y2);

context.lineTo(x3,y3);

context.lineTo(x4,y4);

context.lineTo(x5,y5);

}

context.stroke();

context.restore();

}

</script>

</head>

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

<canvas id="myCanvas" width="600" height="400"></canvas>

</body>

</html>

将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出由线段构成的立体条纹图案,如图3所示。

图3  立体条纹图案

JavaScript图形实例:线段构图的更多相关文章

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

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

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

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

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

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

  4. JavaScript图形实例:图形的旋转变换

    旋转变换:图形上的各点绕一固定点沿圆周路径作转动称为旋转变换.可用旋转角表示旋转量的大小. 旋转变换通常约定以逆时针方向为正方向.最简单的旋转变换是以坐标原点(0,0)为旋转中心,这时,平面上一点P( ...

  5. JavaScript图形实例:正弦曲线

    正弦曲线的坐标方程为: Y=A*SIN(X)    (A为振幅) 1.正弦曲线 在弧度为0~4π的正弦曲线上取360个点,将这些点用线连接起来,可以绘制出正弦曲线.编写如下的HTML代码. <! ...

  6. JavaScript图形实例:正多边形

    圆心位于坐标原点,半径为R的圆的参数方程为 X=R*COS(θ) Y=R*SIN(θ) 在圆上取N个等分点,将这N个点首尾连接N条边,可以得到一个正N边形. 1.正多边形阵列 构造一个8行8列的正N( ...

  7. JavaScript图形实例:Canvas API

    1.Canvas概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap). 要使用HTML5在浏览器窗口中绘制 ...

  8. JavaScript图形实例:合成花卉图

    我们知道在直角坐标系中,圆的方程可描述为: X=R*COS(α) Y=R*SIN(α) 用循环依次取α值为0~2π,计算出X和Y,在canvas画布中将坐标点(X,Y)用线连起来,可绘制出一个圆.编写 ...

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

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

随机推荐

  1. 项目中vuex的加入

    1, 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿. 为了解决以上问题,Vuex 允许我们将 store 分割成模块(modu ...

  2. Python面向对象基础语法

    目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的,我们之前学习的  ...

  3. 任意模数 n 次剩余

    \(n\) 次剩余 你需要解方程 \(x^n\equiv k\pmod m\),其中 \(x\in [0,m-1]\). 保证解数不超过 \(C=10^6\) \(1\le n,m,k\le 10^9 ...

  4. 使用node.js实现多人聊天室(socket.io、B/S)

    通过B/S架构实现多人聊天,客户端连接服务器,发送信息,服务器接收信息之后返回给客户端. 主要是通过socket.io实现浏览器和服务器之间进行实时,双向和基于事件的通信. socket.io官方文档 ...

  5. PyCharm安装及汉化设置为中文(附汉化包)

    下载:https://www.jetbrains.com/pycharm/download/#section=windows 下载社区版免费 双击运行安装程序 Next 选择安装路径安装 创建桌面快捷 ...

  6. Raid 10配置流程(五块磁盘)

    Raid 10配置流程(五块磁盘) 1.在虚拟机中再添加5块硬盘.  2.使用mdadm命令创建raid10,名称为“/dev/md0” -C代表创建操作,-v显示创建过程,-a yes检查RAID名 ...

  7. cas的单点登录实现

    1.  前提条件 环境:jdk1.8.shiro1.4.0及以上版本.项目以 spring+shiro构建 工具:buji-pac4j-3.1.0-jar-with-dependencies.jar以 ...

  8. Xcode 编译运行旧项目报错解决之路

    运行几年前做的项目,发现各种编译报错,一个一个解决记录下: 1.Xcode(Xcode9)编译运行报错,但是在 issue navigatior 栏看不到错误信息: 解决方案:在 show repor ...

  9. python序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  10. 组件向外暴露v-model绑定的参数

    <template> <div class="search-box"> <i class="icon-search">< ...