JavaScript图形实例:正弦曲线

正弦曲线的坐标方程为:

Y=A*SIN(X)    (A为振幅)

1.正弦曲线

在弧度为0~4π的正弦曲线上取360个点,将这些点用线连接起来,可以绘制出正弦曲线。编写如下的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 dig=Math.PI/90;

context.beginPath();

for (var x=0;x<360;x++)

{

y=150-120*Math.sin(x*dig);

if (x==0)

{

context.moveTo(x,y);

}

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图1  正弦曲线

若将上述文件中的语句“y=150-120*Math.sin(x*dig);”改为“y=150-120*Math.cos(x*dig);”,可以绘制出如图2所示的余弦曲线。

图2 余弦曲线

2.正弦波

适当减小图1中正弦函数的振幅,并且用循环绘制多条在Y轴方向上向下平移若干单位的正弦曲线,可以绘制出正弦波形图案。编写如下的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 dig=Math.PI/90;

context.beginPath();

for (py=40;py<=200;py+=5)

for (var x=0;x<360;x++)

{

y=py-15*Math.sin(x*dig-dig*(py-40)/2);  // 正弦函数的相位进行变化

if (x==0)

{

context.moveTo(x,y);

}

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图3  正弦波形

3.合成正弦波形

若将正弦函数进行合成,例如取 Y=A*SIN(3X)*SIN(X),可以绘制出合成正弦波图案。

编写的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 dig=Math.PI/90;

context.beginPath();

for (py=40;py<=200;py+=5)

for (var x=0;x<360;x++)

{

y=py-15*Math.sin(3*x*dig)*Math.sin(x*dig-dig*(py-40)/2);

if (x==0)

{

context.moveTo(x,y);

}

else

context.lineTo(x,y);

}

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图4  合成正弦波

4.端点按三角函数规律变化的线段

将线段的端点按三角函数规律变化,可绘制图形。例如,将线段的一个端点取自正弦曲线,另一个端点取自对应的余弦曲线,可以编写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="blue";

context.lineWidth=1;

var dig=Math.PI/90;

context.beginPath();

context.moveTo(0,150);

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

{

y=150-120*Math.sin(i*dig);

context.lineTo(i,y);

}

context.stroke();

context.strokeStyle="red";

context.lineWidth=2;

context.beginPath();

for (var i=0;i<360;i+=5)

{

x=150-120*Math.sin(i*dig);

y=150-120*Math.cos(i*dig);

context.moveTo(i,x);

context.lineTo(i,y);

}

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图5  端点按三角函数规律变化的线段

将图5中绘制的线段按规律进行着色,并适当改变线段端点的三角函数计算方法。编写如下的HTML文件。

<!DOCTYPE html>

<head>

<title>彩带图案</title>

<script type="text/javascript">

function draw(id)

{

var colors = [‘red‘,‘orange‘, ‘yellow‘, ‘green‘, ‘cyan‘,‘blue‘, ‘purple‘ ];

var canvas=document.getElementById(id);

if (canvas==null)

return false;

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

context.fillStyle="#EEEEFF";

context.fillRect(0,0,600,200);

context.lineWidth=3;

var dig=Math.PI/150

for (var i=0;i<600;i+=4)

{

y1=100-80*Math.cos(i*dig);

y2=120-75*Math.sin(i*dig-Math.PI/2);

context.beginPath();

context.moveTo(i,y1);

context.lineTo(i+20,y2);

context.closePath();

context.strokeStyle=colors[(i/4)%7];

context.stroke();

}

}

</script>

</head>

<body >

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

</body>

</html>

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

图6  彩带

继续仿照图5线段图形绘制的方法,我们适当构造线段端点位置计算的三角函数,可以绘制出飘逸的丝带图案。编写如下的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<=180;i++)

{

a=i*Math.PI/360;

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

x2=200+180*Math.cos(2*a);

y1=150+120*Math.sin(7*a)*Math.cos(a/2.5);

y2=y1;

context.moveTo(x1,y1);

context.lineTo(x2,y2);

}

context.closePath();

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图7   丝带图案1

改变绘制图7的HTML文件中的线段端点计算函数,编写如下的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<=300;i++)

{

a=i*Math.PI/120;

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

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

y1=150+(50-80*Math.sin(2.5*a))*Math.cos(a/2.5);

y2=150+(50-80*Math.sin(2.5*a-Math.PI/4))*Math.cos(a/2.5);

context.moveTo(x1,y1);

context.lineTo(x2,y2);

}

context.closePath();

context.stroke();

}

</script>

</head>

<body >

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

</body>

</html>

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

图8  丝带图案2

原文地址:https://www.cnblogs.com/cs-whut/p/12092348.html

时间: 2024-10-10 05:44:25

JavaScript图形实例:正弦曲线的相关文章

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

旋转变换:图形上的各点绕一固定点沿圆周路径作转动称为旋转变换.可用旋转角表示旋转量的大小. 旋转变换通常约定以逆时针方向为正方向.最简单的旋转变换是以坐标原点(0,0)为旋转中心,这时,平面上一点P(x,y) 旋转了θ之后,变成点P’(x,y) ,如图1所示. 图1 点P逆时针旋转 由三角关系可得: 平面上一点P(x,y)若按顺时针方向旋转了θ之后,变成点P’(x,y) ,如图2所示. 图2 点P顺时针旋转 由三角关系可得: 1.三角形旋转 先绘制一个三角形,然后将该三角形依次顺时针旋转45°,

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

设有坐标计算公式如下: X=L*(1+SIN(4α))*COS(α) Y=L*(1+SIN(4α))*SIN(α) 用循环依次取α值为0~2π,计算出X和Y,在canvas画布中对坐标位置(X,Y)描点,可绘制出一个曲线图形.编写HTML文件内容如下: <!DOCTYPE html> <head> <title>曲线图形</title> <script type="text/javascript"> function draw

JavaScript图形实例:纺织物图案

1.简单纺织物图案 先在HTML页面中设置一个画布. <canvas id="myCanvas" width="360" height="240"> </canvas> 再在定义的这块360*240的canvas(画布)上面用二重循环绘制纺织物图案. 绘制图案的基本思想是:将画布分成6行8列的子块,即每个子块的宽度为60,高度为30.在每个子块中按规律交错地绘制11条横线或21条竖线. 可编写如下的HTML代码. <

JavaScript图形实例:七彩线团

1.线团图案 设立坐标计算公式为: X=R1*COS(3α)+R2*COS(14α)) Y=R1*SIN(3α)+R2 *SIN(14α)) 再用循环依次取α值为0~2π(每次增量为0.01),计算出X和Y,在canvas画布中将坐标点(X,Y)用线连起来,可绘制出一个封闭曲线图形,可得到一个线团图案. 编写如下的HTML代码. <!DOCTYPE> <html> <head> <title>线团</title> </head> &l

JavaScript图形实例:五角星

1.五角星 在半径为80的圆周上取5个点,用这5个点依次首尾连接画5条线,可以绘制出一个五角星图案. 编写如下的HTML代码. <!DOCTYPE html> <head> <title>五角星(一)</title> <script type="text/javascript"> function draw(id) { var canvas=document.getElementById(id); if (canvas==nu

JavaScript动画实例:李萨如曲线

在“JavaScript图形实例:阿基米德螺线”和“JavaScript图形实例:曲线方程”中,我们学习了利用曲线的方程绘制曲线的方法.如果想看看曲线是怎样绘制出来的,怎么办呢?编写简单的动画,就可以展示指定曲线的绘制过程. 1.李萨如曲线 设定李萨如曲线的坐标方程为: X=SIN(2θ) Y=SIN(3θ)     (0≤θ≤2π) 将0~2π区间等分512段,取θ的初始值π/256,按曲线方程求得坐标值(x,y),并在当前坐标处通过绘制一个实心圆的方式描点.之后每隔0.02秒,将θ的初始值加

Win10系列:JavaScript综合实例1

上面几个小节讲解了使用HTML5和JavaScript语言开发Windows 应用商店应用时会用到的一些技术,本小节将前面介绍的知识融合在一起创建一个菜谱应用程序,帮助读者更进一步地理解和掌握这些知识. 此菜谱应用程序主要的功能是介绍一些菜肴和主食的做法,其中包含三个页面:第一个页面为主页面,用于按类别显示一些菜肴和主食:第二个页面为分类页面,显示某个类别的信息和属于该类别的菜肴或主食:第三个页面为菜肴页面,显示某项菜肴或主食的详细信息,如名称.图片和具体做法.这三个页面可以相互跳转,例如,在主

编写自己的代码库(javascript常用实例的实现与封装)

编写自己的代码库(javascript常用实例的实现与封装) 1.前言 大家在开发的时候应该知道,有很多常见的实例操作.比如数组去重,关键词高亮,打乱数组等.这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了.但是,用的地方会比较,如果项目有哪个地方需要用,如果重复写的话,就是代码沉余,开发效率也不用,复用基本就是复制粘贴!这样是一个很不好的习惯,大家可以考虑一下把一些常见的操作封装成函数,调用的时候,直接调用就好!源码都放在githu

10种JavaScript特效实例让你的网站更吸引人

我们有三种主要的方法(从难到易):自己动手写脚本;使用类似于jQuery和mooTools的JavaScript框架(可以让编写代码变得更容易些);使用能工作于现有的JavaScript框架下的提前预置好的脚本或那种从头开始开发的创建者.这篇文章适合那些打算提高工作效率或不愿意从头开发脚本的人阅读. 您还可以参考以下JavaScript/Ajax相关教程及资源:<10个非常棒的Ajax及Javascript实例资源网站><12种Javascript解决常见浏览器兼容问题的方法>&l