Đồ hoạ máy tính - Các thuật toán vẽ đường

Đối tượng hiển thị trên lưới nguyên được liền nét, các điểm mà (-1, "ii) có thể chọn chỉ là một trong tám điểm được đánh số từ 1 đến 8 trong hình sau (điểm đen chính là ai,y:)). Hay nói cách khác : (Xi+1, 7i+1)=(x; +1, y; +1).

pdf22 trang | Chia sẻ: thiennga98 | Lượt xem: 824 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ hoạ máy tính - Các thuật toán vẽ đường, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
,1+ vôùi ñieåm MidPoint laø trung ñieåm cuûa S vaø P. Ta coù : ¨ Neáu ñieåm Q naèm döôùi ñieåm MidPoint, ta choïn S. ¨ Neáu ñieåm Q naèm treân ñieåm MidPoint ta choïn P. · Ta coù daïng toång quaùt cuûa phöông trình ñöôøng thaúng : 0=++ CByAx vôùi ( ) 21121212 ,, yxyxCxxByyA -=--=-= · Ñaët ( ) CByAxyxF ++=, , ta coù nhaän xeùt : ( ) ( ) ( ) ( )ïî ï í ì > = < thaúng. ñöôøng döôùi phía naèm yx, neáu,0 thaúng ñöôøng veàthuoäc yx, neáu,0 thaúng ñöôøng treân phía naèm yx, neáu,0 , yxF Q(xi+1, y) P S xi xi+1 yi yi+1 MidPoint ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 12/22 · Luùc naøy vieäc choïn caùc ñieåm S, P ôû treân ñöôïc ñöa veà vieäc xeùt daáu cuûa ( ) ÷ø ö ç è æ ++== 2 1 ,12MidPoint2 iii yxFFp . ¨ Neáu 0<ip , ñieåm MidPoint naèm phía treân ñoaïn thaúng. Luùc naøy ñieåm thöïc Q naèm döôùi ñieåm MidPoint neân ta choïn S, töùc laø ii yy =+1 . ¨ Ngöôïc laïi, neáu 0³ip , ñieåm MidPoint naèm phía döôùi ñoaïn thaúng. Luùc naøy ñieåm thöïc Q naèm treân ñieåm MidPoint neân ta choïn P, töùc laø 11 +=+ ii yy . · Maët khaùc : ÷ ø ö ç è æ ++-÷ ø ö ç è æ ++=- +++ 2 1,12 2 1,12 111 iiiiii yxFyxFpp ( ) ( ) ú û ù ê ë é +÷ ø ö ç è æ +++-ú û ù ê ë é +÷ ø ö ç è æ +++=-Û +++ CyBxACyBxApp iiiiii 2 112 2 112 111 ( ) ( )iiiiii yyDxDyyyBApp --=-+=-Û +++ 111 2222 · Nhö vaäy : ¨ Dypp ii 21 +=+ , neáu 0<ip do ta choïn ii yy =+1 . ¨ DxDypp ii 221 -+=+ , neáu 0³ip do ta choïn 11 +=+ ii yy . · Ta tính giaù trò 0p öùng vôùi ñieåm ban ñaàu ( )00 , yx , vôùi nhaän xeùt raèng ( )00 , yx laø ñieåm thuoäc veà ñoaïn thaúng, töùc laø coù : 000 =++ CByAx ( ) ú û ù ê ë é +÷ ø ö ç è æ +++=÷ ø ö ç è æ ++= CyBxAyxFp 2 112 2 1,12 00000 ( ) DxDyBABACByAxp -=+=++++=Þ 2222 000 ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 13/22 Caââu hoûûi kieååm tra · Xeùt thuaät toaùn Bresenham, vôùi caùch ñaët d1 vaø d2 nhö treân, coù khi naøo d1 hay d2 aâm hay khoâng ? Cho ví duï minh hoïa. · Taïi sao phaûi so saùnh giaù trò pi vôùi 0 trong caùc thuaät toaùn MidPoint vaø Bresenham, baûn chaát cuûa vieäc so saùnh naøy laø gì ? · Taïi sao phaûi nhaân F(MidPoint) vôùi 2 khi gaùn cho pi theo coâng thöùc pi=2*F(MidPoint) ? ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 14/22 · Caøi ñaët thuaät toaùn cho tröôøng hôïp 0 £ m £ 1, Dx<0. Ta söû duïng thuaät toaùn vôùi tröôøng hôïp 0 £ m £ 1, Dx>0 ñaõ caøi ñaët coäng theâm moät soá thay ñoåi sau : ¨ Thay bieåu thöùc x=x+1 baèng x=x-1 vaø y=y+1 baèng y=y-1 vì trong tröôøng hôïp naøy x vaø y ñeàu giaûm daàn. ¨ Nhaän xeùt raèng khi p<0 ta gaùn p=p+Const1, nhö vaäy ñeå höôùng ñeán söï caân baèng Const1 phaûi laø moät giaù trò döông. Töông töï nhö vaäy, khi p³0 ta gaùn p=p+Const2, Const2 phaûi laø giaù trò aâm. ¨ Töø nhaän xeùt treân, trong caùc coâng thöùc ta seõ thay Dx baèng abs(Dx), Dy baèng abs(Dy). · Môû roäng thuaät toaùn treân ñeå veõ ñoaïn thaúng trong tröôøng hôïp m baát kì. ¨ Tröôøng hôïp ñaëc bieät m=¥ : Ñoaïn thaúng song song truïc tung neân raát ñôn giaûn khi veõ. ¨ Tröôøng hôïp –1 £ m £ 1 : Söû duïng caùc coâng thöùc cuûa thuaät toaùn veõ trong tröôøng hôïp 0£ m £ 1, Dx>0 vaø thay ñoåi moät soá ñieåm sau : v Neáu Dx<0 thì böôùc nhaûy cuûa x seõ thay baèng –1. Töông töï neáu Dy<0, böôùc nhaûy cuûa y cuõng seõ laø –1. v Thay Dx baèng abs(Dx), Dy=abs(Dy) trong taát caû caùc coâng thöùc coù chöùa Dx, Dy. ¨ Tröôøng hôïp m £ -1 hay m ³ 1 : v Thay ñoåi vai troø cuûa x vaø y, nghóa laø thay x baèng y, y baèng x, Dx baèng Dy, Dy baèng Dx trong taát caû caùc coâng thöùc. v Thöïc hieän nguyeân taéc veà böôùc nhaûy, thay ñoåi coâng thöùc Dx, Dy nhö trong tröôøng hôïp –1 £ m £ 1 ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 15/22 Veõõ ñöôøøng troøøn baèèng thuaäät toaùùn MidPoint · Do tính ñoái xöùng cuûa ñöôøng troøn (C) neân ta chæ caàn veõ cung (C1/8) laø cung 1/8 ñöôøng troøn, sau ñoù laáy ñoái xöùng. Cung (C1/8) ñöôïc moâ taû nhö sau (cung cuûa phaàn toâ xaùm trong hình veõ) : ï ï î ïï í ì ££ ££ RyR Rx 2 2 2 20 · Nhö vaäy neáu coù (x, y) Î (C1/8) thì caùc ñieåm : (y, x), (y,- x), (x,-y), (-x,-y), (-y,-x), (-y,x), (-x,y) seõ thuoäc (C). 2 R (x,y)(-x,y) (y,x)(-y,x) (x,-y)(-x,-y) (-y,-x) (y,-x) ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 16/22 · Choïn ñieåm baét ñaàu ñeå veõ laø ñieåm (0,R). · Döïa vaøo hình veõ, neáu ( )ii yx , laø ñieåm nguyeân ñaõ tìm ñöôïc ôû böôùc thöù i, thì ñieåm ( )11 , ++ ii yx ôû böôùc thöù (i+1) laø söï löïa choïn giöõa S vaø P. · Nhö vaäy : { }î í ì -Î += + + 1, 1 1 1 iii ii yyy xx · Ñaët ( ) 222, RyxyxF -+= , ta coù : ( ) ( ) ( ) ( )ïî ï í ì > = < troøn. ñöôøng ngoaøi naèm yx, neáu,0 troøn ñöôøng treân naèm yx, neáu,0 troøn ñöôøng trong naèm yx, neáu,0 , yxF S P MidPoint yi yi-1 xi xi+1 Q(xi+1, y) ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 17/22 · Xeùt ( ) ÷ø ö ç è æ -+== 2 1,1MidPoint iii yxFFp . Ta coù : ¨ Neáu 0<ip , ñieåm MidPoint naèm trong ñöôøng troøn. Luùc naøy ñieåm thöïc Q gaàn S hôn neân ta choïn S, töùc laø ii yy =+1 . ¨ Ngöôïc laïi, neáu 0³ip , ñieåm MidPoint naèm ngoaøi ñöôøng troøn. Luùc naøy ñieåm thöïc Q gaàn P hôn neân ta choïn P, töùc laø 11 -=+ ii yy . · Maët khaùc : ÷ ø ö ç è æ -+-÷ ø ö ç è æ -+=- +++ 2 1,1 2 1,1 111 iiiiii yxFyxFpp ( ) ( ) ú ú û ù ê ê ë é -÷ ø ö ç è æ -++- ú ú û ù ê ê ë é -÷ ø ö ç è æ -++=-Û +++ 2 2 22 2 1 2 11 2 11 2 11 RyxRyxpp iiiiii ( ) ( )iiiiiii yyyyxpp ---++=-Û +++ 122 11 32 · Vaäy : ¨ 321 ++=+ iii xpp , neáu 0<ip do ta choïn ii yy =+1 . ¨ 5221 +-+=+ iiii yxpp , neáu 0³ip do ta choïn 11 -=+ ii yy . · 0p öùng vôùi ñieåm ban ñaàu ( ) ( )Ryx ,0, 00 = . RRFyxFp -=÷ ø ö ç è æ -=÷ ø ö ç è æ -+= 4 5 2 1,1 2 1,1 000 ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 18/22 Löu ñoà thuaät toaùn MidPoint veõ ñöôøng troøn Begin p=5/4-R; x=0; y=R; Put8Pixel(x, y, c); x<y Yes No p<0 Yes p=p+2*x+3; No p=p+2(x-y)+5; y=y-1 x=x+1; Put8Pixel(x,y,c); End ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 19/22 Caøi ñaët minh hoïa thuaät toaùn MidPoint veõ ñöôøng troøn void CircleMidPoint (int R) { int x, y; x = 0; y = R; Put8Pixel(x, y); p = 1 - R; // 5/4-R while (x < y) { if (p < 0) p += 2*x + 3; else { p += 2*(x -y) + 5; y--; } x++; Put8Pixel(x, y); } } // CircleMidPoint ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 20/22 · Ví duï : Veõ ñöôøng troøn taâm I(0,0), baùn kính R=15. i xi yI pi Delta1 Delta2 0 0 15 -14 1-15 3 -25 1 1 15 -11 -14+2*(0)+3 5 -23 2 2 15 -6 -11+2*(1)+3 7 -21 3 3 15 1 -6+2*(2)+3 9 -19 4 4 14 -18 1+2*(3-15)+5 11 -15 5 5 14 -7 -18+2*(4)+3 13 -13 6 6 14 6 -7+2*(5)+3 15 -11 7 7 13 -5 6+2(6-14)+5 17 -7 8 8 13 12 -5+2(7)+3 19 -5 9 9 12 7 12+2(8-13)+5 21 -1 10 10 11 6 7+2(9-12)+5 23 3 11 11 10 9 6+2(10-11)+5 25 7 Nhaän xeùt : · Neáu ñaët Delta1 = 2*x+3, Delta2 = 2*(x-y)+5 thì ¨ Do moãi böôùc ñeàu taêng x neân sau moãi laàn laëp giaù trò Delta1 luoân taêng 2. ¨ Do y bò giaûm 1 khi gaëp p³0 vaø giöõ nguyeân giaù trò trong tröôøng hôïp ngöôïc laïi neân neáu laàn laëp tröôùc giaù trò p³0 thì giaù trò Delta2 seõ ñöôïc taêng 4 vaø neáu laàn laëp tröôùc giaù trò p<0 thì giaù trò Delta2 seõ ñöôïc taêng 2 maø thoâi. · Haõy toái öu hoùa caøi ñaët thuaät toaùn MidPoint veõ ñöôøng troøn töø nhaän xeùt treân. ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 21/22 Veõõ ñöôøøng conics vaøø moäät soáá ñöôøøng cong khaùùc Phöông trình toång quaùt cuûa caùc ñöôøng conics coù daïng : 022 =+++++ FEyDxCyBxyAx . Giaù trò cuûa caùc haèng soá A, B, C, D, E, F seõ quyeát ñònh daïng cuûa ñöôøng conics, cuï theå laø neáu: ï î ï í ì > = ==< - hyperbol. daïng ,0 parabol daïng ,0 ellipse hay ) 0B vaø C A(neáu troøn ñöôøng daïng ,0 42 ACB Ta seõ aùp duïng yù töôûng cuûa thuaät toaùn MidPoint ñeå veõ caùc ñöôøng conics vaø moät soá ñöôøng cong khaùc, theo caùc böôùc tuaàn töï sau: · Böôùc 1 : Döïa vaøo daùng ñieäu vaø phöông trình ñöôøng cong, ñeå xem thöû coù theå ruùt goïn phaàn ñöôøng cong caàn veõ hay khoâng. · Böôùc 2 : Tính ñaïo haøm ñeå töø ñoù phaân thaønh caùc vuøng veõ : ¨ Neáu 1)('0 ££ xf thì { }î í ì +Î += + + (*) 1, 1 1 1 iii ii yyy xx ¨ Neáu 0)('1 ££- xf thì { }î í ì -Î += + + (*) 1, 1 1 1 iii ii yyy xx ¨ Neáu 1)(' >xf thì { }î í ì +Î += + + (*) 1, 1 1 1 iii ii xxx yy ¨ Neáu 1)(' -<xf thì { }î í ì -Î += + + (*) 1, 1 1 1 iii ii xxx yy ÑOÀ HOÏA MAÙY TÍNH Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 22/22 · Böôùc 3 : Xaùc ñònh coâng thöùc cuûa ip cho töøng tröôøng hôïp ñeå quyeát ñònh (*) döïa treân daáu cuûa ip . ip thöôøng laø haøm ñöôïc xaây döïng töø phöông trình ñöôøng cong ñeå cho 0=ip neáu ( )ii yx , thuoäc veà ñöôøng cong. Vieäc choïn ip caàn phaûi chuù yù sao cho thao taùc tính ip sau naøy haïn cheá pheùp toaùn treân soá thöïc. · Böôùc 4 : Tìm moái lieân quan cuûa 1+ip vaø ip baèng caùch xeùt hieäu ii pp -+1 . · Böôùc 5 : Tính 0p vaø hoaøn chænh thuaät toaùn. Baøøi taääp · Giaûi thích taïi sao chæ choïn cung 1/8 ñöôøng troøn ñeå veõ roài laáy ñoái xöùng maø khoâng môû roäng cho cung 1/16 hay 1/32. · Giaûi thích taïi sao coù theå thay coâng thöùc p0=5/4-R baèng coâng thöùc p0=1-R khi caøi ñaët. · Haõy trình baøy thuaät toaùn MidPoint veõ cung 1/8 ñöôøng troøn sau : ï ï î ïï í ì ££ ££ 2 2 0 2 2 Ry RxR · Aùp duïng caùc böôùc treân ñeå veõ ñoaïn thaúng trong tröôøng hôïp toång quaùt. · Haõy trình baøy khung chính cuûa thuaät toaùn veõ ellipse, parabol, hyperbol döïa vaøo caùc böôùc treân.

File đính kèm:

  • pdfLineDrawing.pdf
Giáo án liên quan