- 給定一個有序的點集 P0, P1, …, Pn, 可以決定一個 n次 的Bezier曲線段
- 曲線次數(shù) = 控制點數(shù)目 - 1
插入點 = 控制點 與 基函數(shù) 的 乘積和

Bezier曲線公式
其中的基函數(shù)或稱調(diào)和函數(shù)為 Bernstein多項式:
該多項式的第一項是 組合數(shù)

Bernstein多項式
例如,由 P0、P1、P2、P3四個控制點 構(gòu)成的控制多邊形來構(gòu)造
此時調(diào)和函數(shù)為:

三次Bezier曲線調(diào)和函數(shù)
// 畫貝葉斯曲線
void drawBezierCurve() {
double *base = new double[b.degree + 1]; // 存儲基函數(shù)值
Point2D *insert_points = new Point2D[insertNum]; // 存儲插入點
double step = 1.0 / (insertNum - 1); // 插值點步長,均勻插值
int j = 0;
for (double t = 0.0; t <= 1.0; t += step) {
for (int i = 0; i <= b.degree; ++i) {
base[i] = C(b.degree, i) * pow(t, i) * pow(1 - t, b.degree - i); // 組合數(shù)系數(shù)*后兩項
insert_points[j].x += base[i] * b.cnt_points[i].x; // 控制點數(shù) = 次數(shù)+1
insert_points[j].y += base[i] * b.cnt_points[i].y;
}
j++;
}
glColor3f(0.0, 1.0, 0.0);
glLineWidth(2);
glBegin(GL_LINE_STRIP);
for (int i = 0; i < insertNum; i++)
{
glVertex2f(insert_points[i].x, insert_points[i].y);
}
glEnd();
}