Professional Documents
Culture Documents
Đà Nẵng, 06/2021
Đồ án Lập trình tính toán
MỤC LỤC
MỤC LỤC............................................................................................................1
DANH MỤC HÌNH VẼ.......................................................................................2
MỞ ĐẦU.............................................................................................................. 3
1. Tổng quan đề tài...............................................................................................4
2. Cơ sở lý thuyết..................................................................................................4
2.1 Nội suy các điểm dữ liệu............................................................................4
2.2 Đường cong B-spline đồng nhất.................................................................4
2.3 Tính chất đường cong B-spline...................................................................5
2.4 Vecto nút....................................................................................................9
2.5 Hàm cơ sở...................................................................................................9
3. Tổ chức cấu trúc dữ liệu và thuật toán............................................................12
3.1 Phát biểu bài toán......................................................................................12
3.2 Cấu trúc dữ liệu........................................................................................13
3.3 Thuật toán.................................................................................................13
3.4 Các ví dụ minh họa...................................................................................14
4. Chương trình và kết quả.................................................................................22
4.1 Tổ chức chương trình................................................................................22
4.2 Ngôn ngữ cài đặt.......................................................................................24
4.3 Kết quả......................................................................................................24
Ví dụ 1 :......................................................................................................24
Ví dụ 2:.......................................................................................................28
4.4 Nhận xét và đánh giá................................................................................30
5. Kết luận và hướng phát triển...........................................................................30
5.1 Kết luận....................................................................................................30
Trang 1
Đồ án Lập trình tính toán
Trang 2
Đồ án Lập trình tính toán
Trang 3
Đồ án Lập trình tính toán
MỞ ĐẦU
Công nghệ thông tin ngày càng phát triển mạnh mẽ và dồ họa máy tính là một
lĩnh vực công nghệ phát triển rất nhanh. Đồ họa đã được áp dụng rộng rãi trong nhiều
lĩnh vực khác nhau từ khoa học, công nghệ, y tế, kỹ thuật đến giải trí… Đồ họa máy
tính phát triển dựa trên các kết quả của hình học khác, đặc biệt bao gồm đại số và giải
tích. Hiện nay, với sự phát triển của phần cứng máy tính, đồ họa cũng phát triển nhanh
hơn, tuy vậy nền tảng của nó vẫn là cơ sở mô hình hóa hình học. Có nhiều bài toán đặt
ra trong đồ họa máy tính. Một trong những bái toán cơ bản của nó là xử lí các đường
cong và mặt cong.
Trang 4
Đồ án Lập trình tính toán
2. Cơ sở lý thuyết
Giả sử ta có (n + 1) điểm dữ liệu D = {Di} = {D0, D1, D2,…, Dn}, đường cong
B-spline C(u) được xây dựng từ các điểm dữ liệu D có thể theo cách nội suy:
2.1 Nội suy các điểm dữ liệu
Nội suy là phương pháp tái tạo đường cong sao cho toạ độ tất cả các điểm dữ
liệu nằm trên đường cong và thoả mãn vectơ đạo hàm tại điểm dữ liệu này.
Sai số
Điểm
dữ liệu
Trang 5
Đồ án Lập trình tính toán
trong đó:
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
U 0, 1, 2, 3, , n p 1
vector nút đồng nhất đượ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.
Ni , k (u ) N i 1, k (u 1)
Các hàm trộn cách đều với khoảng cách đơn vị:
Trang 6
Đồ án Lập trình tính toán
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 2.2 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 hàm cơ sở Ni,p(u) 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 (u ) 0 u, [u , u )
p 1
Hệ số của đỉnh P0 là hàm cơ sở 0, p , 0
.
Đường cong khép B-spline C(u) đi qua đỉnh điều khiển đầu và cuối. Do
u u ... u 0
đường cong khép B-spline có 0 1 p
nên các hàm cơ sở
N (u ), N (u ),..., N
0, 0 1, 0 (u )
cũng bằng 0. Chỉ có hàm N (u ) 0 . Vậy nếu
p 1, 0 p ,0
Trang 7
Đồ án Lập trình tính toán
Hình 2.2 Ảnh hưởng của các bậc đến hình dạng của đườ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.
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
N (u ),..., Ni p 1, p (u ), Ni p , p (u ) 0
khiển Pi p , Pi p 1 ,..., Pi . 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 , p (u ) 1
, u [ui , ui 1 ) có trung bình trọng số,
ik
Do tổng các hàm cơ sở k 0
P , P , P ,..., Pi p
nên đường cong C(u) nằm trong phần bao lồi của các đỉnh i i 1 i 2 . 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.
Trang 8
Đồ án Lập trình tính toán
Biến đổi cục bộ (Local Modification Scheme): Nếu vị trí đỉnh Pi thay đổi, tích
N i , p (u ) Pi
cũng thay đổi và chỉ ảnh hưởng đến đoạn cong C(u) trong khoảng
tham số [ui , ui p 1 );
u [ui , ui 1 ) : N i , p (u ) Pi 0
Nếu
u [ui , ui 1 ) : Ni , 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 ) liên tục cấp C , và do vậy, đường
pk
pk
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
Đườ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.
Trang 9
Đồ án Lập trình tính toán
U = {ui | ui 1 ui = , i = 0...m 1}
1 ui u ui 1
Ni , 0 u
0
N u u ui N ui k 1 u
i , k 1 u N i 1, k 1 u , ui u ui k 1
i, k
u u u u
ik i i k 1 i 1
Trang 10
Đồ án Lập trình tính toán
0
ui k ui ui k 1 ui 1 0
Để tránh trường hợp mẫu số bằng 0 khi , , ký hiệu = 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
C (u p ), C (u p 1 ),..., C (un ).
với các giá trị của vector nút:
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 ) N i , p (u ) Pi
z
i 0
P2 P 4
P5
P1 C2(u) C3(u) C4(u)
C1(u)
P3
P0 P6
u0=u1=u2=u3 u4 u5 u6 u7=u8=u9=u10
Trang 11
Đồ án Lập trình tính toán
Hình 2.5. Các nút trong và khoảng tham số xác định của đường cong
B-spline
Công thức triển khai:
+Hàm cơ sở bậc 1:
+Hàm cơ sở bậc 2:
+Hàm cơ sở bậc 3:
Trang 12
Đồ án Lập trình tính toán
Ni , p (u )
Xét hàm cơ sở , ta có:
Ni , p (u ) 0, u[ui , ui p ]
Hàm .
N (u ) u , u , p 1.
Hàm i , p 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 m1 .
n −1
Hàm
N i , p (u )
đạt giá trị cực tiểu tại
P0 .
Ni , 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.
Trang 13
Đồ án Lập trình tính toán
Đầu ra là tọa độ các đỉnh của đường cong B-spline do chương trình tính toán
xuất ra màn hình và được lưu vào file output.txt
3.2 Cấu trúc dữ liệu
3.3 Thuật toán
B1:Để nô ̣i suy (n + 1) điểm dữ liê ̣u, đường cong B-spline bâ ̣c ba nội suy cần
có:
Bậc p = 3
Để cho điểm đầu và cuối P0 D0 , Pn 2 Dn , ta xây dựng vectơ nút lặp (p + 1)
giá trị tại đầu và cuối.
Với số đỉnh n và bậc p = 3 đã xác định, véctơ nút U có (n + 7) phần tử: U =
u0 , u1 , , un 6 được xây dựng theo dạng mở đồng nhất.
B4: Xây dựng hệ phương trình xác định các đỉnh điều khiển {Pi}
Ta cần tìm các đỉnh điều khiển: P1 , P2 , , Pn1 dựa vào phương trình đường
cong, vectơ nút U và các điểm dữ liệu D.
Để đường cong nội suy, toạ độ các điểm dữ liệu {Di} phải thuộc đường cong
C(u) tại tham số tương ứng.
Trang 14
Đồ án Lập trình tính toán
3 1 0 0 ... 0 0
0
1 7 1
0 ... 0 0 0 P 2D
4 12 6 1 0
1 2 1 P2 D1
0 ... 0 0 0
6 3 6 P3 D2
0 0 0 0 ... 0 0 0 ... ...
0 0 1 2 1 P D
0 ... 0 n 1 n 2
6 3 6 P D
n 1
1 7 1 P 2 D
n
0 0 0 ... 0 n 1 n
6 12 4
0 0 0 ... 0 0 1 3
Tìm tập đỉnh điều khiển sau khi nghịch đảo ma trận N nhân với tập điểm dữ
liệu và kết hợp cùng D0, Dn.
P=N-1.D.
Ma trận N là giá trị hàm cơ sở tính được khi truyền các tham số u vào.
Ma trận nghịch đảo của N là ma trận dùng phương pháp Gauss để tính toán.
Ma trận nhân là kết quả sau khi nhân ma trận nghịch đảo của N với ma trận
chứa tập điểm dữ liệu.
Bước 5: Kiểm tra và đánh giá đường cong tái tạo.
3.4 Các ví dụ minh họa
Ví dụ 1: Tái tạo đường cong B-spline đồng nhất khép bậc 3 bằng phương pháp
nội suy
Cho tập 8 điểm dữ liệu {Di} được xác định như sau:
Di D0 D1 D2 D3 D4 D5 D6 D7
x 1 4 7 8 11 15 18 19
y 3 2 4 5 2 8 15 4
Xây dựng một đường cong B-spline bâ ̣c p = 3 (cubic) đồng nhất nô ̣i suy các
điểm dữ liê ̣u này.
Bước 1: Thiết lập các tham số cho đường cong B-Spline nội suy các điểm
dữ liệu {Di}
Để nô ̣i suy (n + 1) điểm dữ liê ̣u, đường cong B-spline bâ ̣c ba nội suy cần có:
Trang 15
Đồ án Lập trình tính toán
Bậc p = 3
n = 7 đỉnh điều khiển P0,P1,P2,…..,P7 với (n + 1) điểm dữ liệu ta phải nội suy
(n + 3) đỉnh điều khiển.
Tiếp theo cần đi tính vectơ nút U.
Bước 2: Xây dựng véctơ tham số T
Do yêu cầu xây dựng đường cong B-spline bậc p = 3 nên phần này ta không
phải xây dựng bộ vectơ tham số T = {t0, t1, …, tn}
Bước 3: Xây dựng véctơ nút U cho đường cong B-spline nội suy
Để cho điểm đầu và cuối P0 = D0 , Pn+2 = Dn, ta xây dựng vectơ nút lặp (p + 1)
giá trị tại đầu và cuối.
Với 10 đỉnh điều khiển và bậc p=3 đã xác định, véctơ nút U có (n + 7) phần tử
được xây dựng theo dạng mở đồng nhất:
Ta cần tìm các đỉnh điều khiển: P1 , P2 , , Pn1 dựa vào phương trình đường
cong, vectơ nút U và các điểm dữ liệu D.
Để đường cong nội suy, toạ độ các điểm dữ liệu {Di} phải thuộc đường cong
C(u) tại tham số tương ứng.
Trang 16
Đồ án Lập trình tính toán
t0 D0 P0
1 7 1
t 1 D1 N1,3 u4 P1 N 2,3 u4 P2 N 3,3 u4 P3 P1 P2 P3
4 12 6
1 2 1
t2 D2 N 2,3 u5 P2 N 3,3 u5 P3 N 4,3 u5 P4 P2 P3 P4
6 3 6
.....
1 2 1
t n2 Dn 2 N n 2,3 un 1 Pn 2 N n 1,3 un1 Pn 1 N n,3 un 1 Pn Pn 2 Pn 1 Pn
6 3 6
1 2 1
t n2 Dn 2 N n 2,3 un 1 Pn 2 N n 1,3 un1 Pn 1 N n ,3 un 1 Pn Pn 2 Pn 1 Pn
6 3 6
Pn 2 Dn
Kết hợp với các phương trình trên, ta có hệ (n + 1) phương trình có (n + 1) ẩn:
3P1 P2 2 D0
1
P1 7 P2 1 P3 D1
4 12 6
1 2 1
P2 P3 P4 D2
6 3 6
...
1 2 1
Pn 2 Pn 1 Pn Dn 2
6 3 6
1 7 1
Pn 1 Pn Pn 1 Dn 1
6 12 4
Pn 3Pn 1 2 Dn
Trang 17
Đồ án Lập trình tính toán
3 1 0 0 ... 0 0 0
1 7 1
0 ... 0 0 0 P1 2 D0
4 12 6
1 2 1 P2 D1
0 ... 0 0 0
6 3 6 P3 D2
0 0 0 0 ... 0 0 0 ... ...
0 0 1 2 1 P D
0 ... 0 n 1 n 2
6 3 6 Pn Dn 1
1 7 1 P 2 D
0 0 0 ... 0 n 1 n
6 12 4
0 0 0 ... 0 0 1 3
| 3.824 | 1.240 |
| 7.705 | 4.040 |
| 7.357 | 6.602 |
| 10.869 | -0.447 |
| 15.168 | 7.186 |
| 18.458 | 19.704 |
| 18.819 | 9.235 |
Ma trận đỉnh điều khiển{Pi}được xác định sau khi nhân ma trận N-1 với ma
trận tập điểm dữ liệu và kết hợp cùng D0, Dn.
Bac cua duong cong : 3
So dinh dieu khien : 10
Chieu cua diem du lieu : 2
Trang 18
Đồ án Lập trình tính toán
Hình 3.1 Hình ảnh đường cong được tái tạo của ví dụ 1
Ví dụ 2: Tái tạo đường cong B-spline đồng nhất khép bậc 3 bằng phương pháp
nội suy
Cho tập 8 điểm dữ liệu {Di} được xác định như sau:
Di D0 D1 D2 D3 D4 D5
xi 1 3 8 12 10 15
yi 3 7 3 5 7 9
zi 2 5 6 4 1 12
Xây dựng một đường cong B-spline bâ ̣c p = 3 (cubic) đồng nhất nô ̣i suy các
điểm dữ liê ̣u này.
Trang 19
Đồ án Lập trình tính toán
Bước 1: Thiết lập các tham số cho đường cong B-Spline nội suy các điểm
dữ liệu {Di}
Để nô ̣i suy (n + 1) điểm dữ liê ̣u, đường cong B-spline bâ ̣c ba nội suy cần có:
Bậc p = 3
n = 5 đỉnh điều khiển P0,P1,P2,…..,P5 với (n + 1) điểm dữ liệu ta phải nội suy
(n + 3) đỉnh điều khiển.
Tiếp theo cần đi tính vectơ nút U.
Bước 2: Xây dựng véctơ tham số T
Do yêu cầu xây dựng đường cong B-spline bậc p = 3 nên phần này ta không
phải xây dựng bộ vectơ tham số T = {t0, t1, …, tn}
Bước 3: Xây dựng véctơ nút U cho đường cong B-spline nội suy
Để cho điểm đầu và cuối P0 = D0 , Pn+2 = Dn, ta xây dựng vectơ nút lặp (p + 1)
giá trị tại đầu và cuối.
Với 8 đỉnh điều khiển và bậc p = 3 đã xác định, véctơ nút U có (n + 7) phần tử
được xây dựng theo dạng mở đồng nhất:
Ta cần tìm các đỉnh điều khiển: P1 , P2 , , Pn1 dựa vào phương trình đường
cong, vectơ nút U và các điểm dữ liệu D.
Để đường cong nội suy, toạ độ các điểm dữ liệu {Di} phải thuộc đường cong
C(u) tại tham số tương ứng.
Bước 4: Xây dựng hệ phương trình xác định các đỉnh điều khiển {Pi}
Ta cần tìm các đỉnh điều khiển: P1 , P2 , , Pn1 dựa vào phương trình đường
cong, vectơ nút U và các điểm dữ liệu D.
Để đường cong nội suy, toạ độ các điểm dữ liệu {Di} phải thuộc đường cong
C(u) tại tham số tương ứng.
Trang 20
Đồ án Lập trình tính toán
t0 D0 P0
1 7 1
t 1 D1 N1,3 u4 P1 N 2,3 u4 P2 N 3,3 u4 P3 P1 P2 P3
4 12 6
1 2 1
t2 D2 N 2,3 u5 P2 N 3,3 u5 P3 N 4,3 u5 P4 P2 P3 P4
6 3 6
.....
1 2 1
t n2 Dn 2 N n 2,3 un 1 Pn 2 N n 1,3 un1 Pn 1 N n,3 un 1 Pn Pn 2 Pn 1 Pn
6 3 6
1 2 1
t n2 Dn 2 N n 2,3 un 1 Pn 2 N n 1,3 un1 Pn 1 N n ,3 un 1 Pn Pn 2 Pn 1 Pn
6 3 6
Pn 2 Dn
Kết hợp với các phương trình trên, ta có hệ (n + 1) phương trình có (n + 1) ẩn:
3P1 P2 2 D0
1
P1 7 P2 1 P3 D1
4 12 6
1 2 1
P2 P3 P4 D2
6 3 6
...
1 2 1
Pn 2 Pn 1 Pn Dn 2
6 3 6
1 7 1
Pn 1 Pn Pn 1 Dn 1
6 12 4
Pn 3Pn 1 2 Dn
Trang 21
Đồ án Lập trình tính toán
3 1 0 0 ... 0 0 0
1 7 1
0 ... 0 0 0 P1 2 D0
4 12 6
1 2 1 P2 D1
0 ... 0 0 0
6 3 6 P3 D2
0 0 0 0 ... 0 0 0 ... ...
0 0 1 2 1 P D
0 ... 0 n 1 n 2
6 3 6 Pn Dn 1
1 7 1 P 2 D
0 0 0 ... 0 n 1 n
6 12 4
0 0 0 ... 0 0 1 3
Ma trận đỉnh điều khiển{Pi}được xác định sau khi nhân ma trận N-1 với ma
trận tập điểm dữ liệu và kết hợp cùng D0, Dn.
Bac cua duong cong : 3
Trang 22
Đồ án Lập trình tính toán
Hình 3.2 Hình ảnh đường cong được tái tạo của ví dụ 2
Xây dựng một đường cong B-spline bâ ̣c p = 3 (cubic) đồng nhất nô ̣i suy các
điểm dữ liê ̣u này.
Trang 23
Đồ án Lập trình tính toán
Input: Nhập từ file bậc p = 3,số điểm dữ liệu n = 7, số chiều d = 2 và giá trị
của các điểm dữ liệu ứng với số chiều tương ứng{ D0 D7}.
Output: Xuất ra màn hình console kết quả của (n+3=10) đỉnh điều khiển
P1P10.
Ví dụ 2: Tái tạo đường cong B-spline đồng nhất khép bậc 3 bằng phương pháp
nội suy
Cho tập 8 điểm dữ liệu {Di} được xác định như sau:
Di D0 D1 D2 D3 D4 D5
xi 1 3 8 12 10 15
yi 3 7 3 5 7 9
Trang 24
Đồ án Lập trình tính toán
zi 2 5 6 4 1 12
Xây dựng một đường cong B-spline bâ ̣c p = 3 (cubic) đồng nhất nô ̣i suy các
điểm dữ liê ̣u này.
Input: Nhập từ file bậc p = 3,số điểm dữ liệu n = 5, số chiều d = 3 và giá trị
của các điểm dữ liệu ứng với số chiều tương ứng{ D0 D5}.
Output: Xuất ra màn hình console kết quả của (n+3=10) đỉnh điều khiển
P1P8.
Trang 25
Đồ án Lập trình tính toán
Hình 4.1 Giao diện chương trình trước khi nhập dữ liệu.
Hình 4.2 Giao diện chương trình khi kết thúc với bộ dữ liệu của ví dụ 1
Trang 26
Đồ án Lập trình tính toán
Hình 4.3 Kết quả được in ra file ouput.txt với bộ dữ liệu của ví dụ 1
Hình 4.4. Tọa độ các đỉnh và vector nút được nhập vào trang web
Trang 27
Đồ án Lập trình tính toán
Hình 4.5. Đường cong được tái tạo 3D nhờ vào trang web
Trang 28
Đồ án Lập trình tính toán
Ví dụ 2:
Hình 4.6 Giao diện chương trình khi kết thúc với bộ dữ liệu của ví dụ 2.
Hình 4.7. Kết quả được in ra file ouput.txt với bộ dữ liệu của ví dụ 2
Trang 29
Đồ án Lập trình tính toán
Hình 4.8. Tọa độ các đỉnh và vector nút được nhập vào trang web
Hình 4.9. Đường cong được tái tạo 3D nhờ vào trang web
Trang 30
Đồ án Lập trình tính toán
Trang 31
Đồ án Lập trình tính toán
Trang 32
Đồ án Lập trình tính toán
PHỤ LỤC
#include <stdio.h>
void nhap();
void docFILE();
void Vecto_Nut(float a[], int p, int n);
float basicFuns(int i, float u, float U[]);
void Matran_N(float N[][100], int n);
void Nghich_dao(float a[][100], int n);
void Nhan_matran(float a[][100], float b[][100], int n, int p);
void xuat();
void ghiFILE();
Trang 33
Đồ án Lập trình tính toán
{
printf("\ny%d = ", i);
scanf("%f", &D[i][j]);
}
else if (j == 2)
{
printf("\nz%d = ", i);
scanf("%f", &D[i][j]);
}
}
}
}
Trang 34
Đồ án Lập trình tính toán
}
}
Trang 35
Đồ án Lập trình tính toán
Trang 36
Đồ án Lập trình tính toán
}
else if (i == 0 && j == 1)
{
N[i][j] = -1;
}
else if (i == point - 1 && j == point - 2)
{
N[i][j] = -1;
}
else if (i == point - 1 && j == point - 1)
{
N[i][j] = 3;
}
else if (i != 0 && i != point - 1)
{
N[i][j] = 0;
}
}
}
int k = 1;
for (i = 1; i < point - 1; i++)
{
for (j = 0; j < point; j++)
{
N[i][j] = basicFuns(k, u[i + 3], u);
k++;
}
k = 1;
}
printf("\n\n\t---------------------------------------\n\n");
printf("\n\nMa tran bieu dien he phuong trinh D: \n\n");
Trang 37
Đồ án Lập trình tính toán
}
}
Trang 38
Đồ án Lập trình tính toán
for (j = i + 1; j < n; j++) // bien doi cac phan tu cung cot hang
duoi bang 0 do
{
temp = -c[j][i] / c[i][i];
for (k = i + 1; k < n; k++)
c[j][k] += temp * c[i][k]; // nhan hang i voi (-a[j]
[i]/a[i][i]) roi cong vao hang j
}
det *= c[i][i]; // Tinh den det(a)
}
det *= c[n - 1][n - 1]; // nhan voi phan tu cuoi cheo chinh
printf("\n\n\t------------------------------------\n\n");
printf("\n\ndet(N) = %lf\n\n", det);
Trang 39
Đồ án Lập trình tính toán
temp = b[i][j];
b[i][j] = b[k][j];
b[k][j] = temp;
}
}
temp = a[i][i];
for (j = i; j < n; j++)
a[i][j] /= temp;
for (j = 0; j < n; j++)
b[i][j] /= temp;
Trang 40
Đồ án Lập trình tính toán
printf("\n\n");
}
}
else
printf("\nKhong co ma tran nghich dao\n");
Trang 41
Đồ án Lập trình tính toán
}
}
}
Trang 42
Đồ án Lập trình tính toán
{
printf("| ");
for (j = 0; j < p; j++)
{
printf("%.3f | ", c[i][j]);
}
printf("\n\n");
}
}
Trang 43
Đồ án Lập trình tính toán
int main()
Trang 44
Đồ án Lập trình tính toán
{
int i, j, choice;
float matran[100][100];
printf("\t\t\t\t\tNOI SUY DUONG CONG B-SPLINE DONG
NHAT\n\n");
Trang 45
Đồ án Lập trình tính toán
//giai he pt
Nhan_matran(matran, D, n, d);
return 0;
}
Trang 46