SVG路径PATH
SVG路径PATH
PATH用到的指令:
M----(X Y):移动到
Z----(none):关闭路径
L----(X Y):画线到
H----(X):水平线到
V----(Y):垂直线到
C----(X1 Y1 X2 Y2 X Y):三次贝塞尔曲线
S----(X1Y1 X Y):光滑三次贝塞尔曲线到
Q----(X1 Y1 X Y):二次贝塞尔曲线到
T----(X Y):光滑二次贝塞尔曲线到
A----(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+:椭圆弧
R----(X1 Y1(X Y)):Catmull-Rom曲线
注释:以上所有命令均允许小写字母。大写表示绝对定位,小写表示相对定位。
-----------------------------------------------------------------------------------------------
先创建一个AVG画布
定义样式:
<style>
.svgStyle{
border: solid 1px #000000;
margin: 0 auto;
display: block
}
.pathStyle{
stroke:#000000;
stroke-width:5px;
fill:none
}
</style>
创建SVG:
<svg width="1200px" height="600px" version="1.1" xmlns="http://www.w3.org/2000/svg" class="svgStyle">
<path d="M 0 300 " class="pathStyle" />
</svg>
M:开始画线的起点坐标。
-------------------------------------------------------------------------------------------------------------------------------
L----(X Y)+:画线到:
<svg width="1200px" height="600px" version="1.1" xmlns="http://www.w3.org/2000/svg" class="svgStyle">
<path d="M 10 300 L 100 300 L 50 400" class="pathStyle" />
</svg>
即:从坐标(0,300)开始画线到坐标(100,300)再画线到坐标(50,400)
---------------------------------------------------------------------------------------------------------------------
Z----(none):关闭路径:
<path d="M 10 300 L 100 300 L 50 400 Z" class="pathStyle" />
即:闭合路径--自动从最后一个点和起点之间连一条线
--------------------------------------------------------------------------------------------------------
H----(X)+:水平线到
<path d="M 10 300 H 400" class="pathStyle" />
即:根据前一个一点,水平方向画一条线,只要一个X坐标。
----------------------------------------------------------------------------------------------------------------
V----(Y)+:垂直线到
与H同理:垂直画线
-----------------------------------------------------------------------------------------------------------------
C----(X1 Y1 X2 Y2 X Y)+:三次贝塞尔曲线:
<path d="M 10 300 C 100 200 200 400 400 300 C 500 100 550 500 600 300" class="pathStyle" />
啊吖!红线画得实在太丧心病狂。。
总之实际应用的时候,我们的目的图形肯定是由多个直线或者曲线组成的,而C的两个坐标中,第一个坐标就是对相对当前线段的起点进行弯曲,第二个坐标则是相对当前线段的末尾点进行弯曲。
---------------------------------------------------------------------------------------------------------------------
S----(X1 Y1 X Y)+:光滑三次贝塞尔曲线到
单独使用S:
<path d="M 0 300 S 200 500 400 300 S 600 500 800 300" class="pathStyle" />
跟M结合:<path d="M 10 300 C 100 200 200 400 400 300 S 600 500 1000 300" class="pathStyle" />
(S属于三次贝塞尔曲线,所以跟他配合使用的也要用三次贝塞尔曲线,如M)
S只要一个控制点,这个控制点会控制当前线的前后点进行平滑,类似于两个C的两个点合在一起了。
当S和其它指令结合的时候,他会自动将当前的线段和上一线段进行平滑。就好像如图所示自动加一条控制线---绿色的线
就是好是使用钢笔工具连接描点的时候,没有转换点。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Q----(X1 Y1 X Y)+:二次贝塞尔曲线到
<path d="M 0 300 Q 200 500 400 300 Q 600 500 800 300" class="pathStyle" />
如图。跟S很像,一个控制点当两个用,跟S的区别在于两线段之间不会平滑过渡。
--------------------------------------------------------------------------------------------------------------------------------------------------
T----(X Y):光滑二次贝塞尔曲线到
<path d="M 0 300 Q 300 0 600 300 T 1000 50" class="pathStyle" />
功能跟S是一样的,T也是将两个线段自动进行平滑
(T是二次贝塞尔曲线,所以跟它配合使用的也要用二次贝塞曲线,如Q)
------------------------------------------------------------------------------------------------------------------------------------------
A----(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+:椭圆弧
rx:椭圆水平方向的半径
ry:椭圆垂直方向的半径
x-axis-rotation:X轴的旋转角度,即椭圆绕起始点顺时针旋转的角度
large-arc-flag:此参数有两个值,分别为0和1。0代表小角度弧线,1代表大角度弧线;
sweep-flag:此参数也有两个值,分别为0和1。1代表从起点到终点弧线绕中心顺时针方向,0代表逆时针方向、1代表顺时针方向;
x,y:弧线的终端坐标。
<path d="M 500 300 A 100 200 0 0 1 700 300"></path>
先画个半个椭圆:
x-axis-rotation和large-arc-flag:这里旋转45度
<path d="M 500 300 A 100 200 45 0 1 700 300"></path>
蓝色线是我标上去的,为了好理解
--------------------------------------------------------------------------------------------------------------------------------------
R----(X1 Y1(X Y)):Catmull-Rom曲线 还不会 暂且搁置
---------------------------------------------------------------------------------------------------------------------------------------
总结:
(1)路径的坐标与坐标之间可以用空格分隔,也可以用逗号分隔,如 <path d="M 0 0 L 100 0 L50 100 Z M300,300 L400,300 L350,400 Z">
(2)命令使用大写,意味着点是相对两个SVG画布进行绝对定位的。如果命令使用的是小写,这意味着此命令定义的坐标和前面的当前位置是相对的
(3)C跟S配合使用,Q和T配合使用。
(4)S和T会将两个线段的连接自动平滑
参考:http://weick.iteye.com/blog/677986
SVG路径PATH的更多相关文章
- 深度掌握SVG路径path的贝塞尔曲线指令
一.数字.公式.函数.变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是完 ...
- SVG 路径(path)
本文转自:https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths <path>元素是SVG基本形状中最强大的一个,它 ...
- SVG路径path的贝塞尔曲线指令
深度好文分享: http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/ ...
- SVG路径
前面的话 本文将详细介绍SVG路径 path字符串 路径(path)是一个非常强大的绘图工具,可以用path元素绘制矩形(直角矩形或者圆角矩形).圆形.椭圆.折线形.多边形,以及一些其他的形状,例如贝 ...
- SVG 学习<八> SVG的路径——path(2)贝塞尔曲线命令、光滑贝塞尔曲线命令
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- SVG 学习<七> SVG的路径——path(1)直线命令、弧线命令
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- SVG的path的使用
SVG的path的使用: 参考:http://justcoding.iteye.com/blog/2226354 <%@ page language="java" conte ...
- Xamarin版的C# SVG路径解析器
原文:Xamarin版的C# SVG路径解析器 Xamarin版的C# SVG路径解析器,对SVG的Path路径进行解析,其中包括: 主程序SvgPathParser.cs, 相关接口定义:ISour ...
- SVG路径动画解密
原文:SVG路径动画解密 原文链接:http://www.gbtags.com/gb/share/5581.htm SVG路径动画效果现在貌似越来越多网站都使用了,给我的感觉就像是一段时间的流行而已, ...
随机推荐
- [PHP] swoole在daemonize模式下,chdir失效问题
swoole version: 1.9.6 其实跟swoole的版本无关,因为原代码体系,fpm模式下,在启动的时候,是使用 chdir 函数改变了当前目录的,而其它代码在做类的自动加载的时候,都是写 ...
- POJ 2154 color (polya + 欧拉优化)
Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). You ...
- sitecore 数字化营销-path funnel
路径分析器是一个应用程序,允许您查看联系人在浏览网站时所采用的各种路径.您可以查看联系人在转换目标并与广告系列互动时所采用的路径,让您深入了解哪些路径为每次转化提供最佳参与价值,以及哪些路径效率较低且 ...
- 关于ajax返回数据处理
查看jquery文档,我们知道jquery有很多种Ajax调用方法,下面结合springmvc返回的数据,假设返回的是data ='{"label":"1",& ...
- 【Spark-core学习之一】 Spark初识
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- Flask最强攻略 - 跟DragonFire学Flask - 第十六篇 Flask-Migrate
终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,有的同学就提过类似的问题,Flask支持 makemigration / migrate 吗? 答案在这里该诉你, ...
- Hbase伪分布式安装
前面的文章已经讲过hadoop伪分布式安装,这里直接介绍hbase伪分布式安装. 1. 下载hbase 版本hbase 1.2.6 2. 解压hbase 3. 修改hbase-env.sh 新增如下内 ...
- Flutter 控件之 Routes 和 Navigator. [PopupRoute]
一个 App 通常会有多个界面,每个界面实现不同的功能,并在多个界面之间跳转.在 Flutter 中多个界面的跳转是通过 Navigator 来实现的. 在 Flutter 中定义了一个 Overla ...
- php 把一个数组分成几个数组
<?php /* * * 把一个数组分成几个数组 * $arr 数组 * $num 获取的数量 * */ function sliceArr($arr, $num) { //数组的个数 $lis ...
- Bootstrap3基础 table-bordered/hover 表格加外边框和鼠标悬停对应行的背景色加深
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...