5.图形的连续绘制

news2025/1/19 20:41:08

到目前为止我们已经学习了折线,圆弧,矩形的基本绘制,但是我们每次都是单独绘制并且只绘制一个图形的。
不知道大家有没有试过在一个画布上绘制多个图形,例如我现在要画一个矩形,一个圆形和一段折线,代码如下:

let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
ctx.rect(0, 0, 100, 50)
ctx.arc(200, 200, 100, 0, Math.PI * 2)
ctx.moveTo(300, 300)
ctx.lineTo(400, 300)
ctx.stroke()

正当我们以为我们会得偿所愿的时候,悲剧出现了
在这里插入图片描述

仔细看我们想得到的形状都拿到了,但是会什么会有多余的连接先线呢?
仔细观察发现多余的连接线连接的是矩形的定位坐标和圆的起始角度,而我们在绘制这两种图形的时候也正是从这两个点开始绘制的。

所以结论来了:在绘制多个图形的时候,多个图形的起点坐标往往会连在一起。、但是疑问来了?折线为什么没有连接在一起呢?
如果你还记得moveTo的作用,那么大家就不会疑惑了。miveTo表示将画笔提起。所以在提起到重新落笔的额期间是不会在画布上留有痕迹的,而我们画矩形和圆形的时候并没有提起画笔,所以画笔在绘制完第一个图形后直接移动到了下一个图形的·起始坐标了,也就多了一条连接线。

那我们在矩形和圆形直接使用moveTo移动到对应的起始点是不是也可以呢?实践下:

let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
ctx.rect(0, 0, 100, 50)
ctx.moveTo(300, 200)
ctx.arc(200, 200, 100, 0, Math.PI * 2)
ctx.moveTo(300, 300)
ctx.lineTo(400, 300)
ctx.stroke()

在这里插入图片描述
目标达成!但是我们发现其实圆的起始点是需要自己计算出来的,而且以后很多图形起始点并没有那么好得到,所以我们应该有更好的办法才对。

beginPath,closePath

看名字就知道这两个方法一个表示开始绘制,一个表示结束绘制,使用起来也很简单

let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
ctx.beginPath()
ctx.rect(0, 0, 100, 50)
ctx.closePath()
ctx.beginPath()
ctx.arc(200, 200, 100, 0, Math.PI * 2)
ctx.closePath()
ctx.moveTo(300, 300)
ctx.lineTo(400, 300)
ctx.stroke()

在这里插入图片描述

我们发现我们已经设置了beginPath与closePath,图形也完整的展现了,但是矩形却不见了,这是因为stroke只会作用于最后一次closePath之前,也就是圆形和圆形往后的图形,我们需要在第一个closePath前面或者后面加上stroke即可。

let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
 ctx.beginPath()
 ctx.rect(0, 0, 100, 50)
 ctx.closePath()
 ctx.stroke()
 ctx.beginPath()
 ctx.arc(200, 200, 100, 0, Math.PI * 2)
 ctx.closePath()
 ctx.moveTo(300, 300)
 ctx.lineTo(400, 300)
 ctx.stroke()

在这里插入图片描述

我们在连续画多个图形的时候,可以使用moveTo或者beginPath,closePath来实现,他们各有利弊,需要具体情况具体分析。

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

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

相关文章

03. 人工智能核心基础 - 导论(2)

文章目录 从方法论上来讲从问题范式上来讲从研究对象来讲 Hi,你好。我是茶桁。 上一章中,我们谈论了人工智能在时间维度上的不同时间不同的侧重点,这只是一个片面的方面。当然除此之外,我们还要从其他方向来认识人工智能&#xf…

解决大模型行业落地三大挑战,华为云GaussDB向量数据库正式发布

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…

python:bottle + eel 模仿 mdict 查英汉词典

Eel 是一个轻量的 Python 库,用于制作简单的类似于离线 HTML/JS GUI 应用程序,并具有对 Python 功能和库的完全访问权限。 Eel 托管一个本地 Web 服务器,允许您使用 Python 注释函数(annotate functions),…

IDLE、Anaconda安装与使用

博主:命运之光 专栏:Python程序设计​​​​​ 目录 Python下载和安装 Anaconda安装和使用 Python程序运行方式 Python下载和安装 常用集成开发环境 IDE 默认编程环境: IDLE---初学者( Download Python | Python.org &#x…

自动群发节日祝福,1 行 Python 代码搞定,小白可用

想了解更多精彩内容,快来关注程序员晚枫 大家节日快乐,这里是程序员晚枫,小红薯也叫这个名字。 今天给大家分享一个实用功能:自动群发祝福消息。 我相信社会人都体会过,过年过节给别人群发祝福消息的无奈&#xff0…

前沿研究|16s+宏基因组binning揭示大型藻类附生微生物群落核心组成

发表期刊:Microbiome 发表时间:2023 影响因子:15.5 DOI: 10.1186/s40168-023-01559-1 研究背景 大型藻类附生微生物群落是新型酶类和化合物的丰富资源,在维持沿海系统的高生物生产力和生物多样性方面发挥着重要的作用。但迄今…

华为乾坤区县教育安全云服务解决方案(2)

本文承接: https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案(2) 课程地址解决方案部署整体流程组网规划…

Prettier - Code formatter格式化规则文件

文章目录 前言安装使用 前言 先前公司在规范代码时,由于个人业务繁忙跟技术总监是后端出身用的IDEA不熟悉vsCode;以及大多数时都自己一个人负责一个项目,当时并不看重这些;最近在整理vue3tsvite的脚手架模板(平时工作用的react),开始整理格式化代码,方便之后 vue 和 react 中应…

(附源码)springboot体检预约APP 计算机毕设16370

目 录 摘要 1 绪论 1.1开发背景 1.2研究现状 1.3springboot框架介绍 1.4论文结构与章节安排 2 Springboot体检预约APP系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据添加流程 2.2.2 数据…

什么是Promise链(Promise chaining)?它在异步编程中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是 Promise 链?⭐ 异步编程中的作用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、…

Java后端接口编写流程

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java后端接口编写流程 Java后端接口编写流程,更具业务逻辑编写Java后端接口,提供给前端访问 实现逻辑流程 POJO:实体类编写 Data B…

架构设计第七讲:数据巡检系统之daily线上表结构自动化比对

架构设计第七讲:数据巡检系统之daily&线上表结构自动化比对 本文是架构设计第七讲,数据巡检系统之daily&线上表结构自动化比对,避免正式环境与测试环境数据库/表、列结构不一致带来问题。 文章目录 架构设计第七讲:数据巡…

36 二叉树中序遍历

二叉树中序遍历 题解1 递归题解2 迭代 给定一个二叉树的根节点 root &#xff0c;返回它的 中序 遍历 。 提示&#xff1a; 树中节点数目在范围 [0, 100] 内-100 < Node.val < 100 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 题解1 递归…

Python绘图系统23:导入多个坐标轴的数据

文章目录 单轴导入多轴导入多文件导入合并导入源代码 Python绘图系统&#xff1a; 前置源码&#xff1a; Python打造动态绘图系统&#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制&#x1f4c8;四 定制绘图风格 &#x1f4c8;五 数据…

第一章 数据可视化和matplotlib

Python数据可视化 第一章 数据可视化和matplotlib 1.数据可视化概述 1.1.什么是数据可视化 ​ 数据可视化旨在借助图形化的手段&#xff0c;将一组数据以图形的形式表示&#xff0c;并利用数据分析和开发工具发现其中未知信息的处理过程。 ​ 数据可视化发展历史 ​ 可视化…

Spring IOC容器实例化Bean整体流程图

SpringBean实例化的基本流程-CSDN博客 Spring容器中的BeanDefinitionReader读取器&#xff0c;读取xml配置文件&#xff0c;解析每一个bean标签&#xff0c;将bean标签中信息封装到BeanDefinition对象中&#xff0c;该对象的集合存储到BeanDefinitionMap中&#xff0c;然后Spri…

Cocos Creator3.8 实战问题(三)去除scrollview背景色和label 对齐方式设置无效问题

1、 scrollview 默认背景是白色的&#xff0c; 我们不想要 scrollview 默认的背景颜色&#xff0c;怎么办&#xff1f; 设置 scrollview的color为透明吗&#xff1f; 不对&#xff0c;这会导致 view节点完全透明。 解决方法&#xff1a;直接删除scrollview 的Spritre frame就…

船用低速发动机缸压在线监测系统

LabVIEW开发船用低速发动机缸压在线监测系统 船用发动机结构复杂&#xff0c;部件相互连接&#xff0c;运行环境恶劣&#xff0c;使其更容易发生故障。如果船用发动机发生故障或工作状态不佳&#xff0c;将增加造成经济损失和威胁船舶安全的机。为了减少故障的发生&#xff0c…

【Kettle】Kettle部署与运行

一、部署 1.安装java 此处安装openjdk1.8&#xff0c;可用yum、apt、源码等方式安装&#xff0c;具体安装方式略。 2.安装kettle 1.下载 https://www.hitachivantara.com/en-us/products/pentaho-platform/data-integration-analytics/pentaho-community-edition.html 此…

Unity中UI Shader遮罩RectMask2D

文章目录 前言一、需要定义一个变体UNITY_UI_CLIP_RECTUNITY_UI_CLIP_RECT 二、需要申明一个_ClipRect,这是使用上面这个变体需要使用的&#xff0c;这个属性并没有在Properties声明1、现在我们用简单的代码测试一下 _ClipRect 的使用然后我们基于以上的基础&#xff0c;让 内层…