贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础。它的主要意义在于无论是直线或曲线都能在数学上予以描述。

上一节讲的是高次方程曲线,其实贝塞尔曲线就是高次函数曲线.研究贝塞尔曲线的人最初是按照已知曲线参数方程来确定四个点的思路设计出这种矢量曲线绘制法。涕淌为了向大家 介绍贝塞尔曲线的公式,也故意把问题的已知和所求颠倒了一下位置:如果已知一条曲线的参数方程,系数都已知,并且两个方程里都含有一个参数t,它的值介于 0、1之间,表现形式如下所示:

      x(t) = ax * t ^ 3 + bx * t ^ 2 + cx * t + x0
      y(t) = ay * t ^ 3 + by * t ^ 2 + cy * t + y0

由N个顶点控制的贝塞尔曲线,是N-1次的函数方程构成.

二次方贝塞尔曲线

二次方贝塞尔曲线的路径由给定点P0P1P2的函数Bt):

三次方贝塞尔曲线

      P0P1P2P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1P2;这两个点只是在那里提供方向资讯。P0P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。

阶贝塞尔曲线可如下推断:

给定点P0P1、…、Pn,其贝塞尔曲线即

相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815

如下是我写的贝塞尔曲线的脚本代码与截图,代码中的控制顶点坐标为随机数生成.

二次方贝塞尔曲线:

vertices = 

t = from  to 

ax = rand2(-, )
ay = rand2(-, )
bx = rand2(-, )
by = rand2(-, )
cx = rand2(-, )
cy = rand2(-, ) a1 = (-t)*(-t)
a2 = *t*(-t)
a3 = t*t x = a1*ax+a2*bx+a3*cx
y = a1*ay+a2*by+a3*cy

三次方贝塞尔曲线:

vertices = 

t = from  to 

ax = rand2(-, )
ay = rand2(-, )
bx = rand2(-, )
by = rand2(-, )
cx = rand2(-, )
cy = rand2(-, )
dx = rand2(-, )
dy = rand2(-, ) a1 = pow((-t),)
a2 = pow((-t),)**t
a3 = *t*t*(-t)
a4 = t*t*t x = a1*ax+a2*bx+a3*cx+a4*dx;
y = a1*ay+a2*by+a3*cy+a4*dy;

四次方贝塞尔曲线:

vertices = 

t = from  to 

ax = rand2(-, )
ay = rand2(-, )
bx = rand2(-, )
by = rand2(-, )
cx = rand2(-, )
cy = rand2(-, )
dx = rand2(-, )
dy = rand2(-, )
ex = rand2(-, )
ey = rand2(-, ) t2 = pow(t,)
t3 = pow(t,)
t4 = pow(t,) w = -t
w2 = pow(w,)
w3 = pow(w,)
w4 = pow(w,) a1 = w4
a2 = *w3*t
a3 = *w2*t2
a4 = *w*t3
a5 = t4 x = a1*ax+a2*bx+a3*cx+a4*dx+a5*ex;
y = a1*ay+a2*by+a3*cy+a4*dy+a5*ex;

五次方贝塞尔曲线:

vertices = 

t = from  to 

ax = rand2(-, )
ay = rand2(-, )
bx = rand2(-, )
by = rand2(-, )
cx = rand2(-, )
cy = rand2(-, )
dx = rand2(-, )
dy = rand2(-, )
ex = rand2(-, )
ey = rand2(-, )
fx = rand2(-, )
fy = rand2(-, ) t2 = pow(t,)
t3 = pow(t,)
t4 = pow(t,)
t5 = pow(t,) w = -t
w2 = pow(w,)
w3 = pow(w,)
w4 = pow(w,)
w5 = pow(w,) a1 = w5
a2 = *w4*t
a3 = *w3*t2
a4 = *w2*t3
a5 = *w*t4
a6 = t5 x = a1*ax+a2*bx+a3*cx+a4*dx+a5*ex+a6*fx;
y = a1*ay+a2*by+a3*cy+a4*dy+a5*ex+a6*fx;

数学图形(1.47)贝塞尔(Bézier)曲线的更多相关文章

  1. 数学图形(2.14)Spherical helix曲线

    从http://mathworld.wolfram.com/SphericalHelix.html上找到如下一些关于该曲线的说明,不过似乎他的公式和我的脚本完全是两个东西.. The tangent  ...

  2. 数学图形(2.13)Spherical trochoid曲线

    该曲线与上一节的herical cycloid球面外摆曲线 很相似,难道这是球面内摆曲线? #http://www.mathcurve.com/courbes3d/cycloidspheric/tro ...

  3. 数学图形(1.34) peut aussi曲线

    这是一种左右对称的类圆形曲线 #http://www.mathcurve.com/courbes2d/lissajous/lissajous2.shtml vertices = t = to (*PI ...

  4. 数学图形之贝塞尔(Bézier)曲面

    前面章节中讲了贝塞尔(Bézier)曲线,而贝塞尔曲面是对其多一个维度的扩展.其公式依然是曲线的公式: . 而之所以由曲线变成曲面,是将顶点横向连了再纵向连. 很多计算机图形学的教程都会有贝塞尔曲面的 ...

  5. 数学图形(1.49)Nephroid曲线

    昨天IPhone6在国内发售了,我就顺手发布个关于肾的图形.Nephroid中文意思是肾形的.但是这种曲线它看上去却不像个肾,当你看到它时,你觉得它像什么就是什么吧. The name nephroi ...

  6. 数学图形之将曲线(curve)转化成曲面管

    在我关于数学图形的博客中,一开始讲曲线的生成算法.然后在最近的章节中介绍了圆环,还介绍了螺旋管以及海螺的生成算法.一类是曲线,一类是环面,为什么不将曲线变成环的图形,毕竟曲线看上去太单薄了,这一节我将 ...

  7. 数学图形(1.2)Sin曲线

    相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 Sin曲线 vertices = x = *PI) to (*PI) y = ...

  8. 数学图形(2.19) 利萨茹3D曲线

    在前面的章节数学图形(1.13) 利萨茹曲线中,写的是二维的利萨茹曲线,这一节,将其变为3D图形. #http://www.mathcurve.com/courbes3d/lissajous3d/li ...

  9. 数学图形(1.26)Clairaut曲线

    像瓜子样的曲线 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 #http://www.mathcurve.com/cour ...

随机推荐

  1. Mysql - 参数修改

    概述 mysql的参数可以分为两类:a. 动态参数,数据库启动期间能被修改,而修改又分为两种(global级,session级).b. 静态参数,即数据库启动期间不能修改. 接下来利用参数wait_t ...

  2. [转]SPFA算法的玄学方法

    最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2​ 优化 对一些数组的定义: di ...

  3. 循序渐进学.Net Core Web Api开发系列【0】:序言与目录

    一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...

  4. 使用Synchronized块同步变量

    我们可以通过synchronized块来同步特定的静态或非静态方法.要想实现这种需求必须为这些特定的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传 ...

  5. 使用Synchronized块同步方法

    synchronized关键字有两种用法.第一种就是在<使用Synchronized关键字同步类方法>一文中所介绍的直接用在方法的定义中.另外一种就是synchronized块.我们不仅可 ...

  6. 【bfs】BZOJ1102- [POI2007]山峰和山谷Grz

    最后刷个水,睡觉去.Bless All! [题目大意] 给定一个地图,为FGD想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是 ...

  7. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  8. 让nginx支持HLS

    准备工作: 1.安装nginx和rtmp模块 2.安装ffmepg(用来推流) 以上准备工作参见这篇博客:http://www.cnblogs.com/damiao/p/5231221.html 1. ...

  9. Regex.Split

    private static List<int> GetThemeIds(string themeList) { const string split = "!===!" ...

  10. javascript: Math.sin() cos() 用法

    Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...