当前位置: 首页 > news >正文

Canvas:二次贝塞曲线

目录

    • 1. 含义
    • 2. 方法说明
    • 3. 绘制对号
    • 4. 绘制聊天框


1. 含义

二次贝塞尔曲线是从起始点开始,通过控制点影响,最终到达终点的平滑曲线。
控制点虽然不在曲线上,但它决定了曲线的形状。
通过调整控制点的位置,可以改变曲线的弯曲方向和程度。

2. 方法说明

quadraticCurveTo(cp1x, cp1y, x, y)

方法通过指定的控制点(cp1x, cp1y)和终点(x, y)来绘制一条二次贝塞尔曲线。
起始点是调用此方法前当前路径中的最后一个点。
如果当前路径为空,需要先使用beginPath()和moveTo()方法来定义起始点。

  • cp1x, cp1y:控制点的x和y坐标。控制点决定了曲线的弯曲方向和程度,但它本身并不在曲线上。
  • x, y:曲线的终点的x和y坐标。

3. 绘制对号

在这里插入图片描述

<!DOCTYPE html>
<html>
<body><canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;">您的浏览器不支持 HTML5 canvas 标签。
</canvas><script>// 获取当前画布var c = document.getElementById("myCanvas");// 获取画笔var ctx = c.getContext("2d");// 开启新的路径ctx.beginPath();// 起始点ctx.moveTo(20, 20); // 控制点(20,100),终点(200,20)ctx.quadraticCurveTo(20, 100, 200, 20); // 绘制路径轮廓ctx.stroke();// 结束路径ctx.closePath()ctx.strokeStyle = 'red';ctx.beginPath()ctx.moveTo(20, 20);ctx.lineTo(20, 100)ctx.lineTo(200, 20)ctx.stroke()ctx.closePath()
</script></body>
</html>

4. 绘制聊天框

在这里插入图片描述

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body>
<canvas id="c1" width="600" height="400" style="border:1px solid #d3d3d3;">您的浏览器不支持 HTML5 canvas 标签。
</canvas>
<script>var c1 = document.getElementById("c1")if (c1.getContext) {console.log("当前浏览器不支持Canvas,请下载最新的浏览器!")}var ctx = c1.getContext("2d")ctx.beginPath()ctx.moveTo(200, 300)ctx.quadraticCurveTo(150, 300, 150, 200)ctx.quadraticCurveTo(150, 100, 300, 100)ctx.quadraticCurveTo(450, 100, 450, 200)ctx.quadraticCurveTo(450, 300, 250, 300)ctx.quadraticCurveTo(250, 350, 150, 350)ctx.quadraticCurveTo(200, 350, 200, 300)ctx.stroke()ctx.closePath()// 二次贝塞曲线就是固定三个点的方式绘制曲线ctx.strokeStyle = 'red';ctx.beginPath()ctx.moveTo(200, 300)  // 起点ctx.lineTo(150, 300)ctx.lineTo(150, 200)ctx.lineTo(150, 100)  // 这是第二个点,第一个点是上一个点ctx.lineTo(300, 100)ctx.lineTo(450, 100)ctx.lineTo(450, 200)ctx.lineTo(450, 300)ctx.lineTo(250, 300)ctx.lineTo(250, 350)ctx.lineTo(150, 350)ctx.lineTo(200, 350)ctx.lineTo(200, 300)ctx.stroke()ctx.closePath()</script>
</body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 15.2 Scikit-learn简介与常用模型
  • 树莓派4b无法选择声音输入输出设备问题
  • ContentProvider:在Android中实现进程间数据共享
  • unity2107,导入spine骨骼动画报错
  • 8.4.数据库基础技术-SQL
  • Java后端面试题
  • Lua脚本 快速掌握
  • 华为设备的两种配置生效模式
  • 深度学习 —— 个人学习笔记20(转置卷积、全卷积网络)
  • 【大数据】6:MapReduce YARN 初体验
  • DAMA学习笔记(十五)-数据管理组织与角色期望
  • 模拟三层--控制层、业务层和数据访问层
  • 抓包分析排查利器TCPdump
  • Qt读写sysfs
  • 8月13日学习笔记 LVS
  • 【译】JS基础算法脚本:字符串结尾
  • __proto__ 和 prototype的关系
  • C++11: atomic 头文件
  • CSS 提示工具(Tooltip)
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • spring boot 整合mybatis 无法输出sql的问题
  • 阿里云购买磁盘后挂载
  • 翻译:Hystrix - How To Use
  • 观察者模式实现非直接耦合
  • 基于web的全景—— Pannellum小试
  • 我感觉这是史上最牛的防sql注入方法类
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 云大使推广中的常见热门问题
  • 在Unity中实现一个简单的消息管理器
  • elasticsearch-head插件安装
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 数据库巡检项
  • #14vue3生成表单并跳转到外部地址的方式
  • #php的pecl工具#
  • ${factoryList }后面有空格不影响
  • (Charles)如何抓取手机http的报文
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .bashrc在哪里,alias妙用
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net 7和core版 SignalR
  • .Net Core 中间件与过滤器
  • .Net Core中Quartz的使用方法
  • .net refrector
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • :=
  • @Bean有哪些属性
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CSS3备忘] transform animation 等