
_START_ARTICLE_
貝茲曲線
_START_PARAGRAPH_
在数学的数值分析领域中，贝塞尔曲线（英语：Bézier curve，亦作“贝塞尔”）是计算机图形学中相当重要的参数曲线。更高维度的广泛化贝塞尔曲线就称作贝兹曲面，其中贝兹三角是一种特殊的实例。_NEWLINE_贝塞尔曲线于1962年，由法国工程师皮埃尔·贝兹（Pierre Bézier）所广泛发表，他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发，以稳定数值的方法求出贝塞尔曲线。
_START_SECTION_
电脑绘图
_START_PARAGRAPH_
由于需要点阵化更精细的分辨率时，重新插值（补点）的计算量较小，贝塞尔曲线被广泛地在计算机图形中用来为平滑曲线建立模型。贝塞尔曲线是矢量图形文件和相应软件（如PostScript、PDF等）能够处理的唯一曲线，用于光滑地近似其他曲线。_NEWLINE_二次和三次贝塞尔曲线最为常用。
_START_SECTION_
程式范例
_START_PARAGRAPH_
下列程式码为一简单的实际运用范例，展示如何使用C语言标出三次方贝塞尔曲线。注意，此处仅简单的计算多项式系数，并读尽一系列由0至1的t值；实践中一般不会这么做，递归求解通常会更快速——以更多的内存为代价，花费较少的处理器时间。不过直接的方法较易于理解并产生相同结果。以下程式码已使运算更为清晰。实践中的最优化会先计算系数一次，并在实际计算曲线点的循环中反复使用。此处每次都会重新计算，损失了效率，但程式码更清楚易读。_NEWLINE_曲线的计算可在曲线阵列上将相连点画上直线——点越多，曲线越平滑。_NEWLINE_在部分架构中，下以程式码也可由动态规划进行最优化。举例来说，dt是一个常数，cx * t则等同于每次反复就修改一次常数。经反复应用这种最优化后，循环可被重写为没有任何乘法（虽然这个过程不是稳定数值的）。_NEWLINE_/* 產生三次方貝茲曲線的程式碼*/typedef struct{_NEWLINE_    float x;_NEWLINE_    float y;}Point2D;/* cp在此是四個元素的陣列: cp[0]為起始點，或上圖中的P0 cp[1]為第一個控制點，或上圖中的P1 cp[2]為第二個控制點，或上圖中的P2 cp[3]為結束點，或上圖中的P3 t為參數值，0 <= t <= 1*/Point2D PointOnCubicBezier( Point2D* cp, float t ){_NEWLINE_    float   ax, bx, cx;_NEWLINE_    float   ay, by, cy;_NEWLINE_    float   tSquared, tCubed;_NEWLINE_    Point2D result;_NEWLINE__NEWLINE_    /*計算多項式係數*/_NEWLINE__NEWLINE_    cx = 3.0 * (cp[1].x - cp[0].x);_NEWLINE_    bx = 3.0 * (cp[2].x - cp[1].x) - cx;_NEWLINE_    ax = cp[3].x - cp[0].x - cx - bx;_NEWLINE__NEWLINE_    cy = 3.0 * (cp[1].y - cp[0].y);_NEWLINE_    by = 3.0 * (cp[2].y - cp[1].y) - cy;_NEWLINE_    ay = cp[3].y - cp[0].y - cy - by;_NEWLINE__NEWLINE_    /*計算位於參數值t的曲線點*/_NEWLINE__NEWLINE_    tSquared = t * t;_NEWLINE_    tCubed = tSquared * t;_NEWLINE__NEWLINE_    result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;_NEWLINE_    result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;_NEWLINE__NEWLINE_    return result;}/* ComputeBezier以控制點cp所產生的曲線點，填入Point2D結構的陣列。 呼叫者必須分配足夠的記憶體以供輸出結果，其為<sizeof(Point2D) numberOfPoints>*/void ComputeBezier( Point2D* cp, int numberOfPoints, Point2D* curve ){_NEWLINE_    float   dt;_NEWLINE_    int    i;_NEWLINE__NEWLINE_    dt = 1.0 / ( numberOfPoints - 1 );_NEWLINE__NEWLINE_    for( i = 0; i < numberOfPoints; i++)_NEWLINE_        curve[i] = PointOnCubicBezier( cp, i*dt );}_NEWLINE_另一种贝塞尔曲线的应用是在动画中，描述对象的运动路径等等。此处，曲线的x、y位置不用来标示曲线，但用来表示图形位置。当用在这种形式时，连续点之间的距离会变的更为重要，且大多不是平均比例。点将会串的更紧密，控制点更接近每一个点，而更为稀疏的控制点会散的更开。如果需要线性运动速度，进一步处理时就需要循所需路径将点平均分散。