美文网首页
2018-10-22-SVG复杂路径的绘制

2018-10-22-SVG复杂路径的绘制

作者: EWL | 来源:发表于2018-10-30 15:38 被阅读0次

A/a 椭圆圆弧 (个人理解,使用相对定位更多一些,绝对定位对于定位精确点来说不太容易实现)

公司的logo中包含使用椭圆胡绘制圆的实践,大多使用了相对定位。

椭圆圆弧的参数

参数名 参数含义
rx ry 椭圆横向半径椭圆纵向半径
x-axis-rotation 绕x轴旋转角度,单位为角度数
large-arc-flag 1为大圆弧 0为小圆弧
sweep-flag 0为逆时针 1为顺时针
x y 圆弧的路径终点

在尝试过n多种方法之后,我发现a椭圆弧仅能通过两个圆弧拼接的方式去画圆,并不能直接通过一个a椭圆弧去画一个完整的圆出来,回顾它的名称才明白,a仅仅是一个弧,并非像是circle这样完整的闭合svg路径。

具体到图形上,表现如下图所示:


image.png

其中除了图表中给出的两个布尔标记位之外,剩余的参数都展示了出来。
我最初的猜想与总结是,其中绕x轴的旋转角度,是以横坐标顺时针为正值,逆时针为负值。并且经过起点与终点的椭圆有两个,如下图所示(对应了不同标记位):

image.png

实践

image.png
// 使用正圆,相对坐标,以及顺时针画出的圆弧
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svgWrap">
    <path d="M100 100 a100 100 0 0,1 100 100" stroke="#fff"/>
</svg>
image.png
// 使用正圆,绝对坐标,以及顺时针画出的圆弧
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svgWrap">
    <path d="M100 100 A100 100 0 0,1 100 100" stroke="#fff"/>
</svg>

下图中,我画了三组椭圆弧,分别对应旋转角为0 30 60,取弧段长度相反的,路径绘制方向相反的三组椭圆弧。非常明显的印证了上述猜想。

image.png
<path d="M100 100 a50 100 0 0,1 100 100 " stroke="#fff" fill="transparent"/>
    <path d="M100 100 a50 100 0 1,0 100 100 " stroke="#f00" fill="transparent"/>

    <path d="M100 100 a50 100 30 0,1 100 100 " stroke="#0f0" fill="transparent"/>
    <path d="M100 100 a50 100 30 1,0 100 100 " stroke="#00f" fill="transparent"/>

    <path d="M100 100 a50 100 60 0,1 100 100 " stroke="yellow" fill="transparent"/>
    <path d="M100 100 a50 100 60 1,0 100 100 " stroke="purple" fill="transparent"/>

结论:可以对比出椭圆弧相对与绝对坐标之间的差别主要体现在最后的终点定点上,且旋转角度以顺时针为正,这与日常使用的xy坐标正好相反。

贝塞尔曲线

在路径绘制中,共有四组贝塞尔曲线可供使用,二次贝塞尔、光滑二次贝塞尔、三次贝塞尔、光滑三次贝塞尔。

首先对于贝塞尔曲线进行一个回顾,一次贝塞尔曲线仅需要两个点,一个参数t即可完成绘制。

一阶贝塞尔曲线函数:

image.png

实际上也就是一个直线段的切割,根据t值的变化,切割的状态也会发生拜年话。


image.png

二阶贝塞尔曲线函数:

image.png
image.png

三阶贝塞尔曲线函数:

image.png image.png

上述内容对于贝塞尔函数做出了一个大致的罗列介绍,在svg中最多可以画到三次。
二次贝塞尔函数

image.png
<path d="M100 100 Q150 50 200 50" stroke="#fff"/>

    <circle cx="100" cy="100" r="2" fill="red"></circle>
    <circle cx="200" cy="50" r="2" fill="red"></circle>
    <circle cx="150" cy="50" r="2" fill="red"></circle>
    <path d="M100 100 L150 50 200 50" stroke="#0f0" stroke-width="1" fill="transparent"/>

三次贝塞尔函数

image.png
 <path d="M300 300 C350 250 450 250 500 300" stroke="#fff"/>
    <circle cx="300" cy="300" r="2" fill="red"></circle>
    <circle cx="350" cy="250" r="2" fill="red"></circle>
    <circle cx="450" cy="250" r="2" fill="red"></circle>
    <circle cx="500" cy="300" r="2" fill="red"></circle>
    <path d="M300 300 L350 250 450 250 500 300" stroke="#0f0" stroke-width="1" fill="transparent"/>

最后的一些总结和回顾,以及问题

path命令的作用是什么?
在我看来,path命令的作用是通过坐标点的方式进行更为精确的定点绘图,虽然已经有众多的svg标签,例如circle rect ellipse等等,但是都是相对局限的形状,通过path我们有了更为自由精确并且多样的绘图方式。

相关文章

  • 2018-10-22-SVG复杂路径的绘制

    A/a 椭圆圆弧 (个人理解,使用相对定位更多一些,绝对定位对于定位精确点来说不太容易实现) 公司的logo中包含...

  • 初识canvas(三)

    绘制路径 2D 绘制上下文支持很多在画布上绘制路径的方法。通过路径可以创造出复杂的形状和线条。要绘制路径,首先必须...

  • SVG路径中“d”属性的A指令用来绘制圆弧

    SVG中的路径数据,即path元素的 d 属性,有一系列的路径绘制指令,其中椭圆弧指令(A)最复杂,不算椭圆弧起始...

  • UIBezierPath

    一,绘制方法 椭圆 / 圆 绘制矩形 设置圆角 绘制圆弧 路径中增加一个已有路径 返回一个翻转已有路径的新路径 利...

  • CAGradientLayer CAShapeLayer

    CAGradientLayer 绘制渐变UIBezierPath 绘制图形路径CAShapeLayer 根据路径绘图

  • Quartz 2D绘制-绘制图片

    Quartz 2D绘制路径、文字里面记录了绘制路径和文字。今天记录的是绘制图片。 步骤 之前绘制是在view的dr...

  • UI进阶路径动画

    UIBezierPath绘制路径 搞一个和路径一样大的图层,绘制到屏幕上

  • Android Path详解

    Path 路径,可用于绘制直线、曲线构成几何路径,还可以用于根据路径绘制文字。 常用api 移动、连线、闭合、添加...

  • PS中6个矢量图标绘制设计的实用小技巧你知不知?

    PS是一个像素处理软件,可以做到和AI一样绘制各种复杂的矢量图形。有读者会问为什么不用AI,而要学习PS绘制路径,...

  • Android Path总结

    概述路径,可用于绘制直线,曲线构成几何路径,还可用于根据路径绘制文字 Path的常用Api有移动,连线,闭合,添加...

网友评论

      本文标题:2018-10-22-SVG复杂路径的绘制

      本文链接:https://www.haomeiwen.com/subject/urkgzftx.html