前端基础_贝塞尔和二次方曲线

news2025/2/5 17:45:04

 贝塞尔和二次方曲线

贝塞尔曲线可以是二次和三次方的形式,常用于绘制复杂而有规律的形状。

绘制贝塞尔曲线主要使用bezierCurveTo方法。该方法可以说是lineTo的曲线版,将从当前坐标点到指定坐标点中间的贝塞尔曲线追加到路径中。该方法的定义如下。

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

该方法使用6个参数。绘制贝塞尔曲线的时候,需要两个控制点,cp1x为第一个控制点的横坐标,cp1y为第一个控制点的纵坐标;cp2x为第二个控制点的横坐标,cp2y为第二个控制点的纵坐标;x为贝塞尔曲线的终点横坐标,y为贝塞尔曲线的终点纵坐标。

绘制二次样条曲线,使用的方法是quadraticCurveTo。该方法的定义如下。

quadraticCurveTo(cp1x, cp1y, x, y)

两种方法的区别如图17.8所示。它们都是一个起点一个终点(图中的蓝点),但二次方贝塞尔曲线只有一个(红色)控制点,而三次方贝塞尔曲线有两个。

参数x和y是终点坐标,cp1x和cp1y是第一个控制点的坐标,cp2x和cp2y是第二个控制点的坐标。

【例17.5】下面看一下使用bezierCurveTo方法的实例。本例中使用bezierCurveTo方法绘制一个红色实心的红心。

实现的主要代码如下。

context.beginPath();

context.fillStyle = '#c00';

context.strokeStyle = '#c00';

context.moveTo(75,40);

context.bezierCurveTo(75,37,70,25,50,25);

context.bezierCurveTo(20,25,20,62.5,20,62.5);

context.bezierCurveTo(20,80,40,102,75,120);

context.bezierCurveTo(110,102,130,80,130,62.5);

context.bezierCurveTo(130,62.5,130,25,100,25);

context.bezierCurveTo(85,25,75,37,75,40);

context.fill();

context.stroke();

从上面的代码可以看出,红心的绘制主要是多次使用了三次方贝塞尔曲线绘制的。

【例17.6】下面再来看一下使用quadraticCurveTo方法绘制二次方线的实例。本例主要是绘制了一个用于解释说明的对话框。其实现的主要代码如下。

context.beginPath();

context.moveTo(75,25);

context.strokeStyle = '#c00';

context.quadraticCurveTo(25,25,25,62.5);

context.quadraticCurveTo(25,100,50,100);

context.quadraticCurveTo(50,120,30,125);

context.quadraticCurveTo(60,120,65,100);

context.quadraticCurveTo(125,100,125,62.5);

context.quadraticCurveTo(125,25,75,25);

context.stroke();

context.fill();

本例在浏览器中实现的效果。

相对来说,二次样条曲线的绘制比贝塞尔曲线的绘制容易一些,因为绘制贝塞尔曲线时需要两个控制点,而绘制二次样条曲线时只需要一个控制点。因此,quadraticCurveTo方法只需要4个参数就可以了,分别是控制点的横坐标、控制点的纵坐标、二次样条曲线终点的横坐标、二次样条曲线终点的纵坐标。

https://www.bilibili.com/video/BV1Gv4y1Q7px/?p=2&spm_id_from=pageDriver&vd_source=a7816e3b2a3a67ac39dc87f6bf92421cicon-default.png?t=M85Bhttps://www.bilibili.com/video/BV1Gv4y1Q7px/?p=2&spm_id_from=pageDriver&vd_source=a7816e3b2a3a67ac39dc87f6bf92421c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

艾美捷耗氧率检测试剂盒说明书及相关研究

细胞内稳态通过ATP的产生来维持。ATP的生成可以通过单独的糖酵解(无氧呼吸)或通过糖酵解与氧化磷酸化的耦合来完成。氧化磷酸化是氧(O2)依赖性的,发生在线粒体中,是哺乳动物细胞合成ATP的最有效和优选的方法…

电力系统可视化——比PowerWorld还精彩(Matlab实现)

目录 1 概述 2 PowerWorld 3 案例及Matlab代码实现 3.1 案例 3. 2 结果展现 3.3 Matlab代码实现 1 概述 信息可视化的应用为电力行业带来了巨大的希望,但其潜力尚未被可视化社区充分挖掘。先前关于电力系统可视化的工作仅限于在地理布局之上描绘原始或处理过的…

【数据结构】单链表OJ

目录 一、反转单链表 描述 二、返回链表的中间节点 三、返回倒数第K个节点 描述 示例1 四、合并两个已排序的链表 描述 五、分隔链表 六、判断一个链表是否为回文结构 描述 示例1 示例2 示例3 七、两个链表的第一个公共结点 描述 输入描述: 返回值描…

LICEcap:GIF屏幕录制工具

写博客的时候,我经常会用到需要自制gif的场景,我之前一直使用视频转gif工具处理https://tool.lu/video2gif/,大致就是利用qq录屏成视频,然后通过工具转成gif。 今天无意间看到其他博主用了 LICEcap 工具 LICEcap 是一款简洁易用的…

“隐形贫困者”自学Python做副业,教你如何月入10000+

现在的年轻人总是觉得攒不下钱,虽然表面风光,每天出入高级CBD,可是几乎每个人都是月光族,这一类人被定义为“隐形贫困者”,原因是什么呢?根据小编的分析,现在人们对生活质量要求普遍提高了&…

毕业设计 单片机智能避障超声波跟随小车 - 物联网 嵌入式

文章目录0 前言1 项目背景2 实现效果3 设计原理HC-SR04超声波模块5 部分代码6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告…

玩转云端 | 数据管理深似海,运维如何变“路人”?

数字技术正在改变人们生产、生活的方方面面。作为数字经济时代的重要生产要素,数据正以指数级别爆发式增长,企业对于数据存储及处理的方式和要求已是“今时不同往日”。最早古人存储数据的方法是“以物记物”或“借物记物”,即用更易于携带的…

如何视频裁剪?建议收藏这几种裁剪视频的方法

现在的网络很是方便,我们可以轻轻松松的在网上找到各种网课视频来进行学习。不过有些网课里面的重点内容不仅比较少,还很分散,让我们很难做到高效的学习。但其实我们可以通过视频裁剪,将有重点内容的视频裁剪下来,这样…

SpringBoot SSMP案例整合二 运维篇

目录 一、程序打包 二、项目打包后 若启动失败 三、虚拟机启动SpringBoot项目(Linux) 四、临时属性 五、配置文件4级分类 六、自定义配置文件 七、多环境开发(yml版本) 八、多环境开发多文件版(yml版&#xf…

C++ Primer 第四章 表达式

C Primer 第四章 表达式4.1. Fundamentals4.1.1. Lvalues and Rvalues4.1.2. Precedence and Associativity4.2. Arithmetic Operators4.4. Assignment Operators4.5. Increment and Decrement Operators4.9. The sizeof Operator4.10. Comma Operator4.11. Type Conversions4.…

中国风?古典系?AI中文绘图创作尝鲜!⛵

💡 作者:韩信子ShowMeAI 📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42 📘 本文地址:https://www.showmeai.tech/article-detail/413 📢 声明:版权所有,转…

Java——B-树

概念 当我们使用avl树或者红黑树进行数据检索时,虽然树是平衡的,可以保证搜索的效率大概是logN。但是当我们的数据量比较大时,只能在内存中存储数据在硬盘中的指针,这时如果我们要检索数据,最少也需要比较树的高度次。…

【算法】单词接龙,合并区间, 二叉搜索树的最近公共祖先,旋转排序数组中的最小值看看有你会的吗?

算法学习有些时候是枯燥的,每天学习一点点 算法题目一. 单词接龙 II 题目描述java 解答参考二. 合并区间 题目描述java 解答参考三. 二叉搜索树的最近公共祖先 题目要求java实现方案四 寻找旋转排序数组中的最小值一. 单词接龙 II 题目描述 按字典 wordList 完成从…

Azure RTOS 嵌入式无线网络框架简化物联网应用开发

一、Azure RTOS概述 Azure RTOS 是一个实时操作系统 (RTOS),适用于由微控制器 (MCU) 提供支持的物联网 (IoT) 和边缘设备, Azure RTOS 旨在支持高度受限设备(电池供电,并且闪存容量不到 64 KB)。简而言之,…

某HR分享:2n和n+3的基数不一样,n+3比2n拿得多!仲裁期间不能入职新公司,千万别轻易仲裁,得不偿失!...

被裁员时,要2n还是要n3?是否选择仲裁?一位hr说,跟走过仲裁的同学和律师朋友打听了下,原来2n和n3完全不一样。n3的n取的是“非私营单位从业人员平均工资”的三倍,杭州市是3.2万。2n的n取的是“全社会就业人员…

Android设计模式详解之单例模式

前言 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 使用场景:确保某个类有且仅有一个对象的场景,避免产生多个对象消耗过多的资源。比如要访问IO和数据库资源,应该考虑使用单例模式。 …

JAVA开发(数据库表设计)

对于大型系统数据库设计,需要进行一定的规划和规范,才能方便系统扩展和维护。一般系统的数据库设计要求,有数据库表系统规划,数据库表系统命名规范和设计规范。 一、数据库表系统规划 1、按系统规划或者按微服务规划 2、按业务…

Matlab论文插图绘制模板第71期—三维饼图(Pie3)

在之前的文章中,分享了Matlab饼图的绘制模板: 进一步,再来分享一下三维饼图的绘制模板。 先来看一下成品效果: 特别提示:Matlab论文插图绘制模板系列,旨在降低大家使用Matlab进行科研绘图的门槛&#xff0…

最大子段和(动态规划详细解析)

最大子段和 题目描述 给出一个长度为 nnn 的序列 aaa,选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数,表示序列的长度 nnn。 第二行有 nnn 个整数,第 iii 个整数表示序列的第 iii 个数字 aia_iai​。 输出格式 …

读取excel文件read_excel()--Pandas

1. 函数功能 读取excel文件,支持读取xls,xlsx,xlsm等类型的EXCEL文件。能够读取一个sheet表或多个sheet表 2. 函数语法 pandas.read_excel(io, sheet_name0, *, header0, namesNone, index_colNone, usecolsNone, squeezeNone, dtypeNone, engineNone, converte…