Đường cong Bézier

**Đường cong Bézier** là một đường cong tham số thường được sử dụng trong đồ họa máy tính và một số lĩnh vực khác. Dạng tổng quát hóa của đường cong Bézier trong không gian nhiều chiều được gọi là mặt phẳng Bézier, trong đó tam giác Bézier là một trường hợp đặc biệt.

Đường cong Bézier được công bố lần đầu vào năm 1962 bởi một kỹ sư người Pháp Pierre Bézier, người sử dụng nó để thiết kế thân ôtô. Nhưng việc nghiên cứu những đường cong này thực tế đã bắt đầu từ năm 1959 bởi nhà toán học Paul de Casteljau, ông sử dụng giải thuật De Casteljau để đánh giá các đường cong đó.

Về mặt ứng dụng, đường cong Bézier thường được sử dụng trong đồ họa vector để mô hình hóa các đường cong mượt (smooth curves) và những đường cong đó có thể được phóng to hoặc thu nhỏ theo một tỉ lệ không giới hạn. "Đường dẫn" (path), một khái niệm được sử dụng trong các chương trình xử lý ảnh, được tạo ra bằng cách liên kết các đường cong Bézier với nhau. Đường cong Bézier còn thường được sử dụng như là một công cụ để điều khiển sự chuyển động (animation).

## Các đường cong Bézier
Một đường cong Bézier được xác định bằng một tập hợp các *điểm kiểm soát* (control point) **P**0 đến **P***n* với *n* được gọi là bậc của nó (n = 1 cho bậc tuyến tính, 2 cho bậc 2,...). Điểm kiểm soát đầu và cuối là các điểm mút (điểm kết thúc) của đường cong, trong khi các điểm nằm giữa (nếu có) thường không nằm trên đường cong.

### Đường cong Bézier tuyến tính hay bậc một (linear)
Với 2 điểm **P**0 và **P**1, đường cong Bézier tuyến tính là một đoạn thẳng nối liền với hai điểm đó. Phương trình của đường cong này là:

:\mathbf{B}(t)=\mathbf{P}_0 + t(\mathbf{P}_1-\mathbf{P}_0)=(1-t)\mathbf{P}_0 + t\mathbf{P}_1 \mbox{, } t \in [0,1]

### Đường cong Bézier toàn phương hay bậc hai (quadratic)
Đường cong Bézier bậc 2 được tạo bởi một hàm **B**(*t*), với các điểm **P**0, **P**1, và **P**2 cho trước, khi đó:

: \mathbf{B}(t) = (1 - t)[(1 - t) \mathbf P_0 + t \mathbf P_1] + t [(1 - t) \mathbf P_1 + t \mathbf P_2] \mbox{, } t \in [0,1],

và có thể biểu diễn thành tập hợp các điểm tương ứng trong đường Bézier tuyến tính được tạo bởi hai đường Bézier tuyến tính từ **P**0 đến **P**1 và từ **P**1 đến **P**2. Nói một cách tường minh, thì nó có thể viết lại thành:

: \mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2(1 - t)t\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{, } t \in [0,1].

Đường cong này xuất phát từ **P**0, tiến đến **P**1 rồi lại chuyển hướng dần đến **P**2. Nói cách khác, tiếp tuyến tại **P**0 và **P**2 cắt nhau tại **P**1. Điều này cũng dễ rút ra từ đạo hàm của đường cong Bézier:

: \mathbf{B}'(t) = 2 (1 - t) (\mathbf{P}_1 - \mathbf{P}_0) + 2 t (\mathbf{P}_2 - \mathbf{P}_1) \,.

### Đường cong Bézier lập phương hay bậc ba (cubic)
Với 4 điểm **P**0, **P**1, **P**2 và **P**3 trên mặt phẳng hoặc trong không gian nhiều chiều có thể định nghĩa một đường cong Bézier bậc 3. Đường cong này bắt đầu từ điểm **P**0, đi theo hướng của điểm **P**1 và **P**2 trước khi kết thúc tại **p**3. Đường cong được hình thành thường không trực tiếp đi qua điểm **P**1 và **P**2 và 2 điểm này chỉ mang tính định hướng cho đường cong.

Phương trình đường cong Bézier bậc 3 có thể được định nghĩa bằng cách kết hợp 2 đường cong Bézier bậc 2 với nhau, với phương trình cho đường cong Bézier bậc 2 là **B****P**i,**P**j,**P**k, trong đó Pi, Pj, Pk là các điểm của đường cong đó.

:\mathbf{B}(t)=(1-t)\mathbf{B}_{\mathbf P_0,\mathbf P_1,\mathbf P_2}(t) + t \mathbf{B}_{\mathbf P_1,\mathbf P_2,\mathbf P_3}(t) \mbox{, } t \in [0,1].

Dạng tường minh cho phương trình này là:

:\mathbf{B}(t)=(1-t)^3\mathbf{P}_0+3(1-t)^2t\mathbf{P}_1+3(1-t)t^2\mathbf{P}_2+t^3\mathbf{P}_3 \mbox{, } t \in [0,1].

## Tổng quát

Có thể định nghĩa các đường cong Bézier với các bậc cao hơn 3.

### Định nghĩa đệ quy

Một đường cong Bézier bậc n có thể được định nghĩa đệ quy bằng sự kết hợp tuyến tính, từ điểm-đến-điểm của một cặp các điểm tương ứng với nhau của 2 đường cong Bézier bậc n -1.

Giả sử một đường cong Bézier được xác định bởi **B****P**0**P**1...**P**n, với các điểm là P0, P1,..., Pn. Khi đó:

:\mathbf{B}_{\mathbf{P}_0}(t) = \mathbf{P}_0 là giá trị ban đầu, và

:\mathbf{B}(t) = \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n}(t) = (1-t)\mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_{n-1}}(t) + t\mathbf{B}_{\mathbf{P}_1\mathbf{P}_2\ldots\mathbf{P}_n}(t)

### Định nghĩa tường minh

Công thức trên có thể được viết một cách tường minh như sau:

:
\begin{align}
\mathbf{B}(t) & = \sum_{i=0}^n {n\choose i}(1-t)^{n-i}t^i\mathbf{P}_i \\
& = (1-t)^n\mathbf{P}_0 + {n\choose 1}(1-t)^{n-1}t\mathbf{P}_1 + \cdots \\
& {} \quad \cdots + {n\choose n-1}(1-t)t^{n-1}\mathbf{P}_{n-1} + t^n\mathbf{P}_n,\quad t \in [0,1],
\end{align}


trong đó \scriptstyle {n \choose i} là các hệ số nhị thức (binomial coefficient).

Ví dụ với *n* = 5:

:
\begin{align}
\mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\mathbf{P}_2\mathbf{P}_3\mathbf{P}_4\mathbf{P}_5}(t) = \mathbf{B}(t) & = (1-t)^5\mathbf{P}_0 + 5t(1-t)^4\mathbf{P}_1 + 10t^2(1-t)^3 \mathbf{P}_2 \\
& {} \quad + 10t^3 (1-t)^2 \mathbf{P}_3 + 5t^4(1-t) \mathbf{P}_4 + t^5 \mathbf{P}_5,\quad t \in [0,1].
\end{align}


## Xây dựng các đường cong Bézier

### Đường cong tuyến tính



*t* trong phương trình đường cong Bézier tuyến tính có thể được xem như là giá trị khoảng cách của **B**(*t*) từ **P**0 đến **P**1. Ví dụ, với *t = 0.25*, thì **B**(*t*) là có giá trị là 1/4 khoảng cách từ **P**0 đến **P**1.

Giá trị của *t* dao động từ 0 đến 1, nên **B**(*t*) sẽ mô tả một đường thằng nối **P**0 với **P**1.

### Đường cong bậc hai

Đối với đường cong Bézier bậc 2, ta có thể xác định 2 điểm trung gian **Q**0 và **Q**1 sao cho *t* dao động từ 0 đến 1:
* Điểm **Q**0 biến đổi từ **P**0 đến **P**1 và nó mô tả một đường cong Bézier tuyến tính.
* Điểm **Q**1 biến đổi từ **P**1 đến **P**2 và nó mô tả một đường cong Bézier tuyến tính.
* Điểm **B**(*t*) biến đổi từ **Q**0 đến **Q**1 và nó mô tả một đường cong Bézier bậc 2.




### Đường cong bậc ba




### Đường cong bậc cao

Với đường cong Bézier bậc 4, ta có thể xây dựng các điểm trung gian **Q**0, **Q**1, **Q**2 & **Q**3 mô tả có đường cong Bézier tuyến tính, các điểm **R**0, **R**1 & **R**2 mô tả các đường cong Bézier bậc 2, và các điểm **S**0 & **S**1 mô tả các đường cong bậc 3:




Đường cong Bézier các bậc cao hơn được xây theo cách tương tự.

## Đọc thêm
* Paul Bourke: Bézier curves 
* Donald Knuth: *Metafont: the Program*, Addison-Wesley 1986, pp.&nbsp;123–131. Excellent discussion of implementation details; available for free as part of the TeX distribution.
* Dr Thomas Sederberg, BYU Bézier curves 
* J.D. Foley *et al.*: *Computer Graphics: Principles and Practice in C* (2nd ed., Addison Wesley, 1992)

## Tham khảo