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

Canvas基础篇:图形绘制

Canvas基础篇:图形绘制

  • 图形绘制
    • moveTo()
    • lineTo()
      • lineTo绘制一条直线
        • 代码示例
        • 效果预览
      • lineTo绘制平行线
        • 代码示例
        • 效果预览
      • lineTo绘制矩形
        • 代码示例
        • 效果预览
    • arc()
      • arc绘制一个圆
        • 代码实现
        • 效果预览
      • arc绘制一段弧
        • 代码实现
        • 效果预览
    • arcTo()
    • rect()
    • 曲线
  • 结语

图形绘制

在之前的文章 Canvas基础篇:路径绘制 中,讲述了图形绘制的四个步骤以及图形开始路径、闭合路径、边框模式和填充模式。
本文将讲解在Canvas中,常见的几种图形绘制API。

moveTo()

moveTo():将笔触移动到指定的坐标 x 以及 y 上,该方法本身并不能画出任何东西,可以理解为在Canvas上绘图,需要落笔的起始位置。通常跟在 beginPath() 后面使用,或者在Canvas初始化时使用,其语法如下所示:

moveTo(x, y)

lineTo()

lineTo()方法用于绘制一条直线,其语法如下所示:

lineTo(x, y)

lineTo绘制一条直线

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制直线</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas')const ctx = canvas.getContext('2d')ctx.beginPath();ctx.moveTo(50, 50)ctx.lineTo(100, 100)ctx.stroke()</script>
</body></html>
效果预览

绘制一条直线

lineTo绘制平行线

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制平行线</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas')const ctx = canvas.getContext('2d')ctx.beginPath()ctx.moveTo(50, 50)ctx.lineTo(150, 50)ctx.stroke()ctx.beginPath()ctx.moveTo(50, 100)ctx.lineTo(150, 100)ctx.stroke()</script>
</body></html>
效果预览

平行线

lineTo绘制矩形

代码示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制矩形</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas')const ctx = canvas.getContext('2d')ctx.beginPath()ctx.moveTo(50, 50)ctx.lineTo(150, 50)ctx.lineTo(150, 100)ctx.lineTo(50, 100)ctx.lineTo(50, 50)ctx.stroke()</script>
</body></html>
效果预览

绘制矩形

arc()

arc()方法可以用来画一个圆或者画一个圆弧,,其语法如下所示:

arc(x, y, radius, startAngle, endAngle, anticlockwise)

其中,(x, y)代表圆心坐标;radius代表圆形半径;startAngle和endAngle分别代表起始角度和终止角度;anticlockwise取值为布尔值,用来标记是顺时针画圆还是逆时针画圆:值为true(默认值),表示顺时针;值为false表示逆时针。
注:startAngle和endAngle是以弧度为单位,如180°应该是Math.PI
度数到弧度的转换公式:
弧度 = 度数 ∗ M a t h . P I / 180 弧度 = 度数 * Math.PI / 180 弧度=度数Math.PI/180

arc绘制一个圆

代码实现
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制圆</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas')const ctx = canvas.getContext('2d')ctx.beginPath()ctx.arc(100, 100, 50, 0, 2 * Math.PI, true)ctx.fill()</script>
</body></html>
效果预览

圆

arc绘制一段弧

代码实现
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绘制弧</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas')const ctx = canvas.getContext('2d')ctx.beginPath()ctx.arc(100, 100, 50, 0, 90 * Math.PI / 180, false)ctx.closePath()ctx.stroke()</script>
</body></html>
效果预览

绘制弧

arcTo()

arcTo()也用于绘制一段圆弧,其效果和arc()相同,且官网并不推荐这个方法,因为在某些情况下,它可能并不可靠,所以本文不做讲解。

rect()

rect()方法用于绘制一个矩形,在 Canvas基础篇:绘制矩形 一文中讲述过,本文不再赘述。

曲线

圆弧是一种特殊的曲线,弧线上每一点的曲率都相同;曲线上每个点的曲率就不一定了。Canvas中有两种支持绘制曲线的方式:二次贝塞尔曲线和三次贝塞尔曲线,该内容在后面的文章中会详细讲解。

结语

本文主要介绍了Canvas中几种图形的绘制方式,包括直线、圆弧等。对于文章中错误的地方或者有任何问题,欢迎在评论区留言分享!

http://www.xdnf.cn/news/3340.html

相关文章:

  • 工业质检领域相关近期顶会论文汇总CVPR2025
  • SALOME源码分析: SMESH模块
  • 2025-04-30 AIGC-如何做短片视频
  • 科学数据可视化工具库visIt安装和使用
  • 阿里云短信接入实现示例
  • IsaacLab最新2025教程(7)-创建Interactive Scene
  • Socket-UDP
  • Day.js一个2k轻量级的时间日期处理库
  • Modbus转PROFIBUS网关:电动机保护新突破!
  • [CPCTF 2025] Crypto
  • YOLOv11改进:视觉变换器SwinTransformer目标检测网络
  • C 语言链表详解
  • 第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题答和案解析
  • 测试 用例篇
  • 指令级并行(ILP)和线程级并行(TLP)的区别,GCC -O3优化会展开循环吗?
  • Git 忽略文件配置 .gitignore
  • AI对IT行业的重塑:挑战与机遇并存的技术革命
  • URP - 序列图动画的实现
  • 多数元素题解(LC:169)
  • 扩展根分区
  • 软件产品测试报告:如何全面评估及保障软件质量?
  • kubernetes》》k8s》》Service 、Ingress 区别
  • C 语 言 - - - 动 态 内 存 分 配
  • SIwave基本操作之S参数仿真
  • 5. 进程地址空间
  • react中封装一个预览.doc和.docx文件的组件
  • Vue3 + TypeScript 实现 PC 端鼠标横向拖动滚动
  • 【蓝桥杯】第十六届蓝桥杯C/C++大学B组个人反思总结
  • 高性能架构设计-数据库(读写分离)
  • OpenHarmony - 小型系统内核(LiteOS-A)(十七)标准库