SVG路径PATH

在使用之前建议下个PS或者FLASH玩玩里面的钢笔工具(FLASH里的钢笔工具比PS里的好用)

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的更多相关文章

  1. 深度掌握SVG路径path的贝塞尔曲线指令

    一.数字.公式.函数.变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是完 ...

  2. SVG 路径(path)

    本文转自:https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths <path>元素是SVG基本形状中最强大的一个,它 ...

  3. SVG路径path的贝塞尔曲线指令

    深度好文分享: http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/ ...

  4. SVG路径

    前面的话 本文将详细介绍SVG路径 path字符串 路径(path)是一个非常强大的绘图工具,可以用path元素绘制矩形(直角矩形或者圆角矩形).圆形.椭圆.折线形.多边形,以及一些其他的形状,例如贝 ...

  5. SVG 学习<八> SVG的路径——path(2)贝塞尔曲线命令、光滑贝塞尔曲线命令

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  6. SVG 学习<七> SVG的路径——path(1)直线命令、弧线命令

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  7. SVG的path的使用

    SVG的path的使用: 参考:http://justcoding.iteye.com/blog/2226354 <%@ page language="java" conte ...

  8. Xamarin版的C# SVG路径解析器

    原文:Xamarin版的C# SVG路径解析器 Xamarin版的C# SVG路径解析器,对SVG的Path路径进行解析,其中包括: 主程序SvgPathParser.cs, 相关接口定义:ISour ...

  9. SVG路径动画解密

    原文:SVG路径动画解密 原文链接:http://www.gbtags.com/gb/share/5581.htm SVG路径动画效果现在貌似越来越多网站都使用了,给我的感觉就像是一段时间的流行而已, ...

随机推荐

  1. Oracle表空间迁移Move Tablespace

    move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效.(LOB类型例外) move分为: *普通表move *分区表move *LONG,LOB大字段类型move来进行测试和说明. ...

  2. vue运行时 eslint 报“import/first” WARN deprecated browserslist 问题解决

    vue运行时 eslint 报“import/first”  WARN deprecated browserslist 问题解决 这个信息的意思是导入文件顺序不对,绝对导入应该放在相对导入前面.将绝对 ...

  3. bind 笔记

    BIND 的安装和配置: dns 服务,程序包名为bind ,程序名称为named 只需要安装 bind ,bind-libs ,bind-utils 生产环境全部安装 bind 服务脚本 :/etc ...

  4. JavaScript 声明全局变量和局部变量

    JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量 ...

  5. T-net 【贪心】

    问题 H: T-net 时间限制: 1 Sec  内存限制: 128 MB 提交: 302  解决: 14 [提交] [状态] [命题人:admin] 题目描述 T-net which is a ne ...

  6. HDU 5333 Undirected Graph(动态树)

    题意 给定一棵 \(n\) 个节点, \(m\) 条边的无向图,每个点有点权,有 \(q\) 个询问,每次询问若删去存在一个节点权值在 \([L,R]\) 范围外的边,剩下的图构成了多少个连通块(询问 ...

  7. [BOZJ2721]樱花

    题目求\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\)已知n, x和y的正整数解的个数 设z=\(n!\) \(\frac{1}{x}+\frac{1}{y}=\fra ...

  8. 【Core Swagger】.NET Core中使用swagger

    一.入门 https://www.nuget.org/packages/Swashbuckle.AspNetCore.SwaggerGen/ 1.添加核心NUGET包 Swashbuckle.AspN ...

  9. 文件编码检测.ZC一些资料(包含java的)

    1.IMultiLanguage3 或者 IMultiLanguage2 1.1.怎么判断XML 的编码格式(UTF-8或GB2312等)-CSDN论坛.html(https://bbs.csdn.n ...

  10. echarts的axisLabel的文字内容过长的解决办法

    通过查找资料学习,我总结了四种解决的办法,不一定是最好的,但是希望能够帮助到需要的童鞋,同时如果大家有什么更好的方法欢迎指导. 方法一:这种方法就是将文本内容转换为字符串数组,然后再按需求换行,需要每 ...