SVG Path高级教程

简介:

课程分为四个方面:

1. Path概述

2. 移动和直线命令

3. 弧线命令

4. 贝塞尔曲线命令

Path概述

<path> 标签用来定义路径,Path字符串是由命令及其参数组组成的字符串,是非常强大的绘图工具。

例如:

<path  d="M0,0L10,20C30-10,40,20,100,100"  stroke="red">

命令汇总

命令 含义
M/m (x,y) 移动当前位置
L/l (x,y) 从当前位置绘制线段到指定位置
H/h (x) 从当前位置绘制水平线到达指定的 x 坐标
V/v (y) 从当前位置绘制竖直线到达指定的 y 坐标
Z/z  闭合当前路径
C/c (x1,y1,x2,y2,x,y) 从当前位置绘制三次贝塞尔曲线到指定位置
S/s (x2,y2,x,y) 从当前位置光滑绘制三次贝塞尔曲线到指定位置
Q/q (x1,y1,x,y) 从当前位置绘制二次贝塞尔曲线到指定位置
T/t (x,y) 从当前位置光滑绘制二次贝塞尔曲线到指定位置
A/a (rx,ry,xr,laf,sf,x,y) 从当前位置绘制弧线到指定位置

命令基本规律

1. 参数之间可以用空格或逗号隔开,如果下一个数值是负数,才可以省略。

2. 区分大小写: 大写表示坐标参数为绝对位置,小写则为相对位置 。

3. 最后的参数表示最终要到达的位置 。

4. 上一个命令结束的位置就是下一个命令开始的位置 。

5. 命令可以重复参数表示重复执行同一条命令。

移动和直线命令

M  (x,  y): 移动画笔,后面如果有重复参数,会当做是  L  命令处理 。

L  (x,  y):  绘制直线到指定位置 。

H  (x): 绘制水平线到指定的  x  位置 。

V  (y): 绘制竖直线到指定的  y  位置 。

m、l、h、v  使用相对位置绘制。

PS:绝对位置是相对原始坐标系来讲的,相对位置是相对于上一个命名的结束位置

例子:

<path d="M40,40L100,100H200V300" stroke="red" fill="none"/>
<path d="M40,40l60,60h100v200" stroke="red" fill="none"/>

这两条路径的效果是一样的:

PS:这里看到1width的斜线,也就是最前面那一段,它的宽度看起来要细一些。

弧线命令

弧线命令是用A  (rx,  ry,  xr,  laf,  sf,  x,  y) 绘制,这里弧线也就是某一个圆弧的一段。

参数

参数 描述 取值
rx (radius-x)弧线所在椭圆的  x  半轴长   
ry (radius-y)弧线所在椭圆的  y  半轴长   
xr  (xAxis-rotation)弧线所在椭圆的长轴角度   
laf (large-arc-flag)是否选择弧长较长的那一段弧  1 为大弧
0 为小弧
sf (sweep-flag)是否选择逆时针方向的那一段弧  1 为顺时针
0 为逆时针
x,  y 弧的终点位置   

laf、sf取值效果:

例子:

<path d="M40,40A100 50 0 0 0 100 100" stroke="red" fill="none"/>

效果:

贝塞尔曲线 

在大学时候,接触贝塞尔曲线是在图形学的课程,不过由于比较久远,数学的概念记不清了。(哈哈哈哈)

贝塞尔曲线概念

Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。

数学上的计算公式,B(t)为t时间下点的坐标,P0为起点, Pn为终点,Pi为控制点。

一次贝塞尔曲线(线段):

二次贝塞尔曲线(抛物线):

三次贝塞尔曲线:

高次贝塞尔曲线(通项公式):

PS:计算公式可以让我们直接算出一条贝塞尔曲线。

网上有很多资料介绍贝塞尔曲线是通过下面动图的,当然是基于上面的数学公式,例如下面的三次贝塞尔曲线。

四条贝塞尔曲线命令

SVG中,只能绘制二次和三次贝塞尔曲线。

C/c (x1,y1,x2,y2,x,y)
从当前位置绘制三次贝塞尔曲线到指定位置
x1,y1,x2,y2是控制点
x,y是终止点
Q/q (x1,y1,x,y)
从当前位置绘制二次贝塞尔曲线到指定位置
x1,y1是控制点
x,y是终止点

例子:

<path d="M200,400Q300 250 400 400" stroke="red" fill="none"/>
<path d="M200,200C250 100 400 100 400 200" stroke="red" fill="none"/>

效果:

T和S命令中的控制点是来自上一段曲线控制点的镜像位置作为一个控制点。

T: 上一段曲线的控制点关于当前曲线起始点的镜像位置形成当前曲线的控制点。 (这里说的都是二次贝塞尔曲线)

S: 上一段曲线的第二个控制点关于当前曲线起始点的镜像位置形成当前曲线的第一个控制点。

好处:

1. 可以简化写法,少写一个点。

2. 两条曲线形成的曲线是光滑曲线。(当曲线上每一点处都具有切线,且切线随切点的移动而连续转动,这样的曲线成为光滑曲线)

例子:

<path d="M100,200C100,100 250,100 250,200S400,300 400,200" stroke="red" fill="none"/>
<path d="M100,400Q150,300 250,400 T400,400" stroke="red" fill="none"/> 

效果:

 

参考视频

1. SVG课程(慕课网)

参考文献

1. http://www.cnblogs.com/jay-dong/archive/2012/09/26/2704188.html

2. http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/

 

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/5982900.html



本文转自 海角在眼前 博客园博客,原文链接:http://www.cnblogs.com/lovesong/p/5982900.html   ,如需转载请自行联系原作者

相关文章
|
JavaScript
Threejs实现标签,自定义样式显示标签
Threejs实现标签,自定义样式显示标签
2136 0
Threejs实现标签,自定义样式显示标签
|
算法 前端开发 JavaScript
JS - 前端生成 UUID 四种方法
JS - 前端生成 UUID 四种方法
6993 0
Element-ui 表格(Table)组件中鼠标悬停(hover)样式修改
Element-ui 表格(Table)组件中鼠标悬停(hover)样式修改
4099 0
|
SQL 自然语言处理 数据库
DAIL-SQL: 发掘LLM的NL2SQL能力
最近,DAIL-SQL在魔搭创空间上线,并在NL2SQL任务上取得了新的SOTA。DAIL-SQL可以更好地利用LLM的NL2SQL能力,本文对其进行详细解读。
|
安全 Linux 网络安全
CentOS 8下SSH连接超时与“无法加载主机密钥”错误的排查与修复
在CentOS 8系统中,宝塔面板提示“出错了,面板运行时发生错误”,导致插件无法正常显示。同时,SSH连接超时,修复面板功能失效。通过VNC连接排查,发现SSH服务安装和配置问题频发,最终通过重装SSH、调整权限并重新生成主机密钥文件解决问题,成功恢复SSH连接。
1015 16
|
自然语言处理 Java 测试技术
通义灵码个人版体验
作为一名Java开发工程师,我利用通义灵码个人版高效地熟悉新项目、实现新需求,效率提升超过30%。从项目导入、代码理解、新需求实现到代码优化与提交,通义灵码提供了全面的支持,显著加速了开发流程。
|
数据采集 运维 数据可视化
阿里云多模态数据信息提取解决方案深度评测与优化建议
本文基于多模态数据信息提取方案的部署体验,深入剖析其在操作界面、部署文档、函数模板、官方示例及实用性与移植性等方面的表现,并提出针对性改进建议。优化建议涵盖模型性能对比、实时校验、故障排查手册、代码注释扩充、行业专属示例集等,旨在提升方案的易用性、功能性和通用性,助力企业在复杂数据处理中高效挖掘价值信息,推动数字化转型。
362 9
|
安全 关系型数据库 Linux
Web安全-等保测评
Web安全-等保测评
581 3
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression&lt;Func&lt;T, bool&gt;&gt;`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为&quot;John&quot;的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
815 1
|
负载均衡 应用服务中间件 网络安全
NGINX配置详解
NGINX配置详解