You are on page 1of 38

Mục lục

6.1. ĐƯỜNG CONG THAM SỐ BÉZIER.............................................................3


6.1.1. Phương trình biểu diễn đường cong Bézier........................................3
6.1.2. Tính chất của đường cong Bézier.......................................................8
6.1.3. Đạo hàm của đường cong Bézier.....................................................10
6.1.4. Xác định một điểm trên đường cong Bézier sử dụng thuật toán de Casteljau 11
6.2. ĐƯỜNG CONG THAM SỐ B-SPLINE KHÔNG ĐỒNG NHẤT..............12
6.2.1. Vector nút.........................................................................................13
6.2.2. Đường cong B-spline........................................................................15
6.2.3. Đạo hàm của đường cong B-spline không đồng nhất......................23
6.2.4. Xác định một điểm trên đường cong B-spline không đồng nhất......24
6.3. ĐƯỜNG CONG THAM SỐ B-SPLINE ĐỒNG NHẤT..............................33

KhoaCNTT-Trường ĐHBK-ĐHĐN 2
ĐƯỜNG CONG THAM SỐ BÉZIER VÀ B-SPLINE
6.1. ĐƯỜNG CONG THAM SỐ BÉZIER
Đường cong tham số Bézier được công bố vào năm 1962 bởi kỹ sư Pierre Bézier người Pháp,
nhằm phục vụ cho thiết kế thân ôtô tại hãng Renault. Các cơ sở toán học cho các đường cong Bézier
là các đa thức Bernstein được công bố từ năm 1912, nhưng không được sử dụng cho đến khi công
bố đường cong Bézier. Tuy nhiên, trước đó từ năm 1959, nhà toán học Paul de Casteljau cũng đã
độc lập nghiên cứu đường cong này và đưa ra giải thuật de Casteljau để xác định các điểm trên
đường cong trong hãng ôtô Citroën của Pháp.
6.1.1. Phương trình biểu diễn đường cong Bézier
Ta xét quá trình xây dựng phương trình tham số của các đường thẳng, đường cong bậc hai và
bậc ba.
a. Phương trình tham số đoạn thẳng

P1

C(u)

P0
 
Hình 6.3. Xác định một điểm trên đoạn thẳng theo tham số
Xét một đoạn thẳng có điểm đầu P0 và điểm cuối P1, điểm C là một điểm bất kì nằm trên đoạn
thẳng. Biểu diễn dạng phương trình tham số của đoạn thẳng này như sau:
C (u )  (1  u ) P0  uP1
với tham số u [0, 1]. Kí hiệu hai hàm cơ sở B0, B1 như sau:
B0  1  u
B1  u.
1
C (u )  B0 P0  B1P1   Bi Pi .
Thay lại vào phương trình trên: i 0

Như vậy, một điểm trên đường thẳng được xác định dựa vào các hàm cơ sở và các điểm tương ứng.
b. Phương trình tham số của đường cong bậc hai
Ta xét đa giác bao gồm các đỉnh P0, P1, P2.

KhoaCNTT – Trường ĐHBK Đà Nẵng 3


P2
S1
P1

C(u)
S0

P0
 
Hình 6.4. Đường cong tham số bậc hai
Chọn tham số u  [0, 1], điểm S0 trên cạnh P0P1 được biểu diễn như sau:
S0 (u )  (1  u ) P0  uP1
S1 (u )  (1  u ) P1  uP2 .
Tương tự điểm S1 trên được cạnh P1 P2 được xác định theo tham số u.
Xét cạnh mới S0S1, điểm C trên cạnh này được xác định theo tham số u cũng là điểm nằm trên
đường cong bậc hai có ba đỉnh điều khiển P0, P1, P2.
C (u )  (1  u ) S0  uS1.
Triển khai phương trình trên, ta có:
C (u )  (1  u )((1  u ) P0  uP1 )  u ((1  u ) P1  uP2 )
C (u )  (1  u )( P0  P0u  Pu
1 )  u ( P1  Pu
1  P2u )

C (u )  (1  u ) 2 P0  (2u (1  u )) P1  u 2 P2
đặt các hàm cơ sở Bi:
B0   1  u 
2

B1  2u (1  u )
B2  u 2
phương trình C(u) biểu diễn đường cong bậc hai (quadratic):
2
C (u )   Bi Pi .
0

c. Phương trình tham số đường cong bậc ba


Thực hiện quá trình tính toán trên với đường cong bậc ba có 4 đỉnh điều khiển P0, P1, P2, P3,
ta có phương trình biểu diễn như sau:
3
C (u )   Bi Pi .
i 0

với các hàm cơ sở Bi được xác định:

KhoaCNTT-Trường ĐHBK-ĐHĐN 4
B0  (1  u )3
B1  3u (1  u ) 2
B2  3u 2 (1  u )
B3  u 3 .
S1 P2
P1
Q0 Q1
S0 C(u)
S1

P3
P0

Hình 6.5. Đường cong tham số bậc ba


Các phương trình tham số biểu diễn đường cong C(u) trên là các trường hợp cụ thể của đường
cong tham số Bézier.
d. Phương trình đường cong tham số Bézier tổng quát:
n
C (u )   PB
i i , n (u )
i 0 với 0  u  1 .
Px, y, z  xi , yi , zi  , i  0n
Điểm Pi   có toạ độ: i i i i
3

trong đó:


 Pi  (i = 0...n) là các đỉnh điều khiển của đường cong;
Bi , n (u )
 là hàm trộn (blending funtion) hay còn gọi là đa thức Bernstein (Bernstein
polynomial) có bậc n:

n!
Bi ,n (u )  u i (1  u ) n i i  0...n
i !(n  i )!
Đa giác điều khiển của đường cong Bézier là đa giác thu được khi nối các đỉnh điều khiển
theo thứ tự lại với nhau.
Một điểm trên đường cong Bézier C(u) tại tham số u có toạ độ:
 n

C
 x (u )   xi Bi ,n (u ) 
 i 0

 n

C (u )   C y (u )   yi Bi ,n (u ) 
 i0 
 n 
 Cz (u )   zi Bi ,n (u ) 
 i0 

KhoaCNTT – Trường ĐHBK Đà Nẵng 5


P1 Đỉnh điều khiển
P2
Khung
điều khiển

Đường cong
Bézier
P0
P3
Hình 6.6. Đường cong Bézier bậc p = 3 có 4 đỉnh điều khiển
ua
u
Để biểu diễn tham số u trong đoạn [a, b] thay vì trong đoạn [0, 1], ta đặt: ba .

Bi ,n (u )
Hàm trộn xác định đường cong Bézier trong miền tham số [a, b]:
i n i
n!  u  a   ua
Bi ,n (u )    1  
i !(n  i )!  b  a   ba 
Hàm trộn là một đa thức có bậc nhỏ hơn số lượng các điểm điều khiển.
Ví dụ 6.1. Xét đường cong Bézier bậc hai có (n + 1) = 3 đỉnh điều khiển P0, P1, P2:
y4− y2 y 1− y 4
I 4= I1 +I2
y1− y2 y1− y2
 2
B1,2 (u )    u1 (1  u ) 21  2u (1  u )
1
 2
B2,2 (u )    u 2 (1  u ) 2 2  u 2
 2

P (u )  (1  u )2 P0  2u (1  u ) P1  u 2 P2 .
Đây là cũng là phương trình biểu diễn của một đường cong parabola.
Ví dụ 6.2. Xét đường cong Bézier bậc ba có (n + 1) = 4 đỉnh điều khiển P0, P1, P2, P3. Phương
trình của đường cong như sau:
C (u )  (1  u )3 P0  3u (1  u ) 2 P1  3u 2 (1  u ) P2  u 3 P3

C (u )   u 3  3u 2  3u  1 P0   3u 3  6u 2  3u  P1   3u 3  3u 2  P2   u 3  P3

C (u )  ( P0  3P1  3P2  P3 )u 3  (3P0  6 P1  3P2 )u 2  (3P0  3P1 )u  P0


a    P0  3P1  3P2  P3 
b   3P0  6 P1  3P2 
C (u )  au 3  bu 2  bu  d ,
c   3P0  3P1 
d   P0 

Bi ,n (u )
Các hàm được gọi là các hàm trộn vì một điểm C(u) trên đường cong có thể xem như

KhoaCNTT-Trường ĐHBK-ĐHĐN 6
được kết hợp từ các giá trị các đỉnh
P0 , P1 , , Pn và các hàm Bi ,n (u ) tương ứng.
Ví dụ 6.3. Với tham số u = 0.3, bốn đa thức của hàm trộn tương ứng với các đỉnh P0, P1, P2,
P3 có các giá trị 0.343, 0.441, 0.189, 0.027. Tổng của bốn đỉnh với các trọng số tương ứng cho kết
quả C(0.3).
Ví dụ 6.4. Given a Bézier curve with 4 control points: B0[1 0] , B1[3 3] , B2[6 3] , B3[8 1]
Determine any 5 points lying on the curve. Also, draw a rough sketch of the curve.
The given curve is defined by 4 control points. So, the given curve is a cubic bezier curve.
 
The parametric equation for a cubic bezier curve is-
C(u) = B0(1-u)3 + B13u(1-u)2 + B23u2(1-u) + B3u3
Substituting the control points B0, B1, B2 and B3, we get-
C(u) = [1 0](1-u)3 + [3 3]3u(1-u)2 + [6 3]3t2(1-u) + [8 1]u3     
 
Now, to get 5 points lying on the curve, assume any 5 values of t lying in the range 0 <= u <= 1.
Let 5 values of t are 0, 0.2, 0.5, 0.7, 1
 
For u = 0: Substituting u = 0 in (1), we get-
C(0) = [1 0](1-0)3 + [3 3]3(0)(1-u)2 + [6 3]3(0)2(1-0) + [8 1](0)3
C(0) = [1 0] + 0 + 0 + 0
C(0) = [1 0]
 
For u = 0.2: Substituting u = 0.2 in (1), we get-
C(0.2) = [1 0](1-0.2)3 + [3 3]3(0.2)(1-0.2)2 + [6 3]3(0.2)2(1-0.2) + [8 1](0.2)3
C(0.2) = [1 0](0.8)3 + [3 3]3(0.2)(0.8)2 + [6 3]3(0.2)2(0.8) + [8 1](0.2)3
C(0.2) = [1 0] x 0.512 + [3 3] x 3 x 0.2 x 0.64 + [6 3] x 3 x 0.04 x 0.8 + [8 1] x 0.008
C(0.2) = [1 0] x 0.512 + [3 3] x 0.384 + [6 3] x 0.096 + [8 1] x 0.008
C(0.2) = [0.512 0] + [1.152 1.152] + [0.576 0.288] + [0.064 0.008]
C(0.2) = [2.304 1.448]
 
For u = 0.5: Substituting u = 0.5 in (1), we get-
C(0.5) = [1 0](1-0.5)3 + [3 3]3(0.5)(1-0.5)2 + [6 3]3(0.5)2(1-0.5) + [8 1](0.5)3
C(0.5) = [1 0](0.5)3 + [3 3]3(0.5)(0.5)2 + [6 3]3(0.5)2(0.5) + [8 1](0.5)3
C(0.5) = [1 0] x 0.125 + [3 3] x 3 x 0.5 x 0.25 + [6 3] x 3 x 0.25 x 0.5 + [8 1] x 0.125
C(0.5) = [1 0] x 0.125 + [3 3] x 0.375 + [6 3] x 0.375 + [8 1] x 0.125
C(0.5) = [0.125 0] + [1.125 1.125] + [2.25 1.125] + [1 0.125]
C(0.5) = [4.5 2.375]
 
For u = 0.7: Substituting u = 0.7 in (1), we get-
C(u) = [1 0](1-u)3 + [3 3]3u(1-u)2 + [6 3]3t2(1-u) + [8 1]t3

KhoaCNTT – Trường ĐHBK Đà Nẵng 7


C(0.7) = [1 0](1-0.7)3 + [3 3]3(0.7)(1-0.7)2 + [6 3]3(0.7)2(1-0.7) + [8 1](0.7)3
C(0.7) = [1 0](0.3)3 + [3 3]3(0.7)(0.3)2 + [6 3]3(0.7)2(0.3) + [8 1](0.7)3
C(0.7) = [1 0] x 0.027 + [3 3] x 3 x 0.7 x 0.09 + [6 3] x 3 x 0.49 x 0.3 + [8 1] x 0.343
C(0.7) = [1 0] x 0.027 + [3 3] x 0.189 + [6 3] x 0.441 + [8 1] x 0.343
C(0.7) = [0.027 0] + [0.567 0.567] + [2.646 1.323] + [2.744 0.343]
C(0.7) = [5.984 2.233]
 
For u = 1: Substituting u = 1 in (1), we get-
C(1) = [1 0](1-1)3 + [3 3]3(1)(1-1)2 + [6 3]3(1)2(1-1) + [8 1](1)3
C(1) = [1 0] x 0 + [3 3] x 3 x 1 x 0 + [6 3] x 3 x 1 x 0 + [8 1] x 1
C(1) = 0 + 0 + 0 + [8 1]
C(1) = [8 1]
 
Following is the required rough sketch of the curve-
 

Ví dụ 6.5. Tính tọa độ điểm C(u) (với giá trị tham số u tự chọn trong khoảng [0, 1]) của
đường cong Bézier bậc p = 3, có 4 đỉnh P0(10.0, 0.0), P1(20.0, 30.0), P2(50.0, 40.0), P3(80.0, 0.0).
Biểu diễn hình học của đường cong và khung điều khiển được mô tả như hình sau.

6.1.2. Tính chất của đường cong Bézier

 Đường cong Bézier luôn đi qua điểm đầu và điểm cuối của khung điều khiển:
P(0)  P0 ,
P(1)  Pn .

KhoaCNTT-Trường ĐHBK-ĐHĐN 8
 Đường cong Bézier trở thành một đường thẳng khi tất cả các đỉnh điều khiển thẳng
hàng, lúc này bao lồi của đường cong Bézier là đường thẳng.
Bi ,n (u )  0 u   0, 1 .
 Hàm Benstein với i 0,..., n,
0  Bi ,n (u )  1 u   0, 1 .
 Các hàm Benstein có giá trị từ 0 đến 1: với i = 0,..., n,
 Đường cong Bézier có (n + 1) đỉnh điều khiển có bậc p = n. Trong mỗi hàm trộn, tham
số u có mũ cao nhất là i + (n  i) = n. Do đó, bậc của đường cong Bézier là n.
n

B i,n (u )  1
 Phân chia đơn vị: i 0 . Các hàm Benstein là các hệ số của triển khai nhị thức
(u + (1 u)) = 1, do đó tổng bằng 1.
n

 Tính bao lồi: Đường cong Bézier có (n + 1) đỉnh điều khiển nằm hoàn toàn trong phần
bao lồi được xây dựng bởi các đỉnh điều khiển này. Tính chất này bảo đảm cho đường
cong Bézier luôn nằm trong miền giới hạn.

 Tính giảm biến động: Nếu đường cong Bézier nằm trong một mặt phẳng, thì số giao
điểm của một đường thẳng với đường cong sẽ ít hơn số giao điểm của đường thẳng với
khung điều khiển. Tính chất này cho thấy hình dạng của khung điều khiển sẽ phức tạp
hơn nhiều so với hình dạng của đường cong Bézier mà khung điều khiển tạo ra.

 Tính bất biến với phép biến đổi affine: Để biến đổi affine với đường cong Bézier, ta có
thể biến đổi các đỉnh điều khiển của đường cong này. Sau đó, đường cong Bézier sẽ
được xây dựng dựa trên các đỉnh là kết quả của phép biến đổi.

Hình 6.7. Tính bao lồi của đường cong

Hình 6.8. Tính giảm biến động của đường cong

KhoaCNTT – Trường ĐHBK Đà Nẵng 9


P2

P1

P4

P0 P3
Hình 6.9. Đường cong Bézier và các hàm Bernstein tại tham số u = 0.5
Ví dụ 6.4. Đường cong Bézier có 5 đỉnh điều khiển và các hàm Bernstein tương ứng.
Hình 6.9 biểu diễn đường cong Bézier có 5 đỉnh điều khiển. Tại tham số u = 0.5 ta có 5 hàm
Bernstein. Để tính C(u) với u xác định, ta tính các trọng số Bn, i(u) ứng với đỉnh điều khiển Pi và
sau đó tính tổng của chúng.
6.1.3. Đạo hàm của đường cong Bézier
Để tính vector tiếp tuyến và pháp tuyến tại một điểm trên đường cong Bézier, ta cần tính đạo
hàm bậc nhất và bậc hai tại điểm này.
Xét đường cong Bézier có n + 1 đỉnh điều khiển P0, P1,..., Pn. Do các đỉnh điều khiển là hằng
số và độc lập với tham số u, do đó đạo hàm C'(u) được tính dựa vào đạo hàm của các hàm Bi,n(u):
d
Bi , n (u )  B 'i , n (u )  n  Bi 1, n 1 (u )  Bi , n 1 (u ) 
du
n 1
d
C (u )  C '(u )   Bi , n 1 (u )  n  Pi 1  Pi  
du i 0

đặt:
 Q0 = n(P1   P0),Q1  = n(P2    P1),Q2 = n(P3    P2),...,Qn-1 = n(Pn   Pn-1).
Phương trình trên được biểu diễn như sau:
n 1
C '(u )   Bi ,n 1 (u )Qi .
i 0

Như vậy, đạo hàm của một đường cong Bézier bậc n là một đường cong Bézier bậc n   1
được xác định bởi n đỉnh điều khiển. 
n(P1   P0), n(P2   P1), n(P3 P2),..., n(Pn   Pn-1).
Chú ý giá trị Pi+1   Pi là vector hướng Pi đến Pi+1 và giá trịn (Pi+1   Pi) gấp n lần vector hướng
này. Từ các đỉnh điều khiển của đường cong Bézier, ta có thể xác định được ngay các đỉnh điều
khiển của đường cong đạo hàm bậc nhất Bézier tương ứng.
Ví dụ 6.5. Cho đường cong Bézier bậc ba được xác định bởi 4 đỉnh điều khiển: (0, 0), (2, 1),
(5, 2), (6, 1). Xác định tiếp tuyến của đường cong với tham số u = 0.5.
Biểu diễn dạng ma trận của phương trình đường cong Bézier bậc ba như sau:

KhoaCNTT-Trường ĐHBK-ĐHĐN 10
 1 3 3 1   P0 
 3 6 3 0   P1 
C (u )  u 3 u2 u1 u  
 3 3 0 0   P2 
  
1 0 0 0   P3 

với P0 = (0, 0), P1 = (2, 1), P2 = (5, 2), P3 = (6, 1).

Tiếp tuyến được xác định bởi đạo hàm bậc nhất của phương trình đường cong Bézier:
 1 3 3 1  P0 
 3 6 3 0   P1 
C '(u )  3u 2 2u 1 0   .
 3 3 0 0   P2 
  
1 0 0 0   P3 

Tại điểm ứng với tham số u = 0.5, ta có:


 1 3 3 1  P0 
 3 6 3 0   P1 
C '(u )   3(0.5) 2 2(0.5) 1 0  
 3 3 0 0   P2 
  
1 0 0 0   P3 

=
 6.75 1.5 0 1

6.1.4. Xác định một điểm trên đường cong Bézier sử dụng thuật toán de Casteljau
Thuật toán de Casteljau sử dụng phương pháp nội suy tuyến tính và các phép toán trung gian
để xác định một điểm trên đường cong Bézier tại giá trị tham số u, cho phép phân mảnh khung điều
khiển để tạo ra hai đoạn cong Bézier từ đường cong ban đầu.
Thuật toán de Casteljau được mô tả như sau:
1) Pi 0 = Pi , i = 0,  , p  1.

2) Pi k = (1  u ) Pi k 1  uPi k 11 , k = 1, , p ; i = 0,  , p  k .

3) Tại bước k = p  1 ta có P0n 1 chính là điểm trên đường cong Bézier ứng với tham số u.

P1 P21
P2
P02 P03 2
P 1
P11 C(u)
P31

P0
P3
Hình 6.10. Phân chia hai đoạn cong Bézier từ đường cong ban đầu
Giá trị u có thể được chọn bất kì trong khoảng [0, 1]. Thông thường
1
u O( p 2 ) với p là bậc của đường cong.
2 . Độ phức tạp của giải thuật là

KhoaCNTT – Trường ĐHBK Đà Nẵng 11


1 P02 k=1 k=2 k=3
P1
P01 0
P0 P0 1-u
P20 P10
P1
2
u 1-u
P10
P30 P1
0
P1
2
P0
1
1-u u 1-u
P2
1
u P1 P30 C(u)
0 1-u u
P00 P3
P2 P02 1-u P21
u u
1
0 1 P2
u
P3 P03
(a) (b)

Hình 6.11. a) Xác định một điểm trên đường cong Bézier
b) Lược đồ của thuật toán De Casteljau
Ví dụ 6.6. Cho đường cong Bézier bậc ba có 4 đỉnh điều khiển. Với u = 0.5, áp dụng giải thuật de

Castejau, ta có được 2 đường cong Bézier mới có các đa giác điều khiển
( P00 , P01 , P02 , P03 ) và
( P03 , P12 , P21 , P03 ) tiếp tục lặp lại giải thuật de Castejau trên mỗi đường cong, cuối cùng ta có được
một đa giác xấp xỉ với đường cong Bézier.

Thuật toán vẽ đường cong Bézier được trình bày như sau:
struct Point{
int x;
int y;
};
void BezierCurve(int n, int *a){
int r, i, pn = 0, u;
Point P[50][50];
// Khởi tạo giá trị cho các điểm kiểm soát P
for(i = 0; i<n*n-1; i+=2){
P[pn][0].x=a[i];
P[pn][0].y=a[i+1];
putpixel(P[pn][0].x, P[pn][0].y, LIGHTCYAN);
pn++;
};
// Vẽ các điểm trên đường cong
for (u=1; u<100; u++){
for (r=1; r<n;r++)
for(i=0;i<n-r;i++) {
P[i][r].x =(1 - u/100.0)*P[i][r-1].x +
(u/100.0)*P[i+1][r-1].x;
P[i][r].y =(1 - u/100.0)*P[i][r-1].y
+(u/100.0)*P[i+1][r-1].y;
}
putpixel(P[0][n-1].x, P[0][n-1].y, LIGHTRED);
}
}

6.2. ĐƯỜNG CONG THAM SỐ B-SPLINE KHÔNG ĐỒNG NHẤT


Với đường cong Bézier, ta có thể tạo ra các dạng đường cong khác nhau bằng cách hiệu chỉnh

KhoaCNTT-Trường ĐHBK-ĐHĐN 12
các đỉnh điều khiển cho tới khi có được dạng đường cong thoả mãn yêu cầu đặt ra ban đầu. Tuy
nhiên, khi thay đổi bất kì một đỉnh điều khiển nào thì toàn bộ đường cong cũng sẽ bị thay đổi theo
do tất cả các đa thức Bernstein đều khác 0 trên toàn đoạn [0, 1].
Để biểu diễn đường cong và mặt cong tham số phức tạp, người ta thường sử dụng đường và
mặt cong B-spline.
Một hàm spline bậc p là một đa thức riêng phần cấp p có các đạo hàm cấp p liên tục ở mỗi
nút. Một đường cong C(u) có (n + 1) đỉnh điều khiển được xây dựng bằng cách sử dụng các hàm
spline làm hàm trộn như sau :

- Tập các nút u0, u1,..., um, với


ui  và u  u ;
i i+1

-
Ri (u ) là đa thức riêng phần liên tục trên mỗi đoạn cong [u , u ].
i i+1

Với mỗi đỉnh điều khiển Pi ta kết hợp nó với một hàm trộn tương ứng là
Ri (u ).
Các đoạn cong từng phần này nối nhau trơn và liên tục tại các điểm nút, làm cho toàn bộ
đường cong liên tục. Tập các đường cong như vậy được gọi là đường cong spline.
Cho trước một vector nút, có nhiều 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 trong các họ hàm trộn cho phép biểu
diễn bất kì đường cong spline nào dưới dạng một công thức chung bằng cách sử dụng khung điều
khiển phù hợp, được gọi là cơ sở cho spline. Đặc biệt họ hàm trộn có giá mang nhỏ nhất đó được
gọi là hàm B-spline (B: Basis).
P0 P2 P2 P4

P1 P3 P1 P3

P0 P2 P4

P1 P3
Hình 6.16. Các đoạn cong từng phần và đường cong spline
6.2.1. Vector nút
Đường cong tham số bao gồm nhiều đoạn cong liên tục nhau tại các điểm kết nối. Các điểm
kết nối này nằm ngay trên các đường cong. Giá trị tham số tại các điểm kết nối được gọi là nút. Một
đường cong có vector nút bao gồm tập các phần tử được xác định bởi nút đầu và nút cuối, thường
nằm trong đoạn [0, 1].
Vector nút là một thành phần quan trọng của đường cong B-spline. Số nút m của một vector
nút liên quan đến bậc p và số đỉnh điều khiển (n + 1) của một đường cong. Giá trị của mỗi nút ảnh
hưởng đến quá trình tham số hoá của từng đoạn cong đa thức của đường cong như sau:

KhoaCNTT – Trường ĐHBK Đà Nẵng 13


- Xác định miền tham số của đường cong;

- Xác định hàm cơ sở, các đỉnh điều khiển liên quan đến mỗi nút;

- Điểm kết nối giữa các đoạn cong đa thức của đường cong.

Cho một tập (n + 1) đỉnh điều khiển của một đường cong bậc p. Vector nút
U   u0 , u1 ,.., un  p , un  p 1 u  u   u
n  p 1
là một tập gồm (n + p + 2) giá trị số thực, với 0 1 dùng
để xác định hình dạng của đường và mă ̣t cong tham số. Vector nút chia một đoạn tham số thành nhiều
khoảng con sao cho trong từng khoảng con, mỗi đoạn cong của đường cong chịu tác động của (p + 1)

đỉnh điều khiển. Nếu nút ui xuất hiện k lần (


ui  ui 1  ... ui  k 1 với k >1) gọi là nút bội k, ký hiệu

ui (k ). Ngược lại, các nút chỉ xuất hiện một lần gọi là các nút đơn.
Có hai loại vector nút cơ bản là: vector nút đồng nhất (uniform) và vector nút không đồng
nhất (non-uniform).

6.2.1.1. Vector nút đồng nhất


Cho đường cong B-spline bậc p có (n + 1) đỉnh điều khiển. Vector nút dạng đồng nhất mở có
(n + p + 2) phần tử, các phần tử trong vector nút tăng dần đều.
U = {ui | ui 1  ui = , i = 0...m  1}
Ví dụ 6.10. Các vector nút đồng nhất
n = 3, p = 2, U = { 0, 1, 2, 3, 4, 5, 6 }
n = 3, p = 3, U = { 0.0, 0.14, 0.28, 0.42, 0.57, 0.71, 0.85, 1.0 }
n = 5, p = 3, U = { 0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25 }

6.2.1.2. Vector nút không đồng nhất


Các nút trong vector nút có khoảng cách tuỳ ý, không giảm, có thể lặp giá trị lại nhiều lần
U = {ui | ui  ui 1 , i = 0 ...n  1  p}
Ví dụ 6.11. Các vector nút không đồng nhất
n = 3, p = 2, U = { 0, 1, 2, 2, 2, 5, 6 }
n = 3, p = 3, U = { 0.3, 0.2, 0.1, 0, 0, 0.1, 0.1, 0.2 }
n = 5, p = 3, U = { 0, 0.25, 0.5, 0.5, 1.0, 1.5, 1.5, 1.5, 2.0, 3.0 }
Ta xét một trường hợp của vector nút không đồng nhất:
a. Vector nút khép
Dạng vector nút này có các giá trị lặp lại tại (p + 1) phần tử đầu và
(p + 1) phần tử cuối.
U  u0 , , u0 , u p 1 , , un , un 1 , , un  p 1
                .
p 1 n p p 1

Ví dụ 6.12. Các vector nút khép

KhoaCNTT-Trường ĐHBK-ĐHĐN 14
n = 3, p = 2, U = { 0, 0, 0, 0.7, 2, 2, 2 }
n = 4, p = 3, U = { 0, 0, 0, 0, 0.5, 1, 1, 1, 1 }
n = 5, p = 4, U = { 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2 }
Ta có thể xây dựng vector nút khép theo cách:
ui  u0  a, 1  i  p  1
ui 1  ui  , p  1  i  n  1
ui  un  p 1  b, n  1  i  n  p
b. Vector nút tuần hoàn
Dạng vector nút này có cùng cùng khoảng cách giữa các nút tương ứng ở đầu và cuối.
uni  uni 1  ui  ui 1 , i  1, , p  1 .

Ta có thể xây dựng vector nút tuần hoàn theo cách:


 a, b, c, d , e, , p  a, p  b, p  c, p  d , p  e .
với a  b  c  d  e và e  p  a, nếu khoảng cách giữa tất cả các nút đều nhau, ta có vector đồng
nhất tuần hoàn, ngược lại là vector không đồng nhất tuần hoàn.
Ví dụ 6.13. Các vector nút tuần hoàn.
n = 3, p = 2
U = {0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0}
n = 4, p = 3
U = {0.0, 0.09, 0.18, 0.23, 0.34, 0.45, 0.54, 0.63, 0.72, 0.81, 0.90, 1.0}
Tuỳ theo các vector nút có dạng đồng nhất (uniform) hoặc không đồng nhất (non-uniform),
đường cong B-spline có vector nút tương ứng gọi là đường cong B-spline đồng nhất và đường cong
B-spline không đồng nhất.
6.2.2. Đường cong B-spline
6.2.2.1. Phương trình đường cong B-spline
Đường cong B-spline được tạo thành ra từ một khung điều khiển mà bâ ̣c của đường cong
không phụ thuô ̣c vào số đỉnh của khung điều khiển. Phương trình biểu diễn của đường cong B-
spline như sau:
n
C (u )   N i , p (u ).Pi
i 0

trong đó:

 p là bậc (degree) của đường cong


 1  p  n  với p, n;
 Pi  3 , i  0...n là tập các đỉnh kiểm điều khiển của đường cong;

 Vector nút U có (n + p + 2) phần tử là một dãy các giá trị số không giảm.
U   u 0 , u1 ,..., u p , u p 1 ,..., u n , u n  1 ,..., u n  p 1 , ui  ui 1 , ui   .
Các hàm cơ sở B-spline được xác định trong các khoảng giá trị của vector nút U. Hàm cơ sở

KhoaCNTT – Trường ĐHBK Đà Nẵng 15


Ni , p (u )
thứ i bậc p ký hiệu được định nghĩa dạng biểu thức đệ quy (theo de Boor, Cox, Mansfield)
như sau:
 1 ui  u  ui 1
 Ni , 0  u   
 0

 N  u   u  ui N ui  k  1  u
i , k 1  u   Ni 1, k 1  u  , ui  u  ui  k 1
 i, k
u  u u  u
 ik i i  k 1 i 1

u  u p 1 , un 1  .
với i  0...( n  p  k ) , k  p,..., 0; tham số
0
ui  k  ui ui  k  1  ui  1
Để tránh trường hợp mẫu số bằng 0 khi , , ký hiệu 0 = 0.
Ni , k  u 
Mỗi hàm được xác định trên k khoảng cách của vector nút.
[u , u ]
Đường cong B-spline được xác định trong đoạn tham số p n và bao gồm nhiều đoạn
cong, các đoạn cong này gặp nhau tại các điểm được xác định tương ứng với các giá trị của vector
C (u p ), C (u p 1 ),..., C (un ).
nút:

Chú ý các phần tử


 Pi  ,  u i ,  Ni , p (u ) luôn có chỉ số i bắt đầu cùng một giá trị (ví dụ bắt đầu
i  0 ).

N (u )
Hàm cơ sở B-spline bậc p, i , p chỉ phụ thuộc vào bậc p và vector nút U, được biểu diễn
bằng cách kết hợp tuyến tính các hàm cơ sở B-spline có bậc thấp hơn.
u  ui
i, k  i, k
ui  k  ui N (u )
Đặt , hàm cơ sở i , p được biểu diễn dạng rút gọn:
 1, ui  u  ui 1
 Ni , 0  u   
 0, khác
i , k i , k 1  u    1   i 1, k  N i 1, k 1  u  .
N u   N
 i, k  
Trong hệ toạ độ Cartesian, một điểm trên đường cong B-spline tương ứng với tham số u có
toạ độ như sau:
 n

 x ( u )   N i , p (u ) Pi x
 i 0

 n
C (u )   y (u )   N i , p (u ) Pi y
 i 0
 n


z (u )  
i 0
N i , p (u ) Pi z

KhoaCNTT-Trường ĐHBK-ĐHĐN 16
P2 P4
P5
P1 C2(u) C3(u) C4(u)
C1(u)
P3
P0 P6

u0=u1=u2=u3 u4 u5 u6 u7=u8=u9=u10

U = { 0, 0, 0, 0, 0.25, 0.5, 0.75, 1, 1, 1, 1 }


Hình 6.17. Đường cong B-spline bậc p = 3 và đồ thị các hàm cơ sở
Có thể xem các đỉnh điều khiển của đường cong giống như các nam châm hút đường cong.
Lực hút của các đỉnh điều khiển được mô tả toán học bằng hàm cơ sở B-spline. Khoảng tham số u
của đường cong được xác định trên vector nút U như sau:
Khoảng tham số của đường cong

u0 = u1 = u2 = … = up+1 up+2 …. un-1 un un+1 = … = un+p = un+p+1


Các nút trong

Hình 6.18. Các nút trong và khoảng tham số xác định của đường cong B-spline
6.2.2.2. Triển khai các hàm cơ sở theo bậc p và vectơ nút U không đồng nhất
a) Hàm cơ sở bậc 1

b) Hàm cơ sở bậc 2

c) Hàm cơ sở bậc 3

KhoaCNTT – Trường ĐHBK Đà Nẵng 17


6.2.2.3. Tính chất của hàm cơ sở

N i , p (u )
Xét hàm cơ sở , ta có:
Ni , p (u )  0, u[ui , ui  p ]
 Hàm .
Ni , p (u ) u , u  , p 1.
 Hàm xác định trong khoảng  i i  p 
 Tổng giá trị các hàm cơ sở luôn bằng 1:
m p

N
i 0
i, p (u )  1, u  u p 1 , u m1  .

n −1
 Hàm
Ni , p (u )
đạt giá trị cực tiểu tại
P0 .
N i , p (u ) p 1
 Tính liên tục: Hàm bậc p liên tục tại C tại mỗi nút đơn.

6.2.2.4. Tính chất của đường cong B-spline


Đường cong B-spline là dạng tổng quát của đường cong Bézier nên có đầy đủ các tính chất
của đường cong Bézier. Ngoài ra, đường cong B-spline còn có một số tính chất mở rộng khác.
Xét đường cong B-spline C(u) bậc p có (n + 1) đỉnh điều khiển và vector nút cắt U =
{ u0 =  u1 =... = up, up+1, …., unp1, un-p = unp+1  =... =  um}. Một đường cong B-spline được biểu diễn
ở dạng tham số bằng các hàm cơ sở đệ quy và các giá trị nút liên hệ với các biến tham số và các
đỉnh điều khiển. Các tính chất của đường cong như sau:
 Bậc p của đường cong: 1  p  n : Khi bậc càng cao, đường cong B-spline sẽ càng xa các
đỉnh điều khiển. Hình 6.19 minh hoạ ảnh hưởng của bậc đến đường cong.

 Vector nút có m = n + p + 2 phần tử. Việc chọn vector nút có ảnh hưởng lớn đến các

KhoaCNTT-Trường ĐHBK-ĐHĐN 18
N i , p (u )
hàm cơ sở và do đó sẽ ảnh hưởng đến hình dạng đường cong.

 Mỗi đỉnh điều khiển cần đến một hàm cơ sở và có m  =  n  +  p  + 1 hàm cơ sở.
N 0, p (u )  0 u, [u0 , u p 1 )
 Hệ số của đỉnh P0 là hàm cơ sở  , .
 Đường cong khép B-spline C(u) đi qua đỉnh điều khiển đầu và cuối. Do đường cong khép
u0  u1  ...  u p  0
B-spline có nên các hàm cơ sở N 0, 0 (u ), N1, 0 (u ),..., N p 1, 0 (u )
cũng
u  0, N 0, p (0)  1 C (0)  P0 . Tương tự ta
bằng 0. Chỉ có hàm N p ,0 (u )  0 . Vậy nếu thì 


C (1)  Pn .

a) Bậc p=3 b) Bậc p=4

c) Bậc p=5 d) Bậc p=6

Hình 6.19. Ảnh hưởng của các bậc đến hình dạng của đường cong

 Đường cong C(u) và đạo hàm của cấp 1, 2,..., p  1 của C(u) liên tục trên toàn đường
cong;
p 1
 Đường cong B-spline bao gồm (n p + 1) đoạn cong bậc p nối nhau và liên tục cấp C
 u ,..., un p1 ;
tại giá trị các nút p
Mỗi điểm trên đường cong bị ảnh hưởng bởi (p + 1) đỉnh điều khiển. Mỗi đỉnh điều
khiển sẽ ảnh hưởng đến (p + 1) đoạn cong của đường cong: Đường cong B-spline C(u)
bao gồm nhiều đoạn cong liền nhau và liên tục tại các điểm nối. Mỗi đoạn cong là một
đa thức bậc p được định nghĩa trong mỗi khoảng nút. Tính chất quan trọng này cho
phép thiết kế các đường cong B-spline có hình dáng phức tạp với bậc thấp.
 Ảnh hưởng cục bộ: Khi dịch chuyển một đỉnh điều khiển chỉ ảnh hưởng đến vài phân
đoạn lân cận của đỉnh điều khiển đó, không ảnh hưởng đến toàn bộ đường cong.
 Tính bao lồi mạnh: Toàn bộ đường cong B-Spline hay một đoạn cong luôn nằm trong
phần bao lồi của các khung điều khiển tương ứng.

KhoaCNTT – Trường ĐHBK Đà Nẵng 19


u  [ui , ui 1 ) ta có đoạn cong C(u) nằm trong phần bao lồi của các đỉnh điều khiển

Pi  p , Pi  p 1 ,..., Pi N (u ),..., Ni  p 1, p (u ), Ni  p , p (u )  0


. Chỉ có (p + 1) hàm cơ sở i , p trong khoảng nút
này.
N k , p (u )
Do  là hệ số của đỉnh điều khiển Pk tương ứng, nên chỉ có (p + 1) đỉnh điều khiển
Pi , Pi 1 , Pi 2 ,..., Pi  p
có hệ số khác 0.
p

N i k , p (u )  1
u  [ui , ui 1 ) có trung bình trọng số, nên đường
Do tổng các hàm cơ sở k 0 ,
Pi , Pi 1 , Pi  2 ,..., Pi  p
cong C(u) nằm trong phần bao lồi của các đỉnh  . Tính bao lồi mạnh được thể
hiện khi toàn bộ đường cong nằm trong phần bao lồi của các đỉnh điều khiển thì từng đoạn cong
cũng nằm trong các bao lồi con.
Một điểm nằm trên đường cong B-spline C(u) bậc p thì sẽ nằm trong bao lồi của p điểm lân
cận.
N i , p (u ) Pi
 Biến đổi cục bộ (Local Modification Scheme): Nếu vị trí đỉnh Pi thay đổi, tích
[ui , ui  p 1 );
cũng thay đổi và chỉ ảnh hưởng đến đoạn cong C(u) trong khoảng tham số
u  [ui , ui 1 ) : Ni , p (u ) Pi  0
Nếu
u  [ui , ui 1 ) : N i , p (u ) Pi  0
Nếu
 Đường cong C(u) liên tục cấp Cpk tại nút u bội k. 
Nếu tham số u không phải là các giá trị trong vector nút, điểm C(u) nằm trong đoạn
cong bậc p và khả vi vô hạn lần. Nếu u là một giá trị trong vector nút và bội k, thì hàm
N i , p (u ) pk pk
liên tục cấp C , và do vậy, đường cong C(u) cũng liên tục cấp C tại nút
bội k.
 Tính giảm biến động (variation diminishing): Xét một đường cong nằm trong một mặt
phẳng, số điểm giao nhau của một đường thẳng trong mặt phẳng với đường cong sẽ ít
hơn số lần mà đường thẳng giao nhau với khung điều khiển.

ui ui+1

KhoaCNTT-Trường ĐHBK-ĐHĐN 20
Hình 6.20. Tính bao lồi của đường cong B-spline
Đường cong Bézier là một trường hợp đặc biệt của đường cong B-spline khép:
Khi p = n, vector U có 2(p + 1) nút và lặp lại tại (p + 1) nút đầu tiên và (p + 1) nút cuối cùng,
đường cong B-spline trở thành đường cong Bézier. Bất biến đối với các phép biến đổi affine
(phép tịnh tiến, phép quay, phép vị tự), phép chiếu phối cảnh. Khi áp dụng một phép biến
đổi affine lên đường cong, ta chỉ cần thực hiện trên các đỉnh điều khiển, sau đó dựng
đường cong B-spline dựa trên các đỉnh đã biến đổi, không cần phải thực hiện biến đổi trên
đường cong.
Ví dụ 6.14. Xét đường cong B-spline bậc p = 3 có n + 1 = 11 đỉnh điều khiển và vector nút
khép có 15 nút.
u u u u u1 u1 u1 u1
0 1 2 3 u4 u5 u6 u7 u8 u9 u10 1 2 3 4
0.1 0.2 0.3 0. 0.6 0.7 0.8
0 0 0 0 2 5 7 5 2 5 7 1 1 1 1
Xét tham số u  [u4, u5) = [0.12, 0.25) có vị trí C(u) tương ứng trên đường cong. Có p + 1 = 4
hàm cơ sở N4,3(u), N3,3(u), N2,3(u) và N1,3(u) khác 0 trong khoảng tham số này và có các đỉnh điều
khiển P4, P3, P2, P1 tạo thành bao lồi chứa đoạn cong C(u).
Với tham số u [u9,u10) = [0.75, 0.87), bốn hàm cơ sở N9,3(u), N8, 3(u), N7,3(u) và N6,3(u) khác 0
trong khoảng tham số này. Bao lồi chứa đoạn cong là P9, P8, P7 và P6.
Ví dụ 6.15. Đường cong B-spline bậc p = 3 có n = 10 đỉnh điều khiển, vector nút cắt U = {0,
0, 0, 0,.., 1, 1, 1, 1} có 14 phần tử. Có 8 khoảng trong vector nút U. Mỗi khoảng tương ứng với một
đoạn cong. Điểm kết nối các đoạn cong được hiển thị trong hình 6.21.

C2(u)
C3(u)

C1(u) C7(u)
C4(u)
C8(u)
C6(u)

C5(u)

Hình 6.21. Đường cong B-spline bao gồm nhiều đoạn cong
Ví dụ 6.16. Xét đường cong B-spline có 18 đỉnh điều khiển (n  = 17), bậc p = 4. Vector nút
khép như sau:
u0 = u1 = u2 = u3 = u4 = 0.0
u6 = u7= 0.25

KhoaCNTT – Trường ĐHBK Đà Nẵng 21


u8 = 0.375
u9 = u10 = u11= u12= 0.5
u13  =u14 = u15 = u16 = 0.625
u17 = 0.75
u18  = u19 = u20 = u21 =  u22 = 0.875.

Hình 6.22. Tính liên tục của đường cong


Ta có:
Nút u5, u8, u12, u17 bội 2, C(u) liên tục cấp C3 tại các nút này.
Nút u6 bội 2, đường cong liên tục cấp C2 tại C(u6).
Nút u9 bội 3, đường cong liên tục cấp C1 tại C(u9).
Nút u13 bội 4, đường cong liên tục cấp C0 tại C(u13).
Ngoài ra, đường cong liên tục cấp C4 với các tham số u không phải là giá trị của các nút.
Trong hình 6.22 minh hoạ sự khác nhau giữa các mức liên tục cấp C4, C 3 và C2. Với trường
hợp C1, điểm tương ứng nằm trên một cạnh, trường hợp C0 làm cho đường cong đi qua đỉnh điều
khiển.
Thuật toán tính giá trị của hàm cơ sở trong i với tham số u, bậc p, vector nút U[], kết quả trả
về giá trị N[p+1] được minh hoạ như sau:
void BasisFuns(int i, double u, int p,
double *U, double *N)
{
double *left = NULL, *right = NULL, saved, temp;
int j, r;
if(!(left = (double*)calloc(p+1, sizeof(double)))) return;
if(!(right=(double*)calloc(p+1, sizeof(double))))
{ free(left); return; }
N[0] = 1.0;
for(j = 1; j <= p; j++)
{
left[j] = u - U[i+1-j];
right[j] = U[i+j] - u;
saved = 0.0;
for(r = 0; r < j; r++)
{
temp = N[r] / (right[r+1] + left[j-r]);
N[r] = saved + right[r+1] * temp;
saved = left[j-r] * temp;
}

KhoaCNTT-Trường ĐHBK-ĐHĐN 22
N[j] = saved;
}
free(left);
free(right);
}

>> Tham khảo thêm:


[1]. Mục 2.5 Computational Algorithms (p67 - p76), The NURBS Book, 2 nd, Les Piegl, Wayne
Tiller

6.2.3. Đạo hàm của đường cong B-spline không đồng nhất
Xét đường cong B-spline C(u) bậc p có (n + 1) đỉnh đỉnh điều khiển, vector nút U có (n + p
+ 2) phần tử được xác định U = {u0= u1 =... = up, up+1,..., un, un+1 =... = un+p+1}.
Đạo hàm bậc nhất của đường cong B-spline được xác định:
n
d
C '(u )   N 'i , p (u) Pi.
du i 0

Trong đó, đạo hàm của mỗi hàm cơ sở được tính:


p p
N'i , p  u   N i , p 1  u   N i 1, p 1  u 
ui  p  ui ui  p 1  ui 1
n 1
d
C '(u )   N i 1, p 1 (u ).Qi
do vậy: du i0 .

Các điểm Qi được xác định:


P
Qi  ( Pi 1  Pi ).
ui  p 1  ui 1
Vậy đạo hàm của đường cong B-spline là một đường cong B-spline khác có bậc (p – 1) và có n
đỉnh điều khiển Q0, Q1,..., Qn1 và vector nút V có (n + p) phần tử được xác định: V = {u0= u1 =... = up1,
up+1,..., un1, un =... = un+p1} có cùng các giá trị up+1,..., un1 với vector nút U.
Như vậy hàm cơ sở Ni+1, p1(u) được xác định trong vector nút U tương đương với hàm cơ sở
Ni, p1(u) xác định trong vector nút V. Do đó phương trình đạo hàm của đường cong B-spline được
biểu diễn lại như sau:
n 1
d
C '(u )   N i , p 1 (u ).Qi .
du i0

Ta xét các đạo hàm tại vị trí đặc biệt của một đường cong B-spline khép đi qua đỉnh điều
khiển đầu và cuối.
Đạo hàm tại các điểm đầu và cuối của đường cong:
C'(0) = Q0
C'(1) = Qn1.

KhoaCNTT – Trường ĐHBK Đà Nẵng 23


p
Q0  ( P1  P0 ).
u p 1
Do u0 =.... = up = 0 nên với i = 0, ta có:

PP
Như vậy vector tiếp tuyến tại C'(0) có cùng hướng với vector 0 1 hay nói cách khác, cạnh
đầu tiên của khung đa giác điều khiển là tiếp tuyến của đường cong C(u).
p
Qn 1   Pn  Pn1  .
Tương tự, ta có: 1  un1

Cạnh cuối của khung đa giác điều khiển cũng là tiếp tuyến của đường cong C(u) tại C(1).
Do đạo hàm bậc nhất của một đường cong B-spline cũng là một đường cong B-spline, ta có
thể áp dụng cách trên để lần lượt tính các đạo hàm bậc cao của đường cong B-spline.

>> Dựng hình một đường cong B-spline bậc 3


6.2.4. Xác định một điểm trên đường cong B-spline không đồng nhất
Để xác định điểm trên đường cong B-spline ứng với tham số u, ta có thể sử dụng các cách
sau:
1) Triển khai phương trình đường cong và các hàm B-spline cơ sở
2) Sử dụng cách biểu diễn ma trận của phương trình đường cong
3) Sử dụng giải thuật de Boor.
P0 (0,10),
Ví dụ 6.19. Cho đường cong B-spline có n + 1 = 4 đỉnh điều khiển
P1 (10, 40), P2 (40, 40), P3 (50, 0) , bậc p = 2, vector nút U = {0, 0, 0, 0.5, 1, 1, 1}.

Xác định điểm của đường cong tương ứng với tham số u = 0.45.

3
C (u )   N i ,k (u ) Pi  N 0,2 (u ) P0  N1,2 (u ) P1  N 2,2 (u ) P2  N 3,2 (u ) P3
i 0

ta cần xác định các hàm cơ sở :


N 0,1 (u ), N 0,2 (u ), N1,1 (u ), N1,2 (u ), N 2,1 (u ), N 2,2 (u ), N 3,1 (u ), N 3,2 (u )

vector nút U có các phần tử:


u0 u1 u2 u3 u4 u5 u6
0 0 0 0.5 1 1 1

, u   u 2 , u3 
Tại giá trị tham số u =0.45 các hàm cơ sở được xác định như sau:
span = 2
* Với k = 0, i = 0,..,5
N 0,0 (0.45)  0 [u0 , u1 )  [0.00, 0.00)
N1,0 (0.45)  0 [u1 , u2 )  [0.00, 0.00)

KhoaCNTT-Trường ĐHBK-ĐHĐN 24
N 2,0 (0.45)  1 [u2 , u3 )  [0.00, 0.50)
N 3,0 (0.45)  0 [u3 , u4 )  [0.50,1.00)
N 4,0 (0.45)  0 [u4 , u5 )  [1.00,1.00)
N 5,0 (0.45)  0 [u5 , u6 )  [1.00,1.00)

* Với k = 1, i = 0,..,4
N 0,1 (0.45) 
u  u[0] u[0  1  1]  u
 ) N 0,11 (u )  N 01,11 (u )
u[0  1]  u[0] (u[0  1  1]  u[0]
u  u[0] u[2]  u
 N 0,0 (u )  N1,0 (u )
u[1]  u[0] u[2]  u[0]
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00  0.00 0.00  0.00
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00 0.00
 0.000
N1,1 (0.45) 
u  u[1] u[1  1  1]  u
 ) N1,11 (u )  N11,11 (u )
u[1  1]  u[1] (u[1  1  1]  u[1]
u  u[1] u[3]  u
 N1,0 (u )  N 2,0 (u )
u[2]  u[1] u[3]  u[1]
u  0.00 0.50  u
 N1,0 (u )  N 2,0 (u )
0.00  0.00 0.50  0.00
u  0.00 0.50  u
 N1,0 (u )  N 2,0 (u )
0.00 0.50
 0.100
N 2,1 (0.45) 
u  u[2] u[2  1  1]  u
 ) N 2,11 (u )  N 21,11 (u )
u[2  1]  u[2] (u[2  1  1]  u[2]
u  u[2] u[4]  u
 N 2,0 (u )  N 3,0 (u )
u[3]  u[2] u[4]  u[2]
u  0.00 1.00  u
 N 2,0 (u )  N 3,0 (u )
0.50  0.00 1.00  0.50
u  0.00 1.00  u
 N 2,0 (u )  N 3,0 (u )
0.50 0.50
 0.900

KhoaCNTT – Trường ĐHBK Đà Nẵng 25


N 3,1 (0.45) 
u  u[3] u[3  1  1]  u
 ) N 3,11 (u )  N31,11 (u )
u[3  1]  u[3] (u[3  1  1]  u[3]
u  u[3] u[5]  u
 N 3,0 (u )  N 4,0 (u )
u[4]  u[3] u[5]  u[3]
u  0.50 1.00  u
 N 3,0 (u )  N 4,0 (u )
1.00  0.50 1.00  1.00
u  0.50 1.00  u
 N 3,0 (u )  N 4,0 (u )
0.50 0.00
 0.000
N 4,1 (0.45) 
u  u[4] u[4  1  1]  u
 ) N 4,11 (u )  N 41,11 (u )
u[4  1]  u[4] (u[4  1  1]  u[4]
u  u[4] u[6]  u
 N 4,0 (u )  N 5,0 (u )
u[5]  u[4] u[6]  u[4]
u  1.00 1.00  u
 N 4,0 (u )  N 5,0 (u )
1.00  1.00 1.00  1.00
u  1.00 1.00  u
 N 4,0 (u )  N 5,0 (u )
0.00 0.00
 0.000
* Với k = 2, i = 0,..,3
N 0,2 (0.45) 
u  u[0] u[0  2  1]  u
 ) N 0,21 (u )  N 01,21 (u )
u[0  2]  u[0] (u[0  2  1]  u[0]
u  u[0] u[3]  u
 N 0,1 (u )  N1,1 (u )
u[2]  u[0] u[3]  u[0]
u  0.00 0.50  u
 N 0,1 (u )  N1,1 (u )
0.00  0.00 0.50  0.00
u  0.00 0.50  u
 N 0,1 (u )  N1,1 (u )
0.00 0.50
 0.010
N1,2 (0.45) 
u  u[1] u[1  2  1]  u
 ) N1,21 (u )  N11,21 (u )
u[1  2]  u[1] (u[1  2  1]  u[1]
u  u[1] u[4]  u
 N1,1 (u )  N 2,1 (u )
u[3]  u[1] u[4]  u[1]
u  0.00 1.00  u
 N1,1 (u )  N 2,1 (u )
0.50  0.00 1.00  0.00
u  0.00 1.00  u
 N1,1 (u )  N 2,1 (u )
0.50 1.00
 0.585

KhoaCNTT-Trường ĐHBK-ĐHĐN 26
N 2,2 (0.45) 
u  u[2] u[2  2  1]  u
 ) N 2,21 (u )  N 21,21 (u )
u[2  2]  u[2] (u[2  2  1]  u[2]
u  u[2] u[5]  u
 N 2,1 (u )  N3,1 (u )
u[4]  u[2] u[5]  u[2]
u  0.00 1.00  u
 N 2,1 (u )  N 3,1 (u )
1.00  0.00 1.00  0.50
u  0.00 1.00  u
 N 2,1 (u )  N 3,1 (u )
1.00 0.50
 0.405
N 3,2 (0.45) 
u  u[3] u[3  2  1]  u
 ) N 3,21 (u )  N 31,21 (u )
u[3  2]  u[3] (u[3  2  1]  u[3]
u  u[3] u[6]  u
 N 3,1 (u )  N 4,1 (u )
u[5]  u[3] u[6]  u[3]
u  0.50 1.00  u
 N 3,1 (u )  N 4,1 (u )
1.00  0.50 1.00  1.00
u  0.50 1.00  u
 N3,1 (u )  N 4,1 (u )
0.50 0.00
 0.000

Vị trí của điểm trên đường cong B-spline C(u) ứng với tham số u = 0.45:
3
C (u )   N i , k (u ) Pi  N 0,2 (u ) P0  N1,2 (u ) P1  N 2,2 (u ) P2  N 3,2 (u ) P3
i 0

  0.5  u  u (1  u )u 
2
 0.5  u  u2
 P 
 0   P
 1  P2  0 P3
 0.5   0.25 0.5  0.5

  0.5  0.45  0.45 (1  0.45)0.45 


2
 0.5  0.45  0.45 2
  P0     P1  P2
 0.5   0.25 0.5  0.5

 0.01P0  0.585 P1  0.405 P2


  0.01  0  0.585  10  0.405  40, 0.01  0  0.585  40  0.405  40 
 (22.05, 39.7).
Kiểm tra kết quả tại Website http://nurbscalculator.in/

KhoaCNTT – Trường ĐHBK Đà Nẵng 27


Ví dụ 2. Tính tọa độ điểm C(u) (với giá trị tham số u tự chọn trong khoảng [0, 1]) của đường cong
B-spline không đồng nhất bậc p = 2, có 4 đỉnh P0(10.0, 0.0), P1(20.0, 30.0), P2(50.0, 40.0), P3(80.0,
0.0); véctơ nút U = {0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 1.0 }. Biểu diễn hình học của đường cong
và khung điều khiển được mô tả như hình sau.

Ví dụ 3. Tính các hàm cơ sở Ni,k(u) cho một đường cong B-spline C(u) tại u = 0.2 có:
 n+1=3
 bậc p = 2
 Véc tơ nút: U = { 0, 0, 0, 1, 1, 1},

KhoaCNTT-Trường ĐHBK-ĐHĐN 28
span = 2
* k = 0, i = 0,..,4
N 0,0 (0.20)  0 [u0 , u1 )  [0.00, 0.00)
N1,0 (0.20)  0 [u1 , u 2 )  [0.00, 0.00)
N 2,0 (0.20)  1 [u2 , u3 )  [0.00,1.00)
N 3,0 (0.20)  0 [u3 , u 4 )  [1.00,1.00)
N 4,0 (0.20)  0 [u4 , u5 )  [1.00,1.00)

* k = 1, i = 0,..,3
N 0,1 (0.20) 
u  u[0] u[0  1  1]  u
 ) N 0,11 (u )  N 01,11 (u )
u[0  1]  u[0] (u[0  1  1]  u[0]
u  u[0] u[2]  u
 N 0,0 (u )  N1,0 (u )
u[1]  u[0] u[2]  u[0]
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00  0.00 0.00  0.00
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00 0.00
 0.000
N1,1 (0.20) 
u  u[1] u[1  1  1]  u
 ) N1,11 (u )  N11,11 (u )
u[1  1]  u[1] (u[1  1  1]  u[1]
u  u[1] u[3]  u
 N1,0 (u )  N 2,0 (u )
u[2]  u[1] u[3]  u[1]
u  0.00 1.00  u
 N1,0 (u )  N 2,0 (u )
0.00  0.00 1.00  0.00
u  0.00 1.00  u
 N1,0 (u )  N 2,0 (u )
0.00 1.00
 0.800

N 2,1 (0.20) 
u  u[2] u[2  1  1]  u
 ) N 2,11 (u )  N 21,11 (u )
u[2  1]  u[2] (u[2  1  1]  u[2]
u  u[2] u[4]  u
 N 2,0 (u )  N 3,0 (u )
u[3]  u[2] u[4]  u[2]
u  0.00 1.00  u
 N 2,0 (u )  N 3,0 (u )
1.00  0.00 1.00  1.00
u  0.00 1.00  u
 N 2,0 (u )  N 3,0 (u )
1.00 0.00
 0.200

KhoaCNTT – Trường ĐHBK Đà Nẵng 29


N 3,1 (0.20) 
u  u[3] u[3  1  1]  u
 ) N 3,11 (u )  N 31,11 (u )
u[3  1]  u[3] (u[3  1  1]  u[3]
u  u[3] u[5]  u
 N 3,0 (u )  N 4,0 (u )
u[4]  u[3] u[5]  u[3]
u  1.00 1.00  u
 N 3,0 (u )  N 4,0 (u )
1.00  1.00 1.00  1.00
u  1.00 1.00  u
 N 3,0 (u )  N 4,0 (u )
0.00 0.00
 0.000

* k = 2, i = 0,..,2
N 0,2 (0.20) 
u  u[0] u[0  2  1]  u
 ) N 0,21 (u )  N 01,21 (u )
u[0  2]  u[0] (u[0  2  1]  u[0]
u  u[0] u[3]  u
 N 0,1 (u )  N1,1 (u )
u[2]  u[0] u[3]  u[0]
u  0.00 1.00  u
 N 0,1 (u )  N1,1 (u )
0.00  0.00 1.00  0.00
u  0.00 1.00  u
 N 0,1 (u )  N1,1 (u )
0.00 1.00
 0.640
N1,2 (0.20) 
u  u[1] u[1  2  1]  u
 ) N1,21 (u )  N11,21 (u )
u[1  2]  u[1] (u[1  2  1]  u[1]
u  u[1] u[4]  u
 N1,1 (u )  N 2,1 (u )
u[3]  u[1] u[4]  u[1]
u  0.00 1.00  u
 N1,1 (u )  N 2,1 (u )
1.00  0.00 1.00  0.00
u  0.00 1.00  u
 N1,1 (u )  N 2,1 (u )
1.00 1.00
 0.320
N 2,2 (0.20) 
u  u[2] u[2  2  1]  u
 ) N 2,21 (u )  N 21,21 (u )
u[2  2]  u[2] (u[2  2  1]  u[2]
u  u[2] u[5]  u
 N 2,1 (u )  N 3,1 (u )
u[4]  u[2] u[5]  u[2]
u  0.00 1.00  u
 N 2,1 (u )  N 3,1 (u )
1.00  0.00 1.00  1.00
u  0.00 1.00  u
 N 2,1 (u )  N3,1 (u )
1.00 0.00
 0.040

KhoaCNTT-Trường ĐHBK-ĐHĐN 30
Ví dụ 3. Tính các hàm cơ sở Ni,k(u) cho một đường cong B-spline C(u) có:
 n+1=5
 bậc p = 2
 Véc tơ nút: U = {0, 0, 0, 0.3, 0.5, 1, 1, 1}
span = 2
* k = 0, i = 0,..,6
N 0,0 (u)  0 [u0 , u1 )  [0.00, 0.00)
N1,0 (u)  0 [u1 , u2 )  [0.00, 0.00)
N 2,0 (u )  1| 0 [u2 , u3 )  [0.00, 0.30)
N 3,0 (u )  0 |1 [u3 , u4 )  [0.30, 0.50)
N 4,0 (u )  0 |1 [u4 , u5 )  [0.50,1.00)
N 5,0 (u )  0 [u5 , u6 )  [1.00,1.00)
N 6,0 (u )  0 [u6 , u7 )  [1.00,1.00)
* k = 1, i = 0,..,5
N 0,1 (u ) 
u  u[0] u[0  1  1]  u
 ) N 0,11 (u )  N 01,11 (u )
u[0  1]  u[0] (u[0  1  1]  u[0]
u  u[0] u[2]  u
 N 0,0 (u )  N1,0 (u )
u[1]  u[0] u[2]  u[0]
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00  0.00 0.00  0.00
u  0.00 0.00  u
 N 0,0 (u )  N1,0 (u )
0.00 0.00

N1,1 (u ) 
u  u[1] u[1  1  1]  u
 ) N1,11 (u )  N11,11 (u )
u[1  1]  u[1] (u[1  1  1]  u[1]
u  u[1] u[3]  u
 N1,0 (u )  N 2,0 (u )
u[2]  u[1] u[3]  u[1]
u  0.00 0.30  u
 N1,0 (u )  N 2,0 (u )
0.00  0.00 0.30  0.00
u  0.00 0.30  u
 N1,0 (u )  N 2,0 (u )
0.00 0.30

KhoaCNTT – Trường ĐHBK Đà Nẵng 31


N 2,1 (u ) 
u  u[2] u[2  1  1]  u
 ) N 2,11 (u )  N 21,11 (u )
u[2  1]  u[2] (u[2  1  1]  u[2]
u  u[2] u[4]  u
 N 2,0 (u )  N 3,0 (u )
u[3]  u[2] u[4]  u[2]
u  0.00 0.50  u
 N 2,0 (u )  N 3,0 (u )
0.30  0.00 0.50  0.30
u  0.00 0.50  u
 N 2,0 (u )  N 3,0 (u )
0.30 0.20

N 3,1 (u ) 
u  u[3] u[3  1  1]  u
 ) N 3,11 (u )  N 31,11 (u )
u[3  1]  u[3] (u[3  1  1]  u[3]
u  u[3] u[5]  u
 N 3,0 (u )  N 4,0 (u )
u[4]  u[3] u[5]  u[3]
u  0.30 1.00  u
 N 3,0 (u )  N 4,0 (u )
0.50  0.30 1.00  0.50
u  0.30 1.00  u
 N 3,0 (u )  N 4,0 (u )
0.20 0.50

N 4,1 (u ) 
u  u[4] u[4  1  1]  u
 ) N 4,11 (u )  N 41,11 (u )
u[4  1]  u[4] (u[4  1  1]  u[4]
u  u[4] u[6]  u
 N 4,0 (u )  N 5,0 (u )
u[5]  u[4] u[6]  u[4]
u  0.50 1.00  u
 N 4,0 (u )  N 5,0 (u )
1.00  0.50 1.00  1.00
u  0.50 1.00  u
 N 4,0 (u )  N 5,0 (u )
0.50 0.00

N 5,1 (u ) 
u  u[5] u[5  1  1]  u
 ) N 5,11 (u )  N 51,11 (u )
u[5  1]  u[5] (u[5  1  1]  u[5]
u  u[5] u[7]  u
 N 5,0 (u )  N 6,0 (u )
u[6]  u[5] u[7]  u[5]
u  1.00 1.00  u
 N 5,0 (u )  N 6,0 (u )
1.00  1.00 1.00  1.00
u  1.00 1.00  u
 N 5,0 (u )  N 6,0 (u )
0.00 0.00

* k = 2, i = 0,..,4

KhoaCNTT-Trường ĐHBK-ĐHĐN 32
N 0,2 (u ) 
u  u[0] u[0  2  1]  u
 ) N 0,21 (u )  N 01,21 (u )
u[0  2]  u[0] (u[0  2  1]  u[0]
u  u[0] u[3]  u
 N 0,1 (u )  N1,1 (u )
u[2]  u[0] u[3]  u[0]
u  0.00 0.30  u
 N 0,1 (u )  N1,1 (u )
0.00  0.00 0.30  0.00
u  0.00 0.30  u
 N 0,1 (u )  N1,1 (u )
0.00 0.30

N1,2 (u ) 
u  u[1] u[1  2  1]  u
 ) N1,21 (u )  N11,21 (u )
u[1  2]  u[1] (u[1  2  1]  u[1]
u  u[1] u[4]  u
 N1,1 (u )  N 2,1 (u )
u[3]  u[1] u[4]  u[1]
u  0.00 0.50  u
 N1,1 (u )  N 2,1 (u )
0.30  0.00 0.50  0.00
u  0.00 0.50  u
 N1,1 (u )  N 2,1 (u )
0.30 0.50

N 2,2 (u ) 
u  u[2] u[2  2  1]  u
 ) N 2,21 (u )  N 21,21 (u )
u[2  2]  u[2] (u[2  2  1]  u[2]
u  u[2] u[5]  u
 N 2,1 (u )  N 3,1 (u )
u[4]  u[2] u[5]  u[2]
u  0.00 1.00  u
 N 2,1 (u )  N 3,1 (u )
0.50  0.00 1.00  0.30
u  0.00 1.00  u
 N 2,1 (u )  N3,1 (u )
0.50 0.70

N 3,2 (u ) 
u  u[3] u[3  2  1]  u
 ) N 3,21 (u )  N 31,21 (u )
u[3  2]  u[3] (u[3  2  1]  u[3]
u  u[3] u[6]  u
 N3,1 (u )  N 4,1 (u )
u[5]  u[3] u[6]  u[3]
u  0.30 1.00  u
 N 3,1 (u )  N 4,1 (u )
1.00  0.30 1.00  0.50
u  0.30 1.00  u
 N 3,1 (u )  N 4,1 (u )
0.70 0.50

KhoaCNTT – Trường ĐHBK Đà Nẵng 33


N 4,2 (u ) 
u  u[4] u[4  2  1]  u
 ) N 4,21 (u )  N 41,21 (u )
u[4  2]  u[4] (u[4  2  1]  u[4]
u  u[4] u[7]  u
 N 4,1 (u )  N 5,1 (u )
u[6]  u[4] u[7]  u[4]
u  0.50 1.00  u
 N 4,1 (u )  N 5,1 (u )
1.00  0.50 1.00  1.00
u  0.50 1.00  u
 N 4,1 (u )  N5,1 (u )
0.50 0.00

Thuật toán xác định một điểm trên đường cong B-spline bậc p tương ứng với tham số u trong
vector nút U được trình bày như sau:
int CurvePoint3D(int n, int p, double *U, double *P, double u, double *C)
{
int span, j, k;
double *N = NULL;
if(!(N = (double*)calloc(p+1, sizeof(double))))
return ERROR;
span = FindSpan(n, p, u, U);
BasisFuns(span, u, p, U, N);
C[0] = 0.0; C[1] = 0.0; C[2] = 0.0;
for(j = 0; j <= p; j++){
k = (span-p+j)*4;
C[0] = C[0] + N[j]*P[k];
C[1] = C[1] + N[j]*P[k+1];
C[2] = C[2] + N[j]*P[k+2];
}
free(N);
return 1;
}
int FindSpan(int n, int p, double u, double *U)
{
int low, mid, high;
if(u >= U[n]) return n;
if(u <= U[p])return p;
low = 0; /* low = p; */
high = n+1; mid = (low+high)/2;
while(u < U[mid] || u >= U[mid+1]){
if(u < U[mid])high = mid;
else low = mid;
mid = (low + high)/2;
}
return(mid);
}

KhoaCNTT-Trường ĐHBK-ĐHĐN 34
6.3. ĐƯỜNG CONG THAM SỐ B-SPLINE ĐỒNG NHẤT
Đường cong B-spline đồng nhất (uniform) là một trường hợp đặc biệt của đường cong B-spline
không đồng nhất (non-uniform) với vector nút đồng nhất có khoảng cách giữa tất cả các nút bằng
nhau: ui+1 – ui = , với i = 0... n + p. Điều này cho phép các phép biến đổi dịch chuyển
(translation), tỉ lệ (scaling) trên vector nút không ảnh hưởng đến hình dạng của hàm B-spline cơ sở
Ni,k(u). Đây là đường cong có các điểm đầu và cuối không đi qua các đỉnh điều khiển đầu và cuối
tương ứng.
Một đường cong B-spline đồng nhất được xác định bằng tập hợp (n + 1) đỉnh điều khiển
P0 (x0, y0, z0) đến Pn(xn, yn, zn), với p là bậc của đường cong.
Phương trình biểu diễn một đường cong B-spline đồng nhất như sau:
n
C (u )   N i , p (u ).Pi
i 0

trong đó:

 p là bậc (degree) của đường cong


 1  p  n  với p, n;
 Pi  3 , i  0...n là tập các đỉnh kiểm điều khiển của đường cong;

 Vector nút U đồng nhất có (n + p + 2) phần tử là một dãy các giá trị số không giảm.
U   0, 1, 2, 3, , n  p  1
Chọn vector nút đồng nhất có ui  = i.
ui+k – ui = i + k – i = k
Từ hàm cơ sở của đường cong B-spline không đồng nhất ta suy ra hàm cơ sở B-spline Ni,p(u)
thứ i bậc p được xác định trong các khoảng giá trị của vector nút đồng nhất
U   0, 1, 2, 3, , n  p  1
được biểu diễn như sau:
 1, i  u  i  1
 N i ,0 (u )  
 0, khác

 N (u )  u  i N (u )  i  k  1  u N
 i ,k i , k 1 i 1, k 1 (u  1)
k k

với i  0  n  p  k , k  1  p.
N i , k (u )  Ni 1, k (u  1)
Các hàm trộn cách đều với khoảng cách đơn vị:
1.2.1. Triển khai các hàm cơ sở theo bậc p và vectơ nút U đồng nhất
Xét véctơ nút U = { 0, 1, 2, 3, 4, ….} ta các các hàm Ni,k(u) như sau:
a) Hàm cơ sở bậc p = 1

b) Hàm cơ sở bậc p = 2

KhoaCNTT – Trường ĐHBK Đà Nẵng 35


c) Hàm cơ sở bậc p = 3

1.2.2. Biểu diễn dạng ma trận của phương trình đường cong B-spline đồng nhất

Từ phương trình của đường cong B-spline đồng nhất tổng quát, ta có phương trình đường
cong B-spline bậc ba (p = 3) đồng nhất có 4 đỉnh điều khiển P0, P1, P2, P3 như sau:
P2
P1

P3
P0
Hình 6.23. Đường cong B-spline với vector nút đồng nhất
C  u   N0 ,3 (u ) P0  N1,3 (u ) P1  N 2 ,3 (u ) P2  N 3 ,3 (u ) P3

Với các hàm cơ sở Ni,3(u) được xác định:

KhoaCNTT-Trường ĐHBK-ĐHĐN 36
1
 1 u
3
N0 ,3 (u ) 
6
1
N1,3 (u )   3u 3  6u 2  4 
6
1
N 2 ,3 (u )   3u 3  3u 2  1
6
1
N 3,3 (u )  u 3
6
1 1
C (u ) 
6
 u 3  3u 2  3u  1 P0   3u 3  6u 2  4  P1 
6
1 1
  3u 3  3u 2  3u  1 P2  u 3 P3 .
6 6
Biểu diễn phương trình đường cong B-spline đồng nhất bậc ba dạng ma trận:
 P0 
P 
C  u    N0 ,3 (u ) N1,3 (u ) N 2 ,3 (u ) N 3,3 (u )   1 
 P2 
 
 P3 

1 4 1 0   P0 
 3 0  
3 0   P1 
C  u   1 u u 2 u 3  
 3 6 3 0   P2 
  
 1 3 3 1  P3 

Các hàm trộn cách đều với khoảng cách đơn vị: N i , k (u )  N i 1, k (u  1).
Tương tự ta xây dựng được các ma trận biểu diễn của đường cong B-spline đồng nhất các bậc
p = 2, 3, 4, 5, 6 như sau:

KhoaCNTT – Trường ĐHBK Đà Nẵng 37


>> _ebook - Curves and Surfaces for Computer Graphics - David Salomon 2006.pdf

Ví dụ 6.18. Tính tọa độ điểm C(u) (với giá trị tham số u tự chọn trong khoảng [0, 1]) của
đường cong B-spline đồng nhất có:
 Bậc p = 3
 4 đỉnh P0(10.0, 0.0), P1(20.0, 30.0), P2(50.0, 40.0), P3(80.0, 0.0)
 Véctơ nút U = {1, 2, 3, 4, 5, 6, 7, 8}.
Biểu diễn hình học của đường cong và khung điều khiển được mô tả như hình sau.

Ví dụ 6.19. Xét đường cong B-spline đồng nhất có n + 1 = 8 đỉnh điều khiển. Do đó có n – 2
đoạn cong. Vậy đường cong xác định trên các tham số từ u3 đến u8 (i = 3...8). Mỗi đoạn cong Ci có
tham số u  [ui, ui+1) với ui+1   ui = 1được mô tả như sau:
C3 phụ thuộc các đỉnh P0, P1, P2, P3

KhoaCNTT-Trường ĐHBK-ĐHĐN 38
C4 phụ thuộc các đỉnh P1, P2, P3, P4.
C5 phụ thuộc các đỉnh P2, P3, P4, P5
...
Ci  phụ thuộc các đỉnh Pi-3, Pi-2, Pi-1, Pi.
P3

P5
P7
P1
P6
P4
P2
P0

Hình 6.24. Các đoạn cong của đường cong B-spline đồng nhất
Mỗi đoạn cong được xác định qua bốn đỉnh điều khiển. Đây là tính điều khiển cục bộ, sẽ
không có đỉnh nào ngoài bốn đỉnh này có ảnh hưởng đến hình dạng của đường cong. Ngược lại,
mỗi đỉnh điều khiển Pi sẽ có ảnh hưởng đến 4 đoạn cong.

--------------------

KhoaCNTT – Trường ĐHBK Đà Nẵng 39

You might also like