维基百科:贝塞尔曲线

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

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

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

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

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

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

C 三次贝塞尔曲线

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

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

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

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

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

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

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

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

  1. SVG矢量绘图 path路径详解(基本画法)

    SVG的形状标签里,path是最强大的一个,掌握了path就足够处理常见的绘图问题了. 先看一下path标签的基本用法: <path d="M100,100 L200,200 L200 ...

  2. 【路径规划】局部路径规划算法——贝塞尔曲线法(含python实现 | c++实现)

    文章目录 参考资料 1. 算法简介 2. 公式原理及python实现 2.1 一阶贝塞尔曲线 2.2 二阶贝塞尔曲线 2.3 三阶贝塞尔曲线 2.4 n阶贝塞尔曲线 2.5 贝塞尔曲线性质 3. c+ ...

  3. 超级强大的SVG SMIL animation动画详解

    超级强大的SVG SMIL animation动画详解 本文摘自超级强大的SVG SMIL animation动画详解_Zoomla!逐浪CMS官网 (z01.com),网站看上去有年头了,担心哪天会 ...

  4. [转]超级强大的SVG SMIL animation动画详解

    超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究. 本文地址:http://www.zhangxinxu.com/word ...

  5. cmake find_package路径详解

    cmake find_package路径详解 转自:https://zhuanlan.zhihu.com/p/50829542 经常在Linux下面写C++程序,尤其是需要集成各种第三方库的工程,肯定 ...

  6. Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...

    Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...

  7. python调用包的路径_Python3 模块、包调用路径详解

    如下所示: ''' 以下代码均为讲解,不能实际操作 ''' ''' 博客园 Infi_chu ''' ''' 模块的优点: 1.高可维护性 2.可以大大减少编写的代码量 模块一共有三种: 1.Pyth ...

  8. SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解

    SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解 SpringBoot默认包扫描机制 标注了@Component和@Component的衍生注解如@Controller ...

  9. linux 软链接 相对路径,Linux入门之ln命令创建软链接的绝对路径和相对路径详解(Ubuntu)...

    ln命令创建软链接的绝对路径和相对路径详解 简介 ln命令 总结 简介 Linux链接,可以分为硬链接与软链接:本文主要介绍软链接.(默认情况下,ln命令产生硬链接) 软链接文件类似于Windows的 ...

最新文章

  1. 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
  2. 获得WebApi用Post方法获得新增数据的信息
  3. ubuntu9.10 qq自动退出修复
  4. Android分渠道打包(Python 3.4 实现)
  5. 针孔相机拍摄的图像坐标和空间点的对应关系
  6. C#错误异常日志记录到文件
  7. linux sed后 保存文本,实例详解linux文本三剑客--sed
  8. 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
  9. IBM Cognos8 处理父子维度浅析
  10. 2020-12-02
  11. osgi java web_基于 OSGi 和 Spring 开发 Web 应用
  12. 备份outlook的时候,请不要忘记同时备份Outlook.NK2文件
  13. linux有名管道 复用,Linux进程间通信(九)---综合实验之有名管道通信实验
  14. python中的颜色及其编码
  15. 【转】Ubuntu常用软件合集
  16. 计算机小喇叭找不到,电脑右下角小喇叭不见了(解决方案)
  17. 鸿蒙系统怎么关闭地理位置通知,让隐私无忧,查看和去除照片地理位置信息的App小集合...
  18. 华为软件精英挑战赛参赛感悟
  19. java 打压缩包_java将文件打成zip包
  20. 李沐动手学深度学习V2-BERT预训练和代码实现

热门文章

  1. 剪花布条(HDU-2087)
  2. 棋盘游戏(HDU-1281)
  3. 放苹果(信息学奥赛一本通-T1206)
  4. 信息学奥赛一本通C++语言——1110:查找特定的值
  5. 信息学奥赛一本通C++语言——1057:简单计算器
  6. 日语学习-多邻国-平假名4
  7. vue子组件赋值props_vue 父子传值props赋值失效问题
  8. C语言 sprintf实现
  9. linux内核那些事之物理内存模型之DISCONTIGMEM(2)
  10. 全连接层的作用是什么?