`
天梯梦
  • 浏览: 13741005 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)

 
阅读更多

维基百科:贝塞尔曲线

 

以二次贝塞尔曲线的公式为例:

二次贝塞尔曲线公式

 

js函数:

//p0、p1、p2三个点,其中p0为起点,p2为终点,p1为控制点
//它们的坐标用数组表示[x,y]
//t的范围是0-1
function qBerzier(p0,p1,p2,t){
    var x = (1 - t) * (1 - t) * p0[0] + 2 * t * (1 - t) * p1[0] + t * t * p2[0];
    var y = (1 - t) * (1 - t) * p0[1] + 2 * t * (1 - t) * p1[1] + t * t * p2[1];
    return [x,y];
}

 

通过函数,可以用L方法绘制贝塞尔曲线,但是这种方法是用直线将离散的点连接起来,只是因为点的距离很近,所以看上去是曲线,不够完美。所以绘制贝塞尔曲线,一般还是用path里的曲线命令比较好。

 

path路径绘制中,绘制贝塞尔曲线的命令包括:

Q 二次贝赛尔曲线 x1,y1 x,y

T 平滑二次贝塞尔曲线 x,y

C 曲线(curveto) x1,y1 x2,y2 x,y

S 平滑曲线 x2,y2 x,y

其中Q和T可以在一起使用,C和S可以在一起用。

 

Q 二次贝塞尔曲线

用法:M x0,y0 Q x1,y1 x2,y2

Snip20150708_4

通过M定义(x0,y0)为起点,用Q定义(x1,y1)为控制点,(x2,y2)为终点,构成一条二次贝塞尔曲线。 Q方法非常简单直观。

 

T 二次贝塞尔曲线平滑延伸

用法:M x0,y0 Q x1,y1 x2,y2 T x4,y4

Snip20150708_5

T 命令是二次被赛尔曲线的平滑延伸命令,用Q定义了一段二次贝塞尔曲线后面,紧接着一个T命令,只需定义终点,就可以自动延伸出一条平滑的曲线。 在这段曲线中,(x3,y3)没有手工定义,这里使用的T方法,只定义一个终点,起点是上一段曲线的终点,控制点则是上一段曲线的控制点的对称点(相对于 上一段曲线的终点)。 在这里,(x3,y3)是(x1,y1)的对称点(相对于(x2,y2)对称)。

 

C 三次贝塞尔曲线

用法:M x0,y0 C x1,y1 x2,y2 x3,y3

Snip20150708_6

C方法定义的是三次贝塞尔曲线,这里只是多了一个控制点,很好理解

 

S 三次贝塞尔曲线平滑延伸

用法:M x0,y0 C x1,y1 x2,y2 x3,y3 S x5,y5 x6,y6

Snip20150708_7

三次贝塞尔也有一个平滑延伸的命令,需要定义一个控制点和一个终点,命令会再自动生成一个控制点,从而形成一条延伸出来的三次贝赛尔曲线。

 

原文:http://xbingoz.com/194.html

转自:SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)

 

分享到:
评论

相关推荐

    SVG实现拖动贝塞尔曲线做成了Photoshop钢笔工具效果

    在SVG中,贝塞尔曲线是创建平滑路径的基础,它们通过控制点来定义曲线的形状。 首先,我们需要理解SVG中的贝塞尔曲线。在SVG中,贝塞尔曲线分为两种类型:线性贝塞尔曲线(直线)和三次贝塞尔曲线(曲线)。三次...

    QT绘制贝塞尔曲线及控制点

    贝塞尔曲线是计算机图形学中常用的数学模型,常用于设计平滑的曲线路径,如在UI设计、动画制作、3D建模等领域。 贝塞尔曲线的基本概念源自数学,它由一系列控制点定义。一条一阶贝塞尔曲线实际上就是一个线段,二阶...

    HTML实现贝塞尔曲线

    在JavaScript中,我们可以使用`document.createElementNS()`方法创建SVG元素,例如`<path>`元素,然后设置其`d`属性来定义贝塞尔曲线的路径数据。路径数据由一系列命令和参数组成,其中`C`(对于三次贝塞尔曲线)或`...

    安卓 签名 笔迹 平滑 贝塞尔曲线

    安卓 签名 笔迹 平滑 贝塞尔曲线 一种用于 模拟真实 手写笔迹签名 的算法, 要求能够保持原笔迹平滑,并有笔锋的效果. 在网上看了一些资料, 资料很多, 能够达到用于正式产品中的效果的一个都没有找到. 我看到最靠谱...

    C#带控制点的贝塞尔Bezier曲线算法(源码)

    C#中的贝塞尔曲线算法是通过GDI+(Graphics Device Interface Plus)库来实现的,它允许开发者创建复杂的矢量图形,包括SVG(Scalable Vector Graphics)图像。GDI+提供了丰富的绘图功能,可以方便地在Windows应用...

    Android贝塞尔曲线绘制心形

    贝塞尔曲线是一种在图形设计和计算机图形学中广泛使用的参数曲线,它允许开发者创建平滑、连续的曲线路径。 首先,让我们深入理解贝塞尔曲线的基本概念。贝塞尔曲线由控制点和起点、终点定义,通常分为线性、二次...

    二阶贝塞尔曲线Test

    在实际应用中,二阶贝塞尔曲线常用于创建平滑的过渡效果,比如在GUI设计中的按钮滑动、动画中的角色动作曲线以及3D建模中的平滑表面。此外,它也是SVG路径指令中的一部分,用于绘制复杂的图形。 在"二阶贝塞尔曲线...

    SVG支持用<path> 标签用来定义图形的路径。本文将详细介绍SVG Path语法结构,并附图及SVG path实例以更直观的方式让你掌握SVG路径的运用

    在SVG中,`&lt;path&gt;`元素是用于绘制各种形状和曲线的强大工具。本文将深入探讨SVG Path的语法结构,通过实例来帮助你理解并掌握如何使用`&lt;path&gt;`标签来定义图形的路径。 SVG Path的基本语法由一系列的命令和参数组成...

    h5画布+贝塞尔曲线实现刻字效果

    贝塞尔曲线是一种在图形设计中广泛使用的平滑曲线,它通过控制点来定义曲线的形状。在Canvas中,主要使用`quadraticCurveTo()`和`bezierCurveTo()`方法来绘制二次贝塞尔曲线和三次贝塞尔曲线。二次贝塞尔曲线需要两...

    三次样条插值和贝塞尔曲线实例

    贝塞尔曲线是参数化的线性组合,通常用在计算机图形学中创建平滑的曲线路径。它由一组控制点决定,曲线会穿过第一个和最后一个控制点,但不会经过中间的控制点。贝塞尔曲线分为不同阶,其中最常见的是二阶(直线)...

    贝塞尔曲线动画

    贝塞尔曲线动画是一种在计算机图形学中广泛应用的技术,它能够创建出平滑、连续的曲线路径,被广泛用于UI设计、游戏开发、动画制作等领域。这种曲线因其视觉上的优雅和流畅性而备受青睐,尤其在移动应用中的过渡效果...

    svgpath:SVG路径低级转换工具包

    svgpath 用于SVG路径转换的低级工具包。 有时您不能使用transform属性,而必须直接将更改应用于svg路径。 那么这个包是给你的:)! 注意:此软件包适用于字符串,而不适用于完整的svg xml源。 安装 npm install svg...

    SVG矢量动画

    5. **Path Data操纵**:通过对SVG路径数据的动态修改,可以创建路径跟随、路径变形等动画效果。 6. **SVG Viewbox和PreserveAspectRatio属性**:这两个属性可以用来控制SVG元素在不同尺寸下的显示方式,也可以在...

    贝赛尔曲线动态生成工具

    4. **三次贝塞尔曲线**:三个控制点构成的曲线,能够形成更复杂的形状,是SVG路径中常用的类型。 5. **四次及以上贝塞尔曲线**:更多控制点可以创建更为复杂的曲线,但计算和控制难度增加。 在JavaScript中,可以...

    svg.path:SVG路径对象和解析器

    svg.path svg.path是在SVG中实现不同路径命令的对象的集合,以及SVG路径定义的解析器。用法有四个路径段对象,即Line , Arc , CubicBezier和QuadraticBezier还有一个Path对象,该对象充当路径段对象的集合。 这些...

    椭圆弧转为多段贝塞尔曲线的C#算法代码

    椭圆弧转为多段贝塞尔曲线的C#算法代码.在处理SVG的时候特别有用.

    二阶贝塞尔三阶贝塞尔。天气预报曲线图.rar

    二阶贝塞尔曲线常用于平滑的过渡效果,如在GUI设计中的平滑按钮边角或动画中的平滑运动路径。 三阶贝塞尔曲线(Cubic Bezier Curve)则更为复杂,它有四个控制点,包括一个起点P0,一个终点P3,以及两个中间控制点...

    echarts svg矢量图整理合集.txt

    echarts svg矢量图整理合集,包括五角星、梯形、微信、相机、文件夹、喇叭、放大、缩小、饼图、柱图等等

    基于SVG矢量图形格式浏览器绘图工具的设计与实现

    本论文的研究背景和技术简介部分详细介绍了SVG矢量图形格式的特点及应用,强调了在当前网络教学平台中绘图功能的不足以及利用SVG技术进行改进的必要性和优势。本工具的实现将为网络教学提供更加直观、高效和易于管理...

    mel-bezier-svg:从Maya选定的贝塞尔曲线导出到SVG路径

    从Maya选定的曲线作为bezier路径导出到svg文件格式。 打算在inkScape中使用。 注意:inkScape仅支持基本的贝塞尔曲线。 用法示例 在Maya中选择一个或多个贝塞尔曲线,然后在mel控制台中运行: 源“ &lt;path&gt; /...

Global site tag (gtag.js) - Google Analytics