Bài giảng Đồ họa Raster - Chương 3, Phần 3: Đường cong - Bùi Tiến Liên
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa Raster - Chương 3, Phần 3: Đường cong - Bùi Tiến Liên", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_do_hoa_raster_chuong_3_phan_3_duong_cong_bui_tien.ppt
Nội dung text: Bài giảng Đồ họa Raster - Chương 3, Phần 3: Đường cong - Bùi Tiến Liên
- ĐỒ HỌA 2D ĐƯỜNG CONG Giảng viên : Bùi Tiến Lên
- Phân loại Quan điểm tố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) Trang 2
- Đường cong được biểu diễn bằng hàm số
- Bài tốn Input Hàm số y = f(x) Miền đối số [xmin, xmax] Output Đồ thị hàm số y=f(x) xmin xmax Trang 4
- Thuật tốn Bước 1 : Chia miền đối số ra N đoạn bằng nhau x0 x1 x2 xN-1 xN xmin xmax Trang 5
- Thuật tốn Bước 2 : Tính y yN y 1 y2 yN-1 y0 x0 x1 x2 xN-1 xN xmin xmax Trang 6
- Thuật tốn Bước 3 : Kẻ đường gấp khúc đi qua N + 1 điểm. yN y 1 y2 yN-1 y0 x0 x1 x2 xN-1 xN xmin xmax Trang 7
- Cài đặt // Hàm vẽ đường cong hàm số void DrawCurve2D(CDC *pDC, TFunc2D f, double xmin, double xmax) { double x, x, y; x = (xmax – xmin)/N; x = xmin; y = f(x); pDC->MoveTo(ConvertWorldToScreen2D(x, y)); for(int i=1; i LineTo(ConvertWorldToScreen2D(x, y)); } } Trang 8
- Cài đặt // Lớp phương trình hàm class TFunc2D { virtual double operator () (double x) = 0; }; Trang 9
- Vấn đề phân đoạn Số phân đoạn N là bao nhiêu ? độ phân giải cột Trang 10
- Đồ 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 bậc nhất y = ax + b Cách tính thông thường Cách tính cải tiế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 bậc hai y = ax2 + bx + c Cách tính thông thường Cách tính cải tiế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 bậc ba y = ax3 + bx2 + cx + d Cách tính cải tiế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 tố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 tố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 tốn Bước 2 : Tính (x, y) ti tN t2 t1 to Trang 19
- Thuật tố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 bậc n được tạo bởi n + 1 điểm điều khiể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 hoặ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 tồ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 tố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 tốn vẽ đệ qui p1 p2 p3 p0 r l3 r0 1 l2 r2 l1 r3 l0 Trang 37
- Thuật tố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 nhiê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 tố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 nếu t ti,ti+1 Ni (t) = 0 khá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