桥梁、弦艺术和Bézier曲线

合集下载

计算机图形学--第十一讲 Bezier曲线

计算机图形学--第十一讲  Bezier曲线

任课教师:李陶深教授tshli@任课教师:李陶深教授tshli@12 曲线的基本概念Bézier 曲线5曲线与曲面的概述 4 3 6 B 样条曲线NURBS 曲线 常用的曲面Bézier曲线是由法国雷诺汽车公司工程师的Pierre Bézier在1971年发明的一种构造样条曲线和曲面的方法, 用来进行雷诺汽车的车身设计, 现在Bézier曲线曲面广泛应用在计算机图形学中的外形设计, 以及字体表示中.◆Bé◆在折线的各顶点中,只有第一点和最后一点在曲线上且作为曲线的起始处和终止处,其他的点用于控制曲线的形状及阶次。

◆曲线的形状趋向于多边形折线的形状,要修改曲线,只要修改折线的各顶点就可以了。

多边形折线又称的控制多边形,其顶点称为控制点。

6.3 Bézier 曲线—曲线的定义Bézier 曲线是由一组控制顶点和Bernstein 基函数混合(blending)得到的曲线.()[],0(), 0,1n i i n i t B t t ==∈∑C P 其中, P i (i =0,1,…,n)称为控制顶点; 顺序连接控制顶点生成控制多边形.()()[],1,0,1n i i i i n n B t C t t t -=-∈为Bernstein 基函数.Bézier 曲线的次数, 就是Bernstein 基函数的次数; Bézier 曲线的阶数, 就是控制顶点的个数. 阶数为次数加1.6.3 Bézier曲线—定义(2)给定空间n+1个点的位置矢量P i(i=0,1,2,…,n),则n次Bézier曲线上各点坐标的插值公式定义为:B i,n(t)是n次Bernstein基函数P i构成该Bézier曲线的特征多边形6.3 Bézier曲线—曲线的定义(3)Bézier曲线曲线的形状趋于特征多边形的形状①正性②权性由二项式定理可知:③对称性: 若保持原全部顶点的位置不变, 只是把次序颠倒过来, 则新的Bézier曲线形状不变, 但方向相反。

第三节 贝塞尔Bézier曲线 - 北京化工大学.

第三节 贝塞尔Bézier曲线 - 北京化工大学.

i0
i0
n
n
P B ni ni,n 1 t Pi Bi,n 1 t , t 0,1
i0
i0
这个性质说明Bézier曲线在起点处有什么几何性 质,在终点处也有相同的性质。
3.凸包性
定理6.3.2 Bézier曲线落在控制点构成的凸包内
证明 : 由于
边形称为Bézier多边形。
Ct 定Bé义zi的er曲曲线线称如为图由6.P3i.1为所控示制。顶点的n次
p2 p1
p3
p2
p4
p4 p1
p3
图6.3.1
二. Betnstein基函数的性质
正性
Bi
,n
t

0 0
t 0 ,1
t 0,1,i 1,2,n
2. 端点性质
Bi,n
0

1

0
i 0
其他
Bi,n
1

1

0
i n
其他
3. 权性
n
Bi,n t 1
t 0,1
i0
由二项式定理可知:
n
n
Bi,n t Cni t i 1 t ni 1 t tn 1
i0
图6.3.2 0 ~ 5阶Bernstein基函数的图像
5. 递推性
Bi,n t 1 tBi,n1t tBi1,n1t i 0,1,n
即高一次的Bernstein基函数可由两个低一次的
Bernstein调和函数线性组合而成。因为:
Bi,n t
6. 导函数
Bi,n t n Bi1,n1 t Bi,n1 t ,

bezier曲线绘制算法

bezier曲线绘制算法

bezier曲线绘制算法
摘要:
1.贝塞尔曲线简介
2.贝塞尔曲线的计算方法
3.贝塞尔曲线的应用
4.贝塞尔曲线的优缺点
正文:
贝塞尔曲线是一种以四个控制点定义的平滑曲线,它具有很好的局部性和全球性,广泛应用于计算机图形学、动画设计等领域。

计算贝塞尔曲线的方法有多种,其中比较常见的是使用de Casteljau 算法。

该算法通过计算两个分段贝塞尔曲线的交点,来求解原始贝塞尔曲线上的点。

具体来说,假设我们有四个控制点A、B、C、D,我们首先计算出AB、BC 两条线段的贝塞尔曲线,然后求解这两条贝塞尔曲线的交点P,接着以P 为控制点,计算出PB、PC 两条线段的贝塞尔曲线,最后求解这两条贝塞尔曲线与AC 的交点,该交点即为所求的贝塞尔曲线上的点。

贝塞尔曲线的应用非常广泛,例如在计算机图形学中,它可以用于绘制任意形状的曲线,还可以用于控制物体的动画运动路径;在计算机辅助设计中,它可以用于精确控制设计曲线的形状,提高设计的准确性和效率。

贝塞尔曲线的优点在于其具有很好的局部性和全球性,可以很好地描述出各种复杂的曲线形状。

同时,贝塞尔曲线的计算方法相对简单,易于实现和控制。

然而,贝塞尔曲线也存在一些缺点,例如其计算过程中需要处理复杂的数
学运算,对计算机的计算能力有一定的要求。

此外,贝塞尔曲线的控制点数量较多,调整起来比较麻烦,需要一定的技巧和经验。

总的来说,贝塞尔曲线是一种重要的曲线描述方法,其在计算机图形学、动画设计等领域有着广泛的应用。

Bezier曲线

Bezier曲线

x(t) a3xt 3 a2xt 2 a1xt a0x
y(t) a3yt3 a2yt2 a1yt a0y z(t) a3zt 3 a2zt 2 a1zt a0z
t [0,1]
• 矢量表示
P(t
)
a3t
3
a2t
2
a1t
a0
t [0,1]
• 已知P(0),P(1),P’(0),P’(1)
• n+1个控制点构成由n条边组成 的折线集,称为控制多边形
• 控制多边形起点、终点和曲线 起点、终点重合。
• 控制多边形第一条边和最后一 条边表示曲线起点、终点处切 向量方向。
• 曲线形状趋向于控制多边形形 状。
Bezier曲线插值公式
• 给次定Be空zie间r参n+数1个曲点线的上位各置点矢坐量标P的i(插i=值0,公1式,是…:,n),则n
• 由(n+1)个控制点Pi(i=0, 1, ..., n)定义的n次Bezier曲线Pn0 可被定义为分别由前、后n个控制点定义的两条(n-1)次 Bezier曲线P0n-1与P1n-1的线性组合:
Bezier曲线的递推(de Casteljau)算法(IV)
一次Bezier曲线的生成
二次Bezier曲线的生成
例子:n=3时,用de Casteljeu算法 求3次Bezier曲线上的点
当n=3时,de casteljau 算法递推出的Pki呈直 角三角形,对应结果 如右图所示。从左向 右递推,最右边点P30 即为曲线上的点。
• 这一算法可用简单的几何 作图来实现。给定参数t, 就把定义域分成长度为的 两段。依次对原始控制多 边形每一边执行同样的定 比t:(1-t)分割,所得分点 就是第一级递推生成的中 间顶点。

实验报告四bezier曲线

实验报告四bezier曲线

实验四Bezier曲线的绘制1. 实验目的练习Bezier曲线的绘制和de Casteljau算法。

2. 实验内容和要求按要求完成如下一个作业,提交纸质实验报告,同时提交实验报告和代码的电子版。

实现Bezier曲线的de Casteljau递推算法,能够对任意介于0和1之间的参数t计算Bezier曲线上的点,然后依次连接这些点生成Bezier曲线。

要求:对[0,1]参数区间进行100等分。

控制点的数目至少为5个,即Bezier曲线的次数不低于4次。

de Casteljau算法用一个函数单独实现。

绘制Bezier曲线的同时还要绘制其控制多边形。

至少绘制两条Bezier曲线,具有不同的次数,颜色和曲线宽度。

3.算法描述Bezier Curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。

曲线定义:起始点、终止点、控制点。

通过调整控制点,贝塞尔曲线的形状会发生变化。

1962年,法国数学家Pierre Bezier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。

以下公式中:B(t)为t时间下点的坐标;P0为起点,Pn为终点,Pi为控制点。

一阶贝塞尔曲线如下,意义由 P0 至 P1 的连续点,描述的是一条线段:二阶贝塞尔曲线(抛物线:P1-P0为曲线在P0处的切线):原理:由 P0 至 P1 的连续点 Q0,描述一条线段。

由 P1 至 P2 的连续点 Q1,描述一条线段。

由 Q0 至 Q1 的连续点 B(t),描述一条二次贝塞尔曲线。

4. 源程序代码#include<C:\Include\GL\glut.h>#include<stdlib.h>#include<math.h>GLsizei winWidth = 600, winHeight = 600;GLfloat xwcMin = -150.0, xwcMax = 150.0;GLfloat ywcMin = -300.0, ywcMax = 300.0;class wcPt3D{public:GLfloat x, y, z; };void init(){glClearColor(1.0, 1.0, 1.0, 1.0); }void plotPoint(wcPt3D bezCurevePt){glBegin(GL_POINTS);glVertex2f(bezCurevePt.x, bezCurevePt.y);glEnd(); }void binomiaCoeffs(GLint n, GLint * C){GLint k, j;for (k = 0; k <= n; k++)C[k] = 1;for (j = n; j >= k + 1; j--)C[k] *= j;for (j = n - k; j >= 2; j--)C[k] /= j; }void computeBezPt(GLfloat u, wcPt3D * bezPt, GLint nCtrlPts, wcPt3D *CtrlPts, GLint *C){ GLint k, n = nCtrlPts - 1;GLfloat bezBlendFcn;bezPt->x = bezPt->y = bezPt->z = 0.0;for (k = 0; k<nCtrlPts; k++){bezBlendFcn = C[k] * pow(u, k) * pow(1 - u, n - k);bezPt->x += CtrlPts[k].x * bezBlendFcn;bezPt->y += CtrlPts[k].y * bezBlendFcn;bezPt->z += CtrlPts[k].z * bezBlendFcn; } }void bezier(wcPt3D * ctrlPts, GLint nCtrlPts, GLint nBezCurvePts){wcPt3D bezCurvePt;GLfloat u;GLint *C, k;C = new GLint[nCtrlPts];binomiaCoeffs(nCtrlPts - 1, C);for (k = 0; k <= nBezCurvePts; k++){u = GLfloat(k) / GLfloat(nBezCurvePts);computeBezPt(u, &bezCurvePt, nCtrlPts, ctrlPts, C);plotPoint(bezCurvePt); }delete[]C; }void displayFcn(void){GLint nCtrlPts = 5, nCtrlPts2 = 6, nBezCurvePts = 1000;wcPt3D ctrlPts[5] = { { -135.0, -59.0, 0.0 }, { -59.0, 95.0, 0.0 }, { 0.0, -40.0, 0.0 }, { 70.0, 120.0, 0.0 }, { 78, -125.0, 0.0 } };wcPt3D ctrlPts2[6] = { { -118.0, 20.0, 0.0 }, { -85.0, 45.0, 0.0 }, { -26.0, -126.0, 0.0 }, { 38.0, 88.0, 0.0 }, { 58.0, 188.0, 0.0 }, { 108.0, 98.0, 0.0 } }; glClear(GL_COLOR_BUFFER_BIT);glPointSize(6);glColor3f(0.0, 1.0, 1.0);bezier(ctrlPts, nCtrlPts, nBezCurvePts);glPointSize(5);glColor3f(1.0, 0.0, 1.0);bezier(ctrlPts2, nCtrlPts2, nBezCurvePts);glColor3f(0.0, 0.0, 1.0);glBegin(GL_LINES);glVertex2f(-135.0, -59.0);glVertex2f(-59.0, 95.0);glVertex2f(-59.0, 95.0);glVertex2f(0.0, -40.0);glVertex2f(0.0, -40.0);glVertex2f(70.0, 120.0);glVertex2f(70.0, 120.0);glVertex2f(78.0, -125.0);glVertex2f(-118.0, 20.0);glVertex2f(-85.0, 45.0);glVertex2f(-85.0, 45.0);glVertex2f(-26.0, -126.0);glVertex2f(-26.0, -126.0);glVertex2f(38.0, 88.0);glVertex2f(38.0, 88.0);glVertex2f(58.0, 188.0);glVertex2f(58.0, 188.0);glVertex2f(108.0, 98.0);glEnd();glFlush(); }void winReshapeFcn(GLint newWidth, GLint newHeight){glViewport(0, 0, newWidth, newHeight);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(xwcMin, xwcMax, ywcMin, ywcMax);glClear(GL_COLOR_BUFFER_BIT); }void main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 50);glutInitWindowSize(winWidth, winHeight);glutCreateWindow("yxl 实验四 Bezier曲线");init();glutDisplayFunc(displayFcn);glutReshapeFunc(winReshapeFcn);glutMainLoop(); }5. 实验结果6.实验体会最后一次实验报告了,老师要求我们做Bezier曲线,需要我们对函数去理解的一次实验,对于数学比较差的我来说还是很有困难的,理解起来比较吃力。

creator 贝塞尔曲线

creator 贝塞尔曲线

creator 贝塞尔曲线
贝塞尔曲线是指一种特殊的数学曲线,由法国数学家皮埃尔·贝塞尔于20世纪30年代提出。

这种曲线可以被用于计算机图形学中,用于绘制平滑的曲线和曲面,被广泛地应用于计算机图形、动画、视频编辑、工业设计等领域。

贝塞尔曲线的特点是由控制点和节点组成,其形状可以通过调整控制点来改变。

贝塞尔曲线有三种类型:一次贝塞尔曲线、二次贝塞尔曲线和三次贝塞尔曲线。

其中,一次贝塞尔曲线是线性曲线,二次贝塞尔曲线是平滑曲线,三次贝塞尔曲线更加平滑而且更加常用。

贝塞尔曲线的应用非常广泛,例如在计算机图形学中,可以用贝塞尔曲线来绘制平滑的曲线和曲面,如画贝塞尔曲线的工具、字体设计、3D建模等。

此外,在工业设计中,也可以使用贝塞尔曲线来设计产品的外形和曲线。

在电影和电视行业中,贝塞尔曲线也经常被用来制作特效和动画。

总之,贝塞尔曲线是一种非常重要的数学曲线,被广泛地应用于各种领域,对于计算机图形学和工业设计等领域的发展起到了重要的推动作用。

- 1 -。

贝兹尔曲线

贝兹尔曲线贝兹尔曲线是一种光滑曲线,由法国工程师皮埃尔·贝齐埃尔(Pierre Bézier)在20世纪50年代开发的。

该曲线适用于计算机辅助设计(CAD)和计算机图形学等领域,可以用来描述和绘制复杂的曲线形状。

贝兹尔曲线凭借其灵活性和精确性,成为了二维和三维图形设计的重要工具之一。

贝兹尔曲线的主要特点是可以通过有限数量的点来确定曲线的形状,这些点被称为控制点。

通过调整这些控制点的位置和权重,可以改变曲线的形状,从而实现任意复杂的曲线绘制。

贝兹尔曲线可以是直线、二次曲线或高阶曲线,具体取决于控制点的数量和权重。

贝兹尔曲线的数学表示形式是通过控制点和权重的线性组合来计算曲线上的点的坐标。

通常使用的参数化表示形式是贝兹尔曲线的一个常见形式,其中曲线上的点的坐标由参数t来表示。

参数t的取值范围通常是0到1之间,可以用来控制曲线的起点和终点位置。

使用参数化表示形式,可以方便地对曲线进行插值和插入操作。

绘制贝兹尔曲线的关键是确定合适的控制点。

控制点的数量和位置直接影响曲线的形状。

一般来说,至少需要两个控制点来绘制一条贝兹尔曲线的直线段,而更多的控制点可以用来描述复杂的曲线形状。

贝兹尔曲线的弯曲程度和流畅性可以通过调整控制点的位置和权重来实现。

贝兹尔曲线的计算和插值方法在计算机图形学中有广泛的应用。

例如,它可以用来绘制平滑的曲线路径,以实现图形的动画效果。

它也可以用来生成复杂的几何形状,如汽车外壳、船体等。

此外,贝兹尔曲线还可以用来表示字体的轮廓和生成曲线字形,以及绘制自然景观和虚拟环境等。

贝兹尔曲线的优点之一是它的灵活性和可控性。

通过调整控制点的位置和权重,可以精确地控制曲线的形状和曲率。

与其他曲线表示方法相比,贝兹尔曲线具有更大的设计自由度和可变性。

此外,贝兹尔曲线具有良好的局部控制性,即对曲线的一部分进行修改不会影响其他部分,这使得在进行曲线编辑和修改时更加方便。

贝兹尔曲线的缺点之一是它对于非均匀参数化的敏感性。

Bezier曲线曲面


11/27/2010
23
Bezier曲线生成 曲线生成
• 离散生成算法
– 想法
11/27/2010
24
Bezier曲线生成 曲线生成
– 程序
void DisplayBezierCurve(Vector P[],int n, float DELTA) { if(Distance(P,n) <= DELTA) 显示控制多边形P; else { BezierCurveSplitting(P,Q,R,n); DisplayBezierCurve(Q,n,DELTA); DisplayBezierCurve(R,n,DELTA); } }
1 n " 2 " ' " " ' 0 n 1 2 n n−1
β β 2 Q2 = α2 + 2α + +1P − 2α2 + 2α + P −1 +α P −2 n n n n −1 n −1
选择 α 和 β 的值,可以利用该式确定曲线段 Q(t) 的特征多边 形顶点 Q ,而顶点 Q、 Q 已被 G 连续条件所确定。要达到 G 连 续的话,只剩下顶点 Q 可以自由选取。
11/27/2010 25
Bezier曲线的拼接 曲线的拼接 曲线的
几何设计中,一条Bezier曲线往往难以描述复杂的曲线形状。 这是由于增加由于特征多边形的顶点数,会引起Bezier曲线次数 的提高,而高次多项式又会带来计算上的困难,实际使用中, 一般不超过10次。所以有时采用分段设计,然后将各段曲线相 互连接起来,并在接合处保持一定的连续条件。下面讨论两段 Bezier曲线达到不同阶几何连续的条件。

5Bezier曲线与曲面2-CAD

第八讲第5章Bézier曲线和曲面张汉茹航宇学院本章内容提要5.1 Bézier曲线的定义5.2 Bézier曲线的几何性质5.3 Bézier曲线的几何作图法5.4 Bézier曲线的改进和使用5.5 Bézier曲线的合成5.6 Bézier曲面是伯恩斯坦基函数和控制顶点的位置矢量的线性组合,是采用逼近的方式来构造曲线的。

∑()() (01)ni i ,n i=0r u =P B u u≤≤P 0P P 2P 3讨论——上次课的延续和本次课的引言1.Bézier 曲线,()(1),0,1,...,i in ii n nB uC u u i n-=-=1) 曲线的起点和终点通过控制多边形的首末顶点;2) 曲线在起点和终点处分别同特征多边形的第一和最后一条边相切;3) 曲线在端点处的二阶导数只与相临的3个顶点有关。

P02. Bézier曲线端点性质有:5.3 Bézier 曲线的几何作图法1ii i+1()= (1-)+i =0,1,2,,n -1P u u P uP 110010010()= (1-)+()= +(-)i =0P u u P uP P u P u P P 则当i =0时有:当特征多边形顶点(P i , i=0,1,2, …,n)给定时,为求出曲线上的任意一点,Bézier 给出了一种几何作图方法。

这种作图法给Bézier 曲线的生成提供了一个形象的几何解释。

对于u ∈[0,1],给定参数值u ,在特征多边形的每条边上找一个分割点,使分割后的两段线段的比值为u :(1-u ),对于以P i 和P i+1为端点的第i+1条边,分点P i 1(u)的位置矢量为P 0P 1P 2P 3P 00P 10P 20P 30P 01P 11P 21P 02P 12分割过程:分割递推算法:P i j =(1-u )P i j-1+u P i+1j-1 P i 0=P ij=1,2, …,n; i=0,1, …,n -jP 0P 2P 1P 3P 11P 01P 21P 03=r (1/3)P 02P 12u =1/3下图为当u=1/3时,对应的曲线上的点的几何作图法:r(1/3)r(0)r(1)5次Bézier曲线的分割过程:Bézier曲线的离散生成Bézier曲线的收敛性:对控制多边形的分割产生的多边形序列一致收敛于r≤≤()(01)u uBézier 曲线是采用逼近而不是插值的方式来构造曲线,不用考虑切矢和扭矢。

第3讲-贝齐尔曲线


= (1 − t ) Bi ,n −1 (t ) + tBi −1,n −1 (t )
18
3. Bezier 曲线---性质
3.Bezier曲线的性质
(1)端点性质 a)曲线端点位置矢量 由 Bernstein 基 函 数 的 端 点 性 质 可 以 推 得 , 当 t=0 时 , P(0)=P0 ;当t=1时,P(1)=Pn 。由此可见,Bezier曲线的 起点、终点与相应的特征多边形的起点、终点重合。
当n=2时,Bezier曲线的控制多边形有三个控制点P0、P1
和P2,二次Bezier曲线是二次多项式。
p (t ) = ∑ Pi Bi , 2 (t ) = (1 − t) 2 ⋅ P0 + 2t (1 − t ) ⋅ P1 + t 2 ⋅ P2
i =0

2
可以证明,二次Bezier曲线是一段抛物线。
构造出的新Bezier曲线,与
原Bezier曲线形状相同,走向相反。因为:
C * (t ) = ∑ Pi Bi ,n (t ) = ∑ Pn −i Bi ,n (t )
* i =0
n
n
n
i =0
= ∑ Pn −i Bn −i ,n (1 − t ) = ∑ Pi Bi ,n (1 − t ),
i =0 i =0
n
t ∈ [0,1]
这个性质说明Bezier曲线在起点处有什么几何性质,在终点处 也有相同的性质。
3. Bezier 曲线---性质
(3)凸包性
由于
∑B
i =0
n
i ,n
(t ) ≡ 1 ,且 0 ≤ Bi ,n (t ) ≤ 1(0 ≤ t ≤ 1, i = 0,1, L , n) ,这一
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

桥梁、弦艺术和Bézier曲线Renan Gross关键词:耶路撒冷弦桥建造以色列耶路撒冷弦桥是为了该城市的轻轨列车系统。

然而,它的设计不仅仅将实用考虑在内,它还是一件艺术作品,被设计成一座丰碑。

其美丽不仅在于其纵横交错的缆线的视觉外观,而且还在于它背后的数学。

让我们深入研究一下桥和桥背后的故事。

弦桥的晚景弦桥通常是悬索桥,它的整体重量由上方承担。

在这种情况下,桥面由多条强大的钢索连接到一个单一的塔。

缆线以下列方式连接:塔顶的缆线支撑桥梁的中心,底部的那些缆线支撑更远部分的受力,因为这个原因我们看到缆线相互交叉。

从下面看弦桥尽管这些缆线给出了一条条离散直线,但我们注意到一个明显的特点:缆线边缘的轮廓似乎惊人的光滑。

我们不禁要问它服从某些数学公式吗?为了找出边缘形成的形状,我们将着手为桥梁制定一个数学模型。

由于建筑本身是相当复杂的,它具有弯曲的桥面和一个由两部分组成的斜塔,我们将不得不提出一些简化模型。

虽然我们失去了一点点的准确度和精密度,但我们获得了数学的简单性,并且仍然可以捕捉到弦桥形式的美丽本质。

更重要的是,我们还能够将我们的简化模型结果推广到实际的桥梁结构上去。

这就是建模的核心---抓住现实世界中的重要特征,并把它们转化为数学。

桥弦分析让我们先建立一个坐标系(x, y),x-轴对应于桥基,-轴对于将桥挂起的塔。

图1:坐标轴叠加在桥上把塔取成y-轴从0到1的部分,桥面取成x-轴从0到1的部分,然后我们在每根轴画上有均匀间距的n个标志。

从x-轴上的每个标志,我们画一条直线到y-轴,使得x-轴上的第1个标记和y-轴上的第个标志相连,x-轴上的第2个标记和y-轴上的第个标志相连,等等。

这些线代表我们的桥弦。

我们还假设x-轴和y-轴直角相交。

这不是一个完美的现实画面,缆线没有均匀分布,塔和桥面也不垂直,但这一假设简化了分析。

图2:坐标轴和均匀间隔的弦桥弦形成的轮廓基本上是出于缆线和它们相邻缆线的交叉点:你用一条直线把每个交叉点及它后面的交叉点相连。

弦越多,轮廓越光滑。

因此,众多的弦引导出了被称为包络线的平滑曲线,当有充分多条弦存在时你会看到非常漂亮的轮廓。

放弃详细计算(你可以在这里找到),我们发现这条曲线上所有点的坐标具有下面的形式其中在和之间。

因此,我们会问:这是它吗?形状是以这样一个数学关系出现吗?事实上,不是!虽然起初不容易看到,但我们都要证明其数学关系实际上是一个抛物线方程!对此你可能会说,一个抛物线的方程是:它与我们上面得到的结果非常不同。

你说得不错,然而,花一点功夫就可以证明我们的抛物线的论断,如果我们定义和,我们就能把我们不熟悉的方程改写为这个形式就是我们熟知的抛物线方程。

通过用和取代变量和,我们实际上已经将坐标系旋转了45度。

但这个新的坐标系吓不住我们。

正如我们可以看到的,抛物线的方程都是一样的。

图3:上:抛物线。

左下:倾斜45度的同样的抛物线。

右下:将左图中x和y在0和1之间的正方形中的倾斜抛物线放大,这就是代表了桥的区域。

我们得到的结果是,缆线的轮廓基本上是抛物线,这让我们很满意,因为抛物线有一个简单而优雅的形状。

但它也使我们有点纳闷。

为什么如此简单?为什么是抛物线,而不是一些其它的曲线?如果我们改变桥的形状,比方说使塔更倾斜一些,它会如何影响我们的曲线?有什么方法对之前用的简化假设做出修改呢?一个不太可能的答案我们的问题答案源于一个令人惊讶的领域:汽车设计。

早在20世纪60年代,工程师Pierre Bézier使用特殊的曲线指定他的汽车零部件看起来的形状。

这些曲线称为Bézier曲线。

现在看看它们能给我们提供什么样的启发。

我们都知道,任何两点间只有一条直线,因此,我们可以只用两个点定义一条特定的线。

类似地,Bézier曲线可以由任何数量的称为控制点的点来定义。

不像直线那样,它不通过所有的这些点,而是始于第一点,结束于最后那个点,但不一定通过所有的其它点。

相反,其它的点充当“砝码”,引导曲线从初始点流到最后点。

需要指出的是,给定的总点数是有特定意义的。

点的个数用来定义曲线的次数。

一条两点线性Bézier曲线有次数1,它就是通常的直线;三点的二次Bézier曲线有次数2,为抛物线;一般地,一个次数为的曲线有个控制点。

图4:次数为1,2和3的Bézier曲线Bézier曲线构造的一个可视化好方法是想象有一支铅笔,它从第一个控制点开始绘制到最后一个控制点。

在其途中,铅笔被吸引到不同的控制点,但在移动过程中铅笔的被吸引度不断变化。

起初前几个控制点最吸引它,所以铅笔开始绘制时是朝着它们的方向走。

随着铅笔的向前移动,它越来越被后面的控制点吸引,直到它到达最后一点。

在我们画线的任何给定时刻,我们可以问:“铅笔已经画了曲线的百分之几了?”这个百分比被称为曲线参数,并以标记。

图5:绘制Bézier曲线这一切又如何涉及到我们的抛物线型桥?当我们看到如何绘制Bézier曲线时,就会揭示这样的联系。

绘制的方式之一是按照曲线坐标的数学公式。

我们将跳过这种方式(你可以在这里看到这个公式),而转到第二种方法:递归地构造Bézier曲线。

在这个方法中,为了构建一个次数为的曲线,我们使用两个次数为的曲线。

下面我们用一个例子来说明它。

假设我们有一条三次曲线。

它由四个点定义。

从这些我们建立两个新的点组:除最后点之外的所有点,或者除了第一点以外的所有点。

因此我们有:∙第一组:∙第二组:这两组中的每一个定义了一条二次Bézier曲线。

还记得我们如何讲到使用铅笔,从第一点移动到最后一点。

现在,假设你有两支铅笔同时画这两条二次曲线。

第一条将从开始,收于,而第二条始于而终于。

在两支铅笔行走的任何给定时刻,你可以用一条直线连接他们的位置。

因此,在这两支笔画的时候,想到第三支铅笔。

这支铅笔总是在前两支铅笔当前位置连接线上的某个地方,并以和其他两支笔同样的速度移动。

开始时它是在和的连线上,因为前两支铅笔才移动了曲线的,第三支铅笔沿着这条线的处,故在点。

当其他两支铅笔走了比方说曲线的,分别位于点和,第三支铅笔是在和连线中标志为的那个点。

当其他两支铅笔已经完成了他们的旅程,分别在点和处,第三铅笔是在和连线上的处,即在点。

图6:用二次曲线构造一条三次Bézier曲线。

红色和绿色的曲线是二次曲线,而粗的黑色曲线是三次曲线- 这是我们要构建的曲线。

点和沿着两条二次曲线走,而我们的绘图铅笔总是沿着连接和的蓝线走。

一个很好的问题是:刚才我们描述了如何构造一条次曲线,但这样做需要绘制次曲线。

我们如何知道该怎样做呢?幸运的是,我们可以对这些助理曲线应用完全相同的过程。

我们将从两条次数较小的曲线把它们构造出来。

重复此过程,我们最终完成曲线的绘制。

这是线性一次曲线,即仅仅是一条直线,画它没有任何问题。

因此,所有复杂的Bézier曲线可以通过很多直线的组合绘制而成。

应用Béz i e r曲线现在我们有点熟悉Bézier曲线了,那么可以回到原来的问题:什么原因使桥的形状成为抛物线?我们怎样才能扩展我们的模型,以减弱我们所提出的假设?事实证明,美丽的弦桥只是一条二次Bézier曲线!要看到这一点,让我们回到代表桥梁的坐标系统,绘制对应调整三个点的坐标之间的间距,使之一致。

使用我们的递归过程,这条二次曲线将由两条直线形成:从到的直线(从下降到的-轴)和从到的直线(从增加到的-轴)。

现在假设第一支铅笔已沿-轴下降距离到达点。

与此同时,第二支铅笔沿着-轴达到点。

因此,第三支铅笔将在从点到点的线上的的位置。

因此,Bézier曲线与所有属于和之间的线相遇。

这些线(或至少它们当中的条)对应于我们的桥弦。

图7:红色箭头代表t=0.5时t沿轴走过的距离,蓝线是线。

现在设,我们则看到线的中点位于Bézier曲线上。

图8显示点还位于所有形成的轮廓上(如果这张图不使你信服,请看这里的网页)。

这足以表明,Bézier曲线和轮廓线是相同的曲线。

如图8所示,任何其它与相遇的抛物线将错过点并穿越线两次。

图8:蓝线代表的一部分。

红线是。

绿色曲线表明除轮廓线外的任何抛物型线都不会碰到P点欣赏这一事实将使我们能够处理先前模型的一些不准确之处。

首先,我们曾经假设轴之间互相垂直,即塔和桥面之间实际上有一个角度。

现在我们看到,这并不重要。

如果我们将y-轴(以及任何其他在x-轴和y-轴之间从原点(0, 0)辐射出的线)反时针旋转一个所需的角度以增加轴之间的角度,刚才使用的论点依然有效。

我们知道,任何二次Bézier曲线是一条抛物线,桥梁轮廓因而仍然是一条抛物线。

其次,我们看到,在我们的模型中弦是否均匀分布无关紧要:它们只是其轮廓定义Bézier曲线的直线族的一些代表罢了。

第三,由塔而来的桥弦不跨越它的整个长度,在大约一半处终止。

这意味着,我们只看到部分Bézier曲线。

如果向前延长桥面,我们仍将有一条抛物线满足。

然后桥弦的轮廓是抛物线的一部分,并跨越到。

图9:用于弦桥的正确Bézier曲线知道了抛物线形状的弦桥轮廓的根本原因后,现在我们可以稍休息一下。

某种意义上说,20世纪60年代用于汽车零部件设计的曲线已经潜入到21世纪的桥梁设计之中!Béz i e r曲线无处不在Bézier曲线的妙处远远不仅仅体现在汽车和桥梁上。

它进入了更多的领域和并有着广泛的应用。

其中的一个领域是弦艺术,这时弦线在充满钉子的板上散布着。

虽然弦只能作直线,它们中的许多以不同的角度排列而生成Bézier 曲线轮廓,就像桥弦所为。

图10:由弦组成的一艘船和模式Bézier曲线的另一个有趣之处表现在计算机图形学。

在许多图像处理程序中,我们常常用画笔工具绘制Bézier曲线。

更重要的是,许多计算机的字体是用Bézier曲线定义的。

每个字母由多达几十个的控制点来定义,并使用一系列三次到五次的Bézier曲线绘制。

这使得字母有可伸缩性:不管你如何放大或缩小这些字母,它们都能被清楚地呈现,见下图。

图11:一些在FreeSerif字体(简体)中用来形成“a”和“g”的Bézier控制点这就是数学之美。

它出现的地方我们从未期望,它可将看上去完全无关的领域美妙地连接起来。

考虑到曲线最初用于汽车零部件设计的事实,现在又被用来设计桥梁,我们再次感到这是数学跨学科性质的一个真正展示。

相关文档
最新文档