课程分为四个方面:

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

SVG Path高级教程的更多相关文章

  1. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  2. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  3. Siki_Unity_2-9_C#高级教程(未完)

    Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...

  4. Django 2.0.1 官方文档翻译: 高级教程:如何编写可重用的app (page 13)

    高级教程:如何编写可重用的app (page 13) 本节教程上接第七部分(Page 12).我们会把我们的 web-poll应用转换成一个独立的python包,你可以在新的项目中重用或者把它分享给其 ...

  5. SVG path d Attribute

    Scalable Vector Graphics (SVG) 1.1 (Second Edition) W3C Recommendation 16 August 2011 http://www.w3. ...

  6. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行

    前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...

  7. 【读书笔记】.Net并行编程高级教程--Parallel

    一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...

  8. 分享25个新鲜出炉的 Photoshop 高级教程

    网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...

  9. 展讯NAND Flash高级教程【转】

    转自:http://wenku.baidu.com/view/d236e6727fd5360cba1adb9e.html 展讯NAND Flash高级教程

随机推荐

  1. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  2. 杂项之python描述符协议

    杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...

  3. WPF - 属性系统 (2 of 4)

    属性更改回调 前一章的示例中,对各个参数的设置都非常容易理解.如果我们仅仅需要创建一个独立的依赖项属性,那么上面所提到的创建依赖项属性的基础知识足以满足需求.但是事情往往并非如此完美.在一个系统中,很 ...

  4. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  5. ABP教程-给项目添加SwaggerUI,生成动态webapi

    上一篇,我们是正式将ABP生成的代码项目,跑起来了,然后演示了下多租户的不同.那么这篇我们就来实现下SwaggerUI. Q:SwaggerUI是干什么的呢? A:他是一个能将我们的webapi,通过 ...

  6. Entity Framework 6 Recipes 2nd Edition(10-1)译->非Code Frist方式返回一个实体集合

    存储过程 存储过程一直存在于任何一种关系型数据库中,如微软的SQL Server.存储过程是包含在数据库中的一些代码,通常为数据执行一些操作,它能为数据密集型计算提高性能,也能执行一些为业务逻辑. 当 ...

  7. Spring的前期配置

    1创建一个java项目,鼠标单击项目右键新建一个名为lib的文件夹 2在lib文件夹中考入Spring需要的配置文件(俗称jar包) 3 按Shift选中这些jar右键添加至构建路径 4选中src目录 ...

  8. 【Win 10 应用开发】TCP通信过程

    基于TCP协议的通信,估计大伙儿都不陌生的,以前玩.net或玩C++的时候应该玩得很多吧.现在老周简单介绍一下在RT中如何用. TCP是基于连接的,所以,肯定有一方是监听者,通常称服务端或服务器,它负 ...

  9. SpingMVC 核心技术帮助文档

    声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...

  10. 3.C#WinForm基础累加器

    功能:实现累加计算. 知识点: bool int.TryParse(string s,out int result)(+1重载) 将数字的字符串形式转换为它的等效的32位有效的有符号整数,一个指示操作 ...