在图形图像编程时,我们常常需要根据一系列已知点坐标来确 定一条光滑曲线。其中有些曲线需要严格地通过所有的已知点,而有些曲线却不一定需要。在后者中,比较有代表性的一类曲线是贝塞尔曲线(Bézier Splines)。
网友们可能注意到,贝塞尔曲线广泛地应用于很多图形图像软件中,例如Flash、Illstrator、CoralDRAW和Photoshop等等。什么是贝塞尔曲线呢?你先来看看这个:
Trackback:
-------------------------------------------------------------------------------------------------------------------
“贝赛尔”在中叫“工具”;在中翻译成“贝赛尔工具”;而在中叫“”。它是用来“画线”造型的一种专业工具。当然还有很多工具也可以完成画线的工作,例如大家常用的photoshop里的、、画笔工具,Fireworks里的直线、和工具,CorelDraw里的自由笔,手绘工具等等。
用“”工具无论是画直线或是曲线,都非常简单,随手可得。其操作特点是通过用鼠标在上放置各个,根据锚点的路径和描绘的先后顺序,产生直线或者是的效果。我们都知道路径由一个或多个直线段或曲线段组成。锚点标记路径段的。在曲线段上,每个选中的锚点显示一条或两条方向线,方向线以方向点结束。方向线和方向点的位置确定曲线段的大小和形状。移动这些将改变路径中曲线的形状,可以看右图。路径可以是的,没有起点或终点(如),也可以是的,有明显的端点(如波浪线)。
贝塞尔曲线是我们的叫法,英文名是Bézier Curve,港澳台称为貝茲曲線,新加坡马来西亚称为贝济埃曲线。
先看一下效果图:
中的几个GIF动画很漂亮,顺路贴上来。
贝塞尔曲线被广泛地在计算机图形中用来为平滑曲线建立模型。
二次和三次贝塞尔曲线最为常见
[]程式范例下列程式码为一简单的实际运用范例,展示如何使用标出三次方贝塞尔曲线。注意,此处仅简单的计算多项式系数,并读尽一系列由0至1的t值;实践中一般不会这么做,递归求解通常会更快速——以更多的内存为代价,花费较少的处理器时间。不过直接的方法较易于理解并产生相同结果。以下程式码已使运算更为清晰。实践中的最佳化会先计算系数一次,并在实际计算曲线点的循环中反复使用。此处每次都会重新计算,损失了效率,但程式码更清楚易读。
曲线的计算可在曲线阵列上将相连点画上直线——点越多,曲线越平滑。
在部分架构中,下以程式码也可由进行最佳化。举例来说,dt是一个常数,cx * t则等同于每次反复就修改一次常数。经反复应用这种最佳化后,循环可被重写为没有任何乘法(虽然这个过程不是的)。
另一种贝塞尔曲线的应用是在动画中,描述物件的运动路径等等。此处,曲线的x、y位置不用来标示曲线,但用来表示图形位置。当用在这种形式时,连续点之间的距离会变的更为重要,且大多不是平均比例。点将会串的更紧密,控制点更接近每一个点,而更为稀疏的控制点会散的更开。如果需要线性运动速度,进一步处理时就需要循所需路径将点平均分散。