SVG之path详解,全面解析椭圆弧命令A

前言:

转载于b站深坑妙脆角,讲解清晰明了,对初使用path圆弧命令非常友好

作者:深坑妙脆角 https://www.bilibili.com/read/cv35872299/?jump_opus=1 出处:bilibili

简述:
SVG 中的 <path> 元素用于创建路径,它是 SVG 中最强大和最灵活的基本形状之一

使用 <path> 元素可以绘制直线、曲线、弧线等各种复杂的图形,并且可以通过设置路径命令来控制路径的形状和样式

在进入正题前,先温习一下svg的坐标系,x轴为水平向右,y轴为垂直向下

基本语法:


属性解析:

d 属性定义了路径的路径数据,即路径命令序列。路径数据由一系列的路径命令组成,每个路径命令以字母开头,后面跟随一组数字参数。

常用的路径命令包括:M(移动)、L(直线)、H(水平线)、V(垂直线)、C(三次贝塞尔曲线)、S(光滑三次贝塞尔曲线)、Q(二次贝塞尔曲线)、T(光滑二次贝塞尔曲线)、A(椭圆弧)、Z(闭合路径)等

每个路径命令都有大写字母(绝对)和小写字母(相对)两种表示方式

  • fill 属性定义了路径的填充颜色
  • stroke 属性定义了路径的描边颜色
  • stroke-width 属性定义了路径的描边宽度

d属性详解
主要定义了路径的路径数据,由描述路径的一系列命令数据组成

命令数据主要由命令及命令参数组成,多个命令参数之间可用空格或逗号(英文逗号)隔开
M
该命令用于移动画笔位置

M | m后可跟2个参数:

x:横坐标位置
y:纵坐标位置


例:

  • M 100 150表示移动画笔到(100, 150)这一坐标位置
  • m 100 150表示移动画笔到(lx + 100, ly + 150)这一坐标位置,其中lx, ly表示上一命令绘制的结束点

L属性详解
该命令用于绘制一条直线

会在当前位置与命令描述位置之间绘制一条直线

L | l后可跟2个参数:

x:直线结束点横坐标位置
y:直线结束点纵坐标位置


例:

  • M 50 50 L 125 125表示在(50, 50)和(125, 125)之间绘制一条直线
  • M 50 50 l 75 75表示在(50, 50)和(50 + 75, 50 + 75)之间绘制一条直线

H属性详解
该命令用于绘制一条水平直线

会在当前位置与命令描述位置之间绘制一条水平直线

H | h后可跟1个参数:

x:水平直线结束点横坐标位置


例:

  • M 50 50 H 125表示在(50, 50)和(125, 50)之间绘制一条直线
  • M 50 50 h 75表示在(50, 50)和(50 + 75, 50)之间绘制一条直线



V属性详解
该命令用于绘制一条垂直直线

会在当前位置与命令描述位置之间绘制一条垂直直线

V | v后可跟1个参数:

y:垂直直线结束点纵坐标位置


例:

  • M 50 50 V 125表示在(50, 50)和(50, 125)之间绘制一条直线
  • M 50 50 v 75表示在(50, 50)和(50, 50 + 75)之间绘制一条直线

A属性详解
该命令主要用于描述椭圆弧,有两种写法:A(绝对)或a(相对)

表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧

A | a后可跟7个参数:

  • rx:椭圆的x轴半径(即水平半径)
  • ry:椭圆的y轴半径(即垂直半径)

这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆

也可以写比例,写比例时默认用符合条件的最小值,此时参数4就没有意义了(会出现下图右侧的情况)

  • x-axis-rotation:椭圆x轴相对于当前坐标系的旋转角度,以度数表示,顺时针为正

  • large-arc-flag:大弧标志,0表示绘制小弧,1表示绘制大弧。弧线有两个不同的弧度(小于180度的弧和大于180度的弧),该标志用于指定使用哪种弧度,简单理解就是短弧和长弧
  • sweep-flag:扫掠标志,0表示弧线从起点到终点沿逆时针方向绘制,1表示沿顺时针方向绘制
  • x: 终点的x坐标
  • y: 终点的y坐标

参数之间用空格隔开,如:Arx ry x-axis-rotation large-arc-flag sweep-flag x y
例:

M50 100 A50 100 0 1 0 150 100
表示:

经过(50, 100)这点,画一段x轴为50,y轴为100,绕x轴顺时针方向旋转角度为0°,取长弧,沿逆时针画的一段椭圆弧
绘制流程

以下流程仅用于帮助理解,并不代表底层实际原理

  • 首先,抛开起点和终点,通过rx和ry,我们可以确定一个椭圆
  • 接着,我们确定其旋转角度x-axis-rotation,使其x轴顺时针旋转,假设为30°,可获得下图

  • 接着,我们需要让它经过起点和终点,通过移动椭圆,使其能够经过起点和终点,可能的情况会有4种,如下


如上,有两种情况:

第一种,椭圆较大,可经过起点终点,此时可能的弧线有四条,如上图左侧

第二种,椭圆较小,无法经过起点终点,绘制时会等比放大,使其达到刚好能经过起点终点的状态,可能的弧线依旧会有四条,但有两条重叠(相同),如上图右侧

  • 然后,我们需要通过第4、5两个参数确定一条唯一的弧

第4个参数确定选择长的还是短的

第5个参数确定选择顺时针绘制还是逆时针绘制的(从起点到终点),在上图的体现为上下

  • 最后,我们即可确定唯一的一条弧

M100 150 A55 100 30 1 1 200 150为可能弧1
M100 150 A55 100 30 0 1 200 150为可能弧2
M100 150 A55 100 30 0 0 200 150为可能弧3
M100 150 A55 100 30 1 0 200 150为可能弧4

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据Flink(一百二十三):五分钟上手Flink MySQL连接器

文章目录 五分钟上手Flink MySQL连接器 一、创建数据库表 二、​​​​​​创建session集群 三、源表查询 四、​​​​​窗口计算 五、​​​​​​结果数据写回数据库 五分钟上手Flink MySQL连接器 MySQL Connector可以将本地或远程的MySQL数据库连接到Flink中&#x…

16【Protues51单片机仿真】智能洗衣机倒计时系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 用直流电机转动模拟洗衣机。要求 有弱洗、普通洗、强洗三种模式&#xff0c;可通过按键选择。可以设置洗衣时长&#xff0c;通关按键选择15、30、45、60、90分钟。时间到蜂鸣器报警提示。LCD 显示…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架&#xff0c;致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石&#xff1b; 利用 async 函数 丢弃回调函数&#xff0c;并增强错误处理&#xff0c;koa 没有任何预置的中间件&#xff0c;可快速…

大数据Hive组件安装

组件版本 组件版本Hadoop3.3.0JDK1.8.0_241Mysql5.7.25Hive3.1.2 Hadoop集群服务分布 Node1Node2Node3NameNode DataNode DataNodeDataNode NodeManager NodeManagerResourceManagerSecondaryNameNode 安装前请确定Hadoop集群服务全部启动&#xff0c;不然后续测试时会报…

Python面向对象编程:类和对象①

文章目录 一、什么是面向对象编程1.1 面向对象编程的基本概念1.2 Python中的类和对象 二、定义类和创建对象2.1 定义类2.2 创建对象2.3 __init__方法2.4 self参数 三、类的属性和方法3.1 类的属性3.1.1 实例属性3.1.2 类属性 3.2 类的方法3.2.1 实例方法3.2.2 类方法3.2.3 静态…

解锁HTML的力量:从基础标签到完整网页构建

在整个学习编程技能的过程中&#xff0c;我们会始终基于编程的本质&#xff1a;输入-》函数处理-》输出 和编程语言的本质&#xff1a;语法糖、变量、基础函数&#xff0c;去理解各种编程技术和学习相关的技能。 今天开始学习编程的第一个技能点&#xff1a;HTML。正如编程的本…

2024 Snap 新款ar眼镜介绍

2024 snap 新款ar眼镜介绍 2024 Snap 新款ar眼镜介绍 助力快速掌握数据集的信息和使用方式。

EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析

随着信息技术的飞速发展和数字化时代的到来&#xff0c;电厂作为能源供应的重要枢纽&#xff0c;其安全性和管理效率成为社会各界关注的焦点。为了满足电厂对高效、智能、可靠视频监控系统的需求&#xff0c;基于EasyCVR平台建设的电厂视频监控系统应运而生。 一、系统构成 基…

排序个人总结

插入排序 思路&#xff1b;定义 i 和 j&#xff0c;默认 i 前面的数都是有序的&#xff0c;j 定义为 i 的前一个数&#xff0c;把 i 的值给tmp&#xff0c;tmp与j对应的值进行比较&#xff0c;如果arr[j] > tmp,将arr[j] (大的数前移一位)&#xff0c;如下图 代码&#xf…

String类常用的方法

源代码&#xff1a; 输出结果&#xff1a;

从HarmonyOS Next导出手机照片

1&#xff09;打开DevEco Studio开发工具 2&#xff09;插入USB数据线&#xff0c;连接手机 3&#xff09;在DevEco Studio开发工具&#xff0c;通过View -> Tool Windows -> Device File Browser打开管理工具 4&#xff09;选择storage -> cloud -> 100->fi…

MySQL InnoDB MVCC读写逻辑分析与调测

目标 1、构建MVCC读写场景 2、gdb调试MVCC过程&#xff0c;输出流程图&#xff08;函数级别调用过程&#xff09; 前提 准备1 打开服务端 查询mysqld进程号 线程树 打开客户端&#xff0c;想创建几个事务号就打开几个客户端 准备2 数据库mvcc&#xff0c;两个表test和stu…

韩媒专访CertiK首席商务官:持续关注韩国市场,致力于解决Web3安全及合规问题

作为Web3.0头部安全公司&#xff0c;CertiK在KBW期间联合CertiK Ventures举办的活动引起了业界的广泛关注。CertiK一直以来与韩国地方政府保持着紧密合作关系&#xff0c;在合规领域提供强有力的支持。而近期重磅升级的CertiK Ventures可以更好地支持韩国本地的区块链项目。上述…

Nmap网络扫描器基础功能介绍

怎么快速知道网络中存在哪些设备呢&#xff1f;我们可以借用扫描工具Nmap来实现这个功能。 下载 Windows系统可以前往Nmap官网下载安装包。 Linux使用对应的包管理器可以直接安装&#xff0c;命令如下 # Debian/Ubuntu apt install nmap# RedHat/Fedora yum install nmap …

数据在内存中的存储(下)

目录 前言一、浮点数在内存中的存储1.1 练习1.2 浮点数的存储1.2.1 浮点数存的过程1.2.2 浮点数取的过程 1.3 题目解析 总结 前言 前面一期我们主要说到整形在数据中的存储方式&#xff0c;这期我们来看看浮点数在内存中是如何存储的&#xff0c;话不多说&#xff0c;正文开始…

运行python程序

1 终端运行 1.1、直接在python解释器中书写代码 >>> print(法外狂徒) 法外狂徒 …

【数据结构初阶】排序算法(上)插入排序与选择排序

文章目录 1.排序概念及运用1. 1 概念1. 2 运用1.3 常见排序算法 2. 插入排序2. 1 直接插入排序2. 2 希尔排序2. 2. 1 希尔排序的时间复杂度 3. 选择排序3. 1 直接选择排序3. 2 堆排序3. 3 Top-K问题 1.排序概念及运用 1. 1 概念 排序&#xff1a;所谓排序&#xff0c;就是使一…

PySimpleGUI:简化 Python 中的 GUI 开发

作为一个算法工程师&#xff0c;避免不了需要标注数据&#xff08;当然还有其他需求&#xff09;&#xff0c;标注数据时还是需要一个很好的工具&#xff0c;此时需要你来写一个图形用户界面&#xff08;GUI&#xff09;&#xff0c;太难了&#xff5e; 然而&#xff0c;PySim…

Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)

目录 题目&#xff1a;**18.34 (游戏:八皇后问题) 代码示例 代码解析 输出结果 使用文件 题目&#xff1a;**18.34 (游戏:八皇后问题) 八皇后问题是要找到一个解决方案&#xff0c;将一个皇后棋子放到棋盘上的每行中&#xff0c;并且两个皇后棋子之间不能相互攻击。编写个…

B-树(不是B减树)原理剖析(1)

目录 B树的主要特性&#xff1a; B树的操作&#xff1a; B树的优点&#xff1a; 为什么要发明出B-树&#xff1f; B树的概念和原理剖析 原理图讲解(部分讲解在图中) 初始化结点&#xff1a; 处理数据数量计算(了解) 底层代码实现(加深理解) 前些日子我们学了AVl树&…