Bài giảng đồ họa : Các thuật toán vẽ đường part 3 ppt

5 595 8
Bài giảng đồ họa : Các thuật toán vẽ đường part 3 ppt

Đang tải... (xem toàn văn)

Thông tin tài liệu

ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 11/22 T T h h u u a a ä ä t t t t o o a a ù ù n n M M i i d d P P o o i i n n t t • Thuật toán MidPoint đưa ra cách chọn 1+i y là i y hay 1 + i y bằng cách so sánh điểm thực Q ( ) y x i , 1 + với điểm MidPoint là trung điểm của S và P. Ta có : ♦ Nếu điểm Q nằm dưới điểm MidPoint, ta chọn S. ♦ Nếu điểm Q nằm trên điểm MidPoint ta chọn P. • Ta có dạng tổng quát của phương trình đường thẳng : 0 = + + C By Ax với ( ) 21121212 , , y x y x C x x B y y A −=−−=−= • Đặt ( ) C By Ax y x F + + = , , ta có nhận xét : ( ) ( ) ( ) ( )      > = < thẳng. đường dưới phía nằm yx, nếu,0 thẳng đường vềthuộc yx, nếu,0 thẳng đường trên phía nằm yx, nếu,0 , yxF Q(x i +1, y) P S x i x i +1 y i y i +1 MidPoint ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 12/22 • Lúc này việc chọn các điểm S, P ở trên được đưa về việc xét dấu của ( )       ++== 2 1 ,12MidPoint2 iii yxFFp . ♦ Nếu 0 < i p , điểm MidPoint nằm phía trên đoạn thẳng. Lúc này điểm thực Q nằm dưới điểm MidPoint nên ta chọn S, tức là ii y y = +1 . ♦ Ngược lại, nếu 0 ≥ i p , điểm MidPoint nằm phía dưới đoạn thẳng. Lúc này điểm thực Q nằm trên điểm MidPoint nên ta chọn P, tức là 1 1 + = + ii y y . • Mặt khác :       ++−       ++=− +++ 2 1 ,12 2 1 ,12 111 iiiiii yxFyxFpp ( ) ( )       +       +++−       +       +++=−⇔ +++ CyBxACyBxApp iiiiii 2 1 12 2 1 12 111 ( ) ( ) iiiiii y y Dx Dy y y B A p p − − = − + = − ⇔ +++ 111 2 2 2 2 • Như vậy : ♦ Dy p p ii 2 1 + = + , nếu 0 < i p do ta chọn ii y y = +1 . ♦ Dx Dy p p ii 2 2 1 −+= + , nếu 0 ≥ i p do ta chọn 1 1 += + ii y y . • Ta tính giá trò 0 p ứng với điểm ban đầu ( ) 00 , y x , với nhận xét rằng ( ) 00 , y x là điểm thuộc về đoạn thẳng, tức là có : 0 00 =++ C By Ax ( )       +       +++=       ++= CyBxAyxFp 2 1 12 2 1 ,12 00000 ( ) Dx Dy B A B A C By Ax p −=+=++++=⇒ 2 2 2 2 000 ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 13/22 C C a a â â u u h h o o û û i i k k i i e e å å m m t t r r a a • Xét thuật toán Bresenham, với cách đặt d 1 và d 2 như trên, có khi nào d 1 hay d 2 âm hay không ? Cho ví dụ minh họa. • Tại sao phải so sánh giá trò p i với 0 trong các thuật toán MidPoint và Bresenham, bản chất của việc so sánh này là gì ? • Tại sao phải nhân F(MidPoint) với 2 khi gán cho p i theo công thức p i =2*F(MidPoint) ? ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 14/22 • Cài đặt thuật toán cho trường hợp 0 ≤ m ≤ 1, Dx<0. Ta sử dụng thuật toán với trường hợp 0 ≤ m ≤ 1, Dx>0 đã cài đặt cộng thêm một số thay đổi sau : ♦ Thay biểu thức x=x+1 bằng x=x-1 và y=y+1 bằng y=y-1 vì trong trường hợp này x và y đều giảm dần. ♦ Nhận xét rằng khi p<0 ta gán p=p+Const1, như vậy để hướng đến sự cân bằng Const1 phải là một giá trò dương. Tương tự như vậy, khi p≥0 ta gán p=p+Const2, Const2 phải là giá trò âm. ♦ Từ nhận xét trên, trong các công thức ta sẽ thay Dx bằng abs(Dx), Dy bằng abs(Dy). • Mở rộng thuật toán trên để vẽ đoạn thẳng trong trường hợp m bất kì. ♦ Trường hợp đặc biệt m=∞ : Đoạn thẳng song song trục tung nên rất đơn giản khi vẽ. ♦ Trường hợp –1 ≤ m ≤ 1 : Sử dụng các công thức của thuật toán vẽ trong trường hợp 0≤ m ≤ 1, Dx>0 và thay đổi một số điểm sau : v Nếu Dx<0 thì bước nhảy của x sẽ thay bằng –1. Tương tự nếu Dy<0, bước nhảy của y cũng sẽ là –1. v Thay Dx bằng abs(Dx), Dy=abs(Dy) trong tất cả các công thức có chứa Dx, Dy. ♦ Trường hợp m ≤ -1 hay m ≥ 1 : v Thay đổi vai trò của x và y, nghóa là thay x bằng y, y bằng x, Dx bằng Dy, Dy bằng Dx trong tất cả các công thức. v Thực hiện nguyên tắc về bước nhảy, thay đổi công thức Dx, Dy như trong trường hợp –1 ≤ m ≤ 1 ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 15/22 V V e e õ õ đ đ ư ư ơ ơ ø ø n n g g t t r r o o ø ø n n b b a a è è n n g g t t h h u u a a ä ä t t t t o o a a ù ù n n M M i i d d P P o o i i n n t t • Do tính đối xứng của đường tròn (C) nên ta chỉ cần vẽ cung (C 1/8 ) là cung 1/8 đường tròn, sau đó lấy đối xứng. Cung (C 1/8 ) được mô tả như sau (cung của phần tô xám trong hình vẽ) :        ≤≤ ≤≤ RyR Rx 2 2 2 2 0 • Như vậy nếu có (x, y) ∈ (C 1/8 ) thì các điểm : (y, x), (y,- x), (x,-y), (-x,-y), (-y,-x), (-y,x), (-x,y) sẽ thuộc (C). 2 R (x,y)(-x,y) (y,x) (-y,x) (x,-y)(-x,-y) (-y,-x) (y,-x) . thức p i =2*F(MidPoint) ? ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 14/22 • Cài đặt thuật toán cho trường hợp 0 ≤ m ≤ 1, Dx<0. Ta sử dụng thuật toán với trường hợp 0 ≤. ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 11/22 T T h h u u a a ä ä t t t t o o a a ù ù n n M M i i d d P P o o i i n n t t • Thuật toán MidPoint đưa ra cách. TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 13/ 22 C C a a â â u u h h o o û û i i k k i i e e å å m m t t r r a a • Xét thuật toán Bresenham, với cách đặt d 1 và d 2 như trên,

Ngày đăng: 23/07/2014, 21:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan