Bài giảng Đồ họa 2D - Chương 3c: Đường cong - Bùi Tiến Lên
Phân loại
Quan điểm toán học
- Đường cong được biểu diễn bằng hàm số
- Đường cong được biểu diễn bằng phương trình tham số
Quan điểm thiết kế
- Đường cong CAD (Computer Aided Design)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa 2D - Chương 3c: Đường cong - Bùi Tiến Lên", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_do_hoa_2d_chuong_3c_duong_cong_bui_tien_len.ppt
Nội dung text: Bài giảng Đồ họa 2D - Chương 3c: Đường cong - Bùi Tiến Lên
- Đồ thị đa thức bậc ba Cho y = ax3 + bx2 + cx + d x [xmin, xmax] y = 0.1x3 − 0.2x2 − 0.2x + 3 x − 4,4 Trang 11
- Vấn đề tính giá trị đa thức Cách tính thông thường a*x*x*x + b*x*x + c*x + d; Cần 6 phép nhân và 3 phép cộng Cách tính Horner ((a*x + b)*x + c)*x + d Cần 3 phép nhân và 3 phép cộng Cách tính cải tiến ? Trang 12
- Vấn đề tính giá trị đa thức Ña thöùc baäc nhaát y = ax + b Caùch tính thoâng thöôøng Caùch tính caûi tieán yi = axi + b y0 = ax0 + b yi+1 = yi + a x Tính Tính y0 = ax0 + b y0 = ax0 + b y1 = ax1 + b y1 = y0 + a x y2 = ax2 + b y2 = y1 + a x yi = axi + b yi = yi-1 + a x yi+1 = axi+1 + b yi+1 = yi + a x yN = axN+1 + b y0 = yi + a x Trang 13
- Vấn đề tính giá trị đa thức Ña thöùc baäc hai y = ax2 + bx + c Caùch tính thoâng thöôøng Caùch tính caûi tieán 2 2 yi = axi + bxi + c y0 = ax0 + bx0 + c 2 y0 = 2a xx0 + a x + b x yi+1 = yi + yi 2 yi+1 = yi + 2a x Trang 14
- Vấn đề tính giá trị đa thức Ña thöùc baäc ba y = ax3 + bx2 + cx + d Caùch tính caûi tieán 3 2 y0 = ax0 + bx0 + cx0 + d 2 2 3 2 y0 = 3a xx0 + (3a x + 2b x)x0 + a x + b x + c x 2 3 2 y0 = 6a x x0 + 6a x + 2b x yi+1 = yi + yi yi+1 = yi + yi 3 yi+1 = yi + 6a x Trang 15
- Đường cong được biểu diễn bằng Phương trình tham số
- Bài toán Input: Phương trình tham số x(t) y(t) Miền tham số t [tmin, tmax] Output: x(t) = cos(5t)cos(t) y(t) = cos(5t)sin(t) t 0,2 Trang 17
- Thuật toán Bước 1 : Chia miền tham số ra N đoạn bằng nhau Miền tham số to t1 t2 tN tmin tmax Trang 18
- Thuật toán Bước 2 : Tính (x, y) ti tN t2 t1 to Trang 19
- Thuật toán Bước 3 : Vẽ đường gấp khúc đi qua N + 1 điểm (xN, yN) (x2, y2) (x1, y1) (x0, y0) Trang 20
- Cài đặt // Hàm vẽ đường cong tham số void DrawCurve2D(CDC *pDC, TPara2D f, double tmin, double tmax) { double t, t; TPoint2D p; t = (tmax – tmin)/N; t = tmin; p = f(t); pDC->MoveTo(ConvertWorldToScreen2D(p)); for(int i=1; i LineTo(ConvertWorldToScreen2D(p)); } } Trang 21
- Cài đặt // Lớp phương trình tham số class TPara2D { virtual TPoint2D operator () (double t) = 0; } Trang 22
- Vấn đề phân đoạn x(t) = cos t y(t) = sint t 0,2 x(t) = t cos t y(t) = t sint t 0,8 Trang 23
- ĐƯỜNG CONG CAD
- ĐƯỜNG CONG BEZIER
- Định nghĩa đường cong Input n +1 điểm điều khiển {p0, p1, , pn} Output p1 p0 pn Trang 26
- Công thức xác định đường cong Ptts ñöôøng cong Bezier baäc n ñöôïc taïo bôûi n + 1 ñieåm ñieàu khieån k=n n p(t) = B (t).p n n! n−k k k k vôùi B (t) = (1− t) t k=0 k k!(n − k)! t 0,1 hoaëc k=n n x(t) = Bk (t).pkx k=0 k=n n y(t) = Bk (t).pky k=0 t 0,1 Trang 27
- Tính chất 1 Bảo toàn qua phép biến đổi affine. Trang 28
- Tính chất 2 Các điểm điểu khiển tạo thành bao lồi của đường cong Trang 29
- Đường cong Bezier bậc một p1 p(t) = (1 – t)p0 + tp1 t [0, 1] hoặc x(t) = (1 – t)p0x + tp1x y(t) = (1 – t)p0y + tp1y t [0, 1] p0 Trang 30
- Đường cong Bezier bậc hai p1 p2 2 2 p(t) = (1 – t) p0 + 2(1 – t)tp1 + t p2 t [0, 1] hoặc 2 2 x(t) = (1 – t) p0x + 2(1 – t)tp1x + t p2x 2 2 y(t) = (1 – t) p0y + 2(1 – t)tp1y + t p2y t [0, 1] p0 Trang 31
- Đường cong Bezier bậc ba p1 p2 p0 p3 3 2 2 3 p(t) = (1 – t) p0 + 3(1 – t) tp1 + 3(1 – t)t p2 + t p3 t [0, 1] hoặc 3 2 2 3 x(t) = (1 – t) p0x + 3(1 – t) tp1x + 3(1 – t)t p2x + t p3x 3 2 2 3 y(t) = (1 – t) p0y + 3(1 – t) tp1y + 3(1 – t)t p2y + t p3y t [0, 1] Trang 32
- Đạo hàm p’(0) = 3(p1 – p0) p’(1) = 3(p3 – p2) p”(0) = 6(p0 – 2p1 + p2) p”(1) = 6(p1 – 2p2 + p3) p1 p2 p3 p0 Trang 33
- Một số đường cong Bezier bậc ba Trang 34
- Độ thẳng của đường cong Bezier p 1 p2 p0 p3 p − p + p − p + p − p f = 0 1 1 2 2 3 p0 − p3 Trang 35
- Thuật toán vẽ đệ qui Vẽ Bezier (p0, p1, p2, p3) Bắt đầu Nếu Thẳng (p0, p1, p2, p3) thì Vẽ đoạn thẳng p0p3 Ngược lại Chia {pi} thành {li} và {ri} Vẽ Bezier (l0, l1, l2, l3) Vẽ Bezier (r0, r1, r2, r3) Kết thúc Trang 36
- Thuật toán vẽ đệ qui p1 p2 p3 p0 r l3 r0 1 l2 r2 l1 r3 l0 Trang 37
- Thuật toán vẽ đệ qui p + 3p + 3p + p l = p r = 0 1 2 3 0 0 0 8 p + p p + 2p + p l = 0 1 r = 1 2 3 1 2 1 4 p + 2p + p p + p l = 0 1 2 r = 2 3 2 4 2 2 p + 3p + 3p + p l = 0 1 2 3 r = p 3 8 3 3 Trang 38
- ĐƯỜNG CONG HERMITE
- Định nghĩa đường cong Input 2 điểm {p0, p1} 2 vector {v0, v1} Ouput v0 v1 p0 p1 Trang 40
- Công thức xác định đường cong v0 v1 p0 p1 3 3 3 3 p(t) = H0 (t)p0 + H1 (t)p1 + H2 (t)v0 + H3 (t)v1 3 2 3 2 3 2 3 2 p(t) = (2t + 3t + 1)p0 + (-2t + 3t )p1 + (t – 2t + t)v0 + (t – t )v1 t [0, 1] hoặc 3 2 3 2 3 2 3 2 x(t) = (2t + 3t + 1)p0x + (-2t + 3t )p1x + (t – 2t + t)v0x + (t – t )v1x 3 2 3 2 3 2 3 2 y(t) = (2t + 3t + 1)p0y + (-2t + 3t )p1y + (t – 2t + t)v0y + (t – t )v1y t [0, 1] Trang 41
- Một số đường cong Hermite Trang 42
- Đường cong Bezier bậc ba & Hermite H B p0 = p0 H B p1 = p3 H B B v0 = 3(p1 − p0 ) H B B v1 = 3(p3 − p2 ) B B p1 p2 H B v 0 H p3 p1 H vH B p0 1 p0 Trang 43
- Dẫn nhập Bao nhieâu ñöôøng cong? Trang 44
- ĐƯỜNG CONG PHỨC
- Định nghĩa đường cong phức Đường cong phức là sự kết hợp của những đường cong cơ sở C = {C1, C2, , Cn} C2 C3 C4 C1 Trang 46
- Yêu cầu thiết kế đường cong phức Đối với người thiết kế 1. Dễ vẽ 2. Liên tục 3. Cục bộ Đối với người lập trình 1. Biểu diễn dễ dàng và hiệu quả 2. Tính toán hiệu quả Trang 47
- Tính liên tục Liên tục bậc 0 Liên tục bậc 1 Liên tục bậc 2 Trang 48
- Phân loại 1. Đường cong Splines 2. Đường cong B-Splines 3. Đường cong Nurbs (NonUniform Rational B-Splines) Trang 49
- CÁC ĐƯỜNG CONG SPLINES
- Định nghĩa đường cong Splines Input n +1 điểm {P0, P1, , Pn} và một số thông tin khác Output C = {C1, C2, , Cn} với Ci là các đường cong Hermite P1 Pn-1 C1 Cn C2 P0 Pn P2 Trang 51
- Cardinal Splines - Tham số tension t p0 = Pk Pk Pk+1 p1 = Pk+1 (1− t) v = (P − P ) 0 2 k+1 k−1 Pk-1 (1− t) v1 = (Pk+2 − Pk ) Pk+2 2 Trang 52
- Ảnh hưởng của tham số tension t t 0 Trang 53
- Catmull-Rom Splines ❖Là trường hợp đặc biệt của Cardinal Splines với t = 0 p0 = P1 P2 P1 P4 p1 = P2 P − P v = 2 0 0 2 P3 − P1 v1 = P3 2 P0 Trang 54
- Kochanek-Bartels Splines ❖Là trường hợp tổng quát của Cardinal Splines - Tham số tension t - Tham số bias b - Tham số continuity c p0 = Pk p1 = Pk+1 1 v = (1− t)(1+ b)(1− c)(P − P ) + (1− b)(1+ c)(P − P ) 0 2 k k−1 k+1 k 1 v = (1− t)(1+ b)(1+ c)(P − P ) + (1− b)(1− c)(P − P ) 1 2 k+1 k k+2 k+1 Trang 55
- Ảnh hưởng của tham số bias b b 0 Trang 56
- Natural Splines ❖Là đường cong liên tục C2 P1 v3 v0 v1 P3 P0 P2 v2 Trang 57
- Natural Splines P1 v3 v0 v1 P3 P0 P2 v2 Trang 58
- Natural Splines Trường hợp 1 : Biết các vector v0 và vn 1 v v 0 0 1 4 1 v1 3(P2 − P0 ) 1 4 1 v 3(P − P ) 2 = 3 1 1 4 1 vn−1 3(Pn − Pn−2 ) 1 vn vn Trang 59
- Natural Splines Trường hợp 2 : Đạo hàm bậc hai tại hai điểm P0 và Pn đều bằng 0 2 1 v 3(P − P ) 0 1 0 1 4 1 v1 3(P2 − P0 ) 1 4 1 v 3(P − P ) 2 = 3 1 1 4 1 vn−1 3(Pn − Pn−2 ) 1 2 vn 3(Pn − Pn−1) Trang 60
- Free Splines ❖Là đường cong liên tục C0 Trang 61
- ĐƯỜNG CONG B-SPLINES
- Định nghĩa Input n +1 điểm {P0, P1, , Pn}, Bậc k – 1, Tập hợp tham số knot {t0, t1, , tn+k} Output C = {C1, C2, , Cn-2} với Ci là các đường cong Bezier P1 P2 C1 P5 C2 C3 P0 P3 P4 Trang 63
- Công thức i=n k p(t) = Ni (t)Pi i=0 t 0,1 Vôùi 1 1 neáu t ti,ti+1 Ni (t) = 0 khaùc k t − ti k−1 ti+k − t k−1 Ni (t) = Ni (t) + Ni+1 (t) ti+k−1 − ti ti+k − ti+1 Trang 64
- Công thức B-Splines bậc ba đều P1 p1 p2 P2 P0 + 4P1 + P2 p0 = P5 6 p p0 3 2P + P p = 1 2 1 3 P + 2P p = 1 2 2 3 P + 4P + P p = 1 2 3 3 6 P0 P3 P4 Trang 65
- Công thức B-Splines bậc hai đều p1 P1 P2 p 2 P1 − P0 p0 = P5 2 p1 = P1 p0 P − P p = 2 1 2 2 P0 P3 P4 Trang 66
- ĐƯỜNG CONG HỮU TỈ
- Định nghĩa ❖Là đường cong trong đó các hàm x(t) và y(t) là các hàm đa thức hữu tỉ Đường tròn Đường ellipse Trang 68
- Đường Conic Dạng chuẩn Ellipse x2 y2 + = 1 a, b 0 a2 b2 Hyperbola x2 y2 − = 1 a, b 0 a2 b2 Parabola y2 = 4ax a 0 Trang 69
- Đường Conic Dạng tham số Ellipse 1− t2 x(t) = a 2 1+ t t (− , ) 2t y(t) = b 1+ t2 Hyperbola 1+ t2 x(t) = a 2 1− t t (− , ) 2t y(t) = b 1− t2 Trang 70
- Đường Bezier hữu tỉ bậc hai Input p0(x0, y0) và trọng số w0 p1(x1, y1) và trọng số w1 p2(x2, y2) và trọng số w2 Output p1,w1 p0,w0 p2,w2 Trang 71
- Công thức Hệ tọa độ thuần nhất x(t) x0 x1 x2 2 2 2 y(t) = B0 (t) y0 + B1 (t) y1 + B2 (t) y2 w(t) w0 w1 w2 B2 (t)x + B2 (t)x + B2 (t)x 0 0 1 1 2 2 2 2 2 = B0 (t)y0 + B1 (t)y1 + B2 (t)y2 2 2 2 B0 (t)w0 + B1 (t)w1 + B2 (t)w2 Trang 72
- Công thức Hệ tọa độ đề các B2 (t)x + B2 (t)x + B2 (t)x 0 0 1 1 2 2 x(t) B2 (t)w + B2 (t)w + B2 (t)w = 0 0 1 1 2 2 2 2 2 y(t) B0 (t)y0 + B1 (t)y1 + B2 (t)y2 2 2 2 B0 (t)w0 + B1 (t)w1 + B2 (t)w2 2 x0 2 x1 2 x2 B0 (t) + B1 (t) + B2 (t) y0 y1 y2 = 2 2 2 B0 (t)w0 + B1 (t)w1 + B2 (t)w2 2 x0 2 x1 2 x2 B0 (t)w0 + B1 (t)w1 + B2 (t)w2 y0 y1 y2 = 2 2 2 B0 (t)w0 + B1 (t)w1 + B2 (t)w2 Trang 73
- Biểu diễn Conic bằng Bezier hữu tỉ Đường Ellipse a(1− t2 ) x(t) b(2t) = 2 y(t) 1+ t B2 (t)a + B2 (t)a + B2 (t)0 0 1 2 2 2 2 B0 (t)0 + B1 (t)b + B2 (t)2b = 2 2 2 B0 (t) + B1 (t) + B2 (t)2 2 a 2 a 2 0 B0 (t).1. + B1 (t).1. + B1 (t).2. 0 b b = 2 2 2 B0 (t).1+ B1 (t).1+ B2 (t).2 Trang 74
- ĐƯỜNG CONG NURBS
- Định nghĩa ❖Là đường cong phức C = {C1, C2, , Cn-2} với Ci là các đường cong Bezier hữu tỉ Trang 76