首页 > 其他分享 >SVG之path详解(一),全面解析椭圆弧命令A

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

时间:2024-08-08 22:05:12浏览次数:12  
标签:150 直线 SVG 路径 50 详解 path 100 绘制

简述

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

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

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

基本语法

<path
  d="path string"          <!-- 定义路径的路径数据 -->
  fill="fill-color"        <!-- 路径的填充颜色 -->
  stroke="stroke-color"    <!-- 路径的描边颜色 -->
  stroke-width="width"     <!-- 路径的描边宽度 -->
/>

属性解析:

  • d 属性定义了路径的路径数据,即路径命令序列。路径数据由一系列的路径命令组成,每个路径命令以字母开头,后面跟随一组数字参数。常用的路径命令包括:M(移动)、L(直线)、H(水平线)、V(垂直线)、C(三次贝塞尔曲线)、S(光滑三次贝塞尔曲线)、Q(二次贝塞尔曲线)、T(光滑二次贝塞尔曲线)、A(椭圆弧)、Z(闭合路径)等

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

  • fill 属性定义了路径的填充颜色

  • stroke 属性定义了路径的描边颜色

  • stroke-width 属性定义了路径的描边宽度

d属性详解

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

命令数据主要由命令及命令参数组成,多个命令参数之间可用空格或逗号(英文逗号)隔开

M

该命令用于移动画笔位置

M | m后可跟2个参数:

  1. x:横坐标位置
  2. y:纵坐标位置

例:

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

L

该命令用于绘制一条直线

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

L | l后可跟2个参数:

  1. x:直线结束点横坐标位置
  2. 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个参数:

  1. rx:椭圆的x轴半径(即水平半径)

  2. ry:椭圆的y轴半径(即垂直半径)

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

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

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

    旋转

  4. large-arc-flag:大弧标志,0表示绘制小弧,1表示绘制大弧。弧线有两个不同的弧度(小于180度的弧和大于180度的弧),该标志用于指定使用哪种弧度,简单理解就是短弧和长弧

  5. sweep-flag:扫掠标志,0表示弧线从起点到终点沿逆时针方向绘制,1表示沿顺时针方向绘制

  6. x: 终点的x坐标

  7. 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轴为50y轴为100,绕x轴顺时针方向旋转角度为,取长弧,沿逆时针画的一段椭圆弧


绘制流程

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

  • 首先,抛开起点终点,通过rxry,我们可以确定一个椭圆

  • 接着,我们确定其旋转角度x-axis-rotation,使其x轴顺时针旋转,假设为30°,可获得下图

    椭圆

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

    可能的弧

    如上,有两种情况

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

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

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

    • 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

名词解读

绝对: 指数值针对坐标系绝对

相对: 指数值针对上一点相对

标签:150,直线,SVG,路径,50,详解,path,100,绘制
From: https://www.cnblogs.com/skmcj/p/18349830

相关文章

  • Linux 【关于 /proc目录详解】
    proc目录:ProcessInformationPseudo-filesystem:进程信息伪文件系统/proc目录并不包含实际的文件,而是提供了一个动态的视图,用于显示系统和进程相关的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。其目的:用于管理和监控系统状态和进程信息/proc文件本身的大小显示......
  • Linux 【关于内核参数详解和优化】
    Linux内核参数是操作系统中用于调整和优化系统性能和行为的关键设置。Linux内核参数可以通过以下几种方式进行查看和修改:/proc/sys目录:大多数内核参数都可以在/proc/sys目录下找到,使用sysctl命令查看和设置这些参数。sysctl.conf文件:此文件通常位于/etc目录中,可以在系统启动......
  • 知攻善防Web1应急靶机笔记--详解
    知攻善防Web1应急靶机笔记概述这是一台知攻善防实验室的应急响应靶机,方便大家练习一下应急响应的流程和操作。靶机的前景概述:前景需要:小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件:1.攻击者的shell密......
  • JavaWeb-01(Java进阶内容详解,Html、CSS、JS)
    一、前端技术结构分析网页的结构(HTML)、表现(CSS)、行为(JS)1.HTML定义界面整体结构2.CSS定义页面样式3.JS实现动态效果二、HTML2.1安装VSCode及前端开发插件Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodeCodeSpellChecker检查单......
  • 【探索数据结构与算法】——深入了解双向链表(图文详解)
    目录一、双向链表的基本概念 ​​​二、双向链表的结构三、双向链表的基本操作实现方法 1.双向链表的初始化2.双向链表的头插3.双向链表的尾插6.查找节点7.在指定位置之前插入节点8.删除指定位置节点9.打印链表数据  10.双向链表销毁四、完整代码实现 LIst.h......
  • 1392、STM32单片机温湿度检测阈值报警4个继电器加4个负载风扇等无线蓝牙远程(程序+原
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选......
  • Linux磁盘管理详解(实操、解决磁盘疑难杂症)
    本文详细介绍了Linux磁盘管理、讲解了磁盘操作,如查看与添加磁盘、分区(使用fdisk和parted)、格式化、挂载和卸载、挂载U盘。最后,重点讨论了LVM逻辑卷的优势和操作,如物理卷、卷组和逻辑卷的创建、扩容与缩容。目录        磁盘查看和分区       1、du查......
  • ADB安装apk包到所有andriod设备步骤详解
    背景:使用adb工具,用数据线连接电脑与机器,电脑安装apk包后,使用命令直接安装到机器上,省去其他下载等繁琐流程一、电脑安装adb工具1、下载adb压缩包地址:--Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip2、配置环境变量a.右击此电脑......
  • paxos算法详解
    1分布式一致性:共识算法对于一个分布式系统来说,保障集群中所有节点的数据完全相同(即一致性)是很重要的,随着多节点的引入,这影响的是整个分布式系统对外服务的表象一致性。也就是说,一个分布式系统想要做到完全的一致性,需要对外表现为顺序一致性,即各个节点上的操作顺序都一致。而在......
  • Kotlin 循环与函数详解:高效编程指南
    Kotlin循环当您处理数组时,经常需要遍历所有元素。要遍历数组元素,请使用for循环和in操作符:示例输出cars数组中的所有元素:valcars=arrayOf("Volvo","BMW","Ford","Mazda")for(xincars){println(x)}您可以遍历各种类型的数组。在上面的示例中,我们使用了......