百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

前端图形学(六)——Canvas展现数学之美

toyiye 2024-08-22 02:21 4 浏览 0 评论

点击右上角的关注,不定期前端干货分享!!

欢迎来到我的前端图形学系列文章:

前端图形学基础(一)——Canvas基础入门

前端图形学基础(二)——Canvas基础

前端图形学基础(三)——Canvas绘制图片

前端图形学基础(四)——Canvas绘制曲线

前端图形学基础(五)——Canvas状态管理

在职场征战多年的你,是否还依稀记得高中数学的知识呢?看到上方的图,是否能勾起你的回忆呢?可能有人会说,你一个做前端的DS,扯高中数学做什么呢?这和我们前端有什么关系呢?

那么可以很负责任的告诉大家,高中的数学、物理在前端图形学中的应用的地位绝对的举足轻重。没有相关的知识的支撑,可以说图形学寸步难行~

不信我们接着往下看吧~~

先来看我们今天要实现的第一个效果吧:

看到这张git图,是否有脸蒙蔽?其实这就是利用canvas + 三角函数实现的效果。

前面的canvas图形学基础中我有介绍到通过lineTo去实现一个正弦曲线示意图。我们大致回顾一下高中的三角函数的基础知识

三角函数(正余弦曲线)

至于为什么是这样的两条曲线,我前面的文章 前端图形学基础(二)——Canvas基础中有介绍。

1、正弦曲线:

y = k * sin(c * x + a ) + b ;

2、余弦曲线

y = k * cos( c * x + a ) + b ;

解释一下几个参数的意义,我们都知道,正余弦函数y的聚会范围是 [ 0 , 1 ],所以:

1、k 表示的整体y的大小,那么从上图中可以知道,y 值的变化就是对应曲线的波峰。

2c 表示的是曲线的周期大小。

3、a 表示曲线的水平方向的平移(左加右减)

4、b 表示的曲线的垂直方向的平移(上加下減)

好了,有了上面的基础,我们可以来分析一下我们要实现的效果了。

我们看到有两条曲线,由不同的速度从左往右运动,从而形成了视觉差。两条曲线对应的刚好就是正余弦曲线。

废话少说,我们直接上代码:

(需要源代码的可私信我)

两条曲线的绘制过程很相似,我这就没有去单独的封装成方法了。

先可以简单的绘制静态的正弦曲线。然后将曲线的终点lineTo到画布的右下角(width,height),再移动到左下角(0,height),最后再closePath()形成闭环。

分解一下这个过程:

首先绘制一个正弦曲线:

 canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

var {width,height} = canvas;

context.save();

context.translate(0,height/10);

context.beginPath();

for(var i = 0; i< width;i++){

 var x = i;
 
 var y = 8* Math.sin( x * Math.PI / 180 + (i / 200));

 context[i === 0 ? 'moveTo':'lineTo'](x,y);

}

context.lineTo(width,height);

context.lineTo(0,height);

context.closePath();

context.fillStyle = 'rgba(156,10,217,1)';

context.fill()

context.restore();

值得注意的是,这里使用到了我上一篇文章中所讲到的canvas的状态管理的应用。context.save()和context.restore();以及开始一段路径的方法。效果如下:

然后相同的方法我们也可以绘制出对应的余弦曲线了吧,两个效果叠加到一起效果如下:

然后该让两条曲线扭动起来了。

前面说到了:y = k * sin(c * x + a ) + b ; 中我们只需要不停的改变 a 的值,就能实现曲线运动起来了。我们让两条曲线对应不同的速度,形成视觉差。最终的效果就出来啦~~

总结

高中的数学只是理论,而前端图形学就是要将这些理论应用到我们的图形界面中,让数学之美得以完美体现。

这里是【畅哥聊技术】前端图形学相关技术文章,更多精彩内容敬请关注,下一篇我将带来基于此示例延伸出更深入的实例。未完待续。。。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码