Với đường cong Bezier, ta có thể tạo ra các dạng đường cong khác nhau bằng cách hiệu chỉnh các điểm kiểm soát cho tới khi có được dạng đường cong thỏa mãn yêu cầu đặt ra ban đầu. Tuy nhiên, việc hiệu chỉnh thật không đơn giản chút nào nếu ta quan sát quá trình được mô tả bằng hình 5.27, trong đó một phần của đường cong Bezier đã đúng và phần còn lại thì cần phải hiệu chỉnh thêm.
Chúng ta có 5 điểm kiểm soát và đường cong Bezier được tạo ra từ chúng có nét liền so với đường cong mà ta cần phải vẽ có nét gạch đứt quãng. Ta nhận thấy rằng với t gần 0 thì đường cong Bezier có vẻ khớp so với đường cong cần vẽ nhưng lại lệch khi t gần 1. Chúng ta sẽ di chuyển p2, p3 lên một tí để đường cong Bezier khớp với đường cần vẽ, tuy nhiên điều này lại gây ra hiệu ứng làm cho phần đầu của đường cong lệch đi.
Hình 5.27 – Hiệu chỉnh một đường cong
Như vậy, khó khăn ở đây là do khi ta thay đổi bất kì một điểm kiểm soát nào thì toàn bộ đường cong cũng sẽ bị thay đổi theo. Điều này thật dễ hiểu do tất cả các đa thức
Bernstein đều khác 0 trên toàn đoạn [0,1].
Để giải quyết bài toán này ta sẽ sử dụng một tập các hàm trộn khác nhau R0(t), R1(t), ... chứ không phải chỉ một hàm BkL(t) như trong trường hợp Bezier. Các hàm trộn này có giá mang (đoạn trên đó hàm lấy giá trị khác 0) chỉ là một phần của đoạn [0, 1], ngoài giá mang này chúng có giá trị là 0. Bằng cách này, đường cong chỉ phụ thuộc vào một số điểm kiểm soát mà thôi.
Các hàm trộn mà ta đề cập đến ở đây chính là tập các đa thức được định nghĩa trên các đoạn kề nhau để khi nối lại với nhau tạo nên một đường cong liên tục. Các đường cong như vậy được gọi là đa thức riêng phần (piecewise polynomials).
(5.26)
Giá mang của g(t) là [0, 3], của a(t) là [0, 1], của b(t) là [1, 2], của c(t) là [2, 3].
Các điểm tại các đoạn đường cong gặp nhau được gọi là các điểm nối (joints), và giá trị t tại các điểm đó được gọi là nút (knot).
Có thể kiểm chứng được g(t) liên tục tại mọi nơi trên giá mang của nó, nên đường cong tại các chỗ nối là trơn. g(t) là một ví dụ của hàm Spline.
Hình 5.28 – Các thành phần của một đa thức riêng phần
Định nghĩa hàm Spline
Một hàm Spline cấp M là một đa thức riêng phần cấp M có các đạo hàm cấp (M-1) liên tục ở mỗi nút.
Rõ ràng theo định nghĩa thì g(t) là một Spline bậc hai.
Định nghĩa đường cong Spline
Ta xây dựng đường cong p(t) dựa trên (L+1) điểm kiểm soát bằng cách sử dụng các hàm Spline làm các hàm trộn như sau :
Vector T = (t0, t1, ... ) được gọi là vector nút.
Với mỗi điểm kiểm soát pk ta kết hợp nó với một hàm trộn tương ứng là Rk(t). Rk(t) là đa thức riêng phần liên tục trên mỗi đoạn con [ti, ti+1] và liên tục tại mỗi nút.
Khi đó :
Các đoạn đường cong riêng phần này gặp nhau tại các điểm nút và làm cho đường cong liên tục. Ta gọi những đường cong như vậy là đường cong Spline.
Vấn đề được đặt ra tiếp ở đây : Cho trước một vector nút, có tồn tại hay không họ các hàm trộn sao cho chúng có thể phát sinh ra mọi đường cong Spline được định nghĩa trên vector nút đó. Một họ các hàm như vậy được gọi là cơ sở cho Spline, nghĩa là bất kì đường cong Spline nào cũng có thể được đưa về cùng một công thức bằng cách chọn đa giác kiểm soát phù hợp.
Câu trả lời là có nhiều họ hàm như vậy, nhưng đặc biệt có một họ hàm trộn có giá mang nhỏ nhất đó là B-Spline (B là từ viết tắt của basis).
Định nghĩa đường cong B-Spline
Một đường cong B-Spline cấp m xây dựng dựa trên vector nút T và (L+1) điểm kiểm soát pk có dạng :
Trong đó Nk,m(t) là đa thức có bậc (m-1) có công thức đệ quy :
, k=0, 1, .., L
với
Các điểm ti có thể được xác định theo nhiều cách khác nhau. Một trong các cách đó là cho ti = i, lúc này khoảng cách giữa các điểm nút là bằng nhau. Hay ta có một cách định nghĩa khác :
với i = 0, …,L+m.