Đồ họa máy tính

pdf 22 trang phuongnguyen 7180
Bạn đang xem 20 trang mẫu của tài liệu "Đồ họa máy tính", để 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:

  • pdfdo_hoa_may_tinh.pdf

Nội dung text: Đồ họa máy tính

  1. ÑOÀ HOÏA MAÙY TÍNH CCaaùùcc tthhuuaaätät ttooaaùnùn vveeõ õ ññööôôønøngg Daããn nhaäpä · Giaû söû toïa ñoä caùc ñieåm nguyeân sau khi xaáp xæ ñoái töôïng thöïc laàn löôït laø (xi , yi ),i = 0, . Ñaây laø caùc ñieåm nguyeân seõ ñöôïc hieån thò treân maøn hình. · Baøi toaùn ñaët ra laø neáu bieát ñöôïc (xi , yi ) laø toïa ñoä nguyeân xaùc ñònh ôû böôùc thöù i, ñieåm nguyeân tieáp theo (xi+1 , yi+1 ) seõ ñöôïc xaùc ñònh nhö theá naøo. · Ñoái töôïng hieån thò treân löôùi nguyeân ñöôïc lieàn neùt, caùc ñieåm maø (xi+1 , yi+1 ) coù theå choïn chæ laø moät trong taùm ñieåm ñöôïc ñaùnh soá töø 1 ñeán 8 trong hình sau (ñieåm ñen chính laø (xi , yi )).Hay noùi caùch khaùc : (xi+1 , yi+1 ) = (xi ± 1, yi ± 1). 4 3 2 5 1 6 7 8 · Daùng ñieäu cuûa ñöôøng seõ cho ta gôïi yù khi choïn moät trong taùm ñieåm treân. Caùch choïn caùc ñieåm nhö theá naøo seõ tuøy thuoäc vaøo töøng thuaät toaùn treân cô sôû xem xeùt tôùi vaán ñeà toái öu toác ñoä. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 1/22
  2. ÑOÀ HOÏA MAÙY TÍNH TThhuuaaätät ttooaaùnùn vveeõ õ ññööôôønøngg tthhaaúúnngg · Xeùt ñoaïn thaúng coù heä soá goùc 0 0 . · Vôùi caùc ñoaïn thaúng daïng naøy, neáu (xi , yi ) laø ñieåm ñaõ xaùc ñònh ñöôïc ôû böôùc thöù i (ñieåm maøu ñen) thì ñieåm caàn choïn (xi+1 , yi+1 ) ôû böôùc thöù (i+1) seõ laø moät trong hai tröôøng hôïp nhö hình veõ sau : ìxi+1 = xi + 1 í îyi+1 Î {yi , yi + 1} (xi+1, yi+1) 2 y (x +1, y ) i 1 i i xi · Vaán ñeà coøn laïi, laø caùch choïn moät trong hai ñieåm treân nhö theá naøo ñeå coù theå toái öu veà maët toác ñoä. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 2/22
  3. ÑOÀ HOÏA MAÙY TÍNH Thuaäät toaùùn DDA (Digital Differential Analyzer) · Vieäc quyeát ñònh choïn yi+1 laø yi hay yi + 1 , döïa vaøo phöông trình cuûa ñoaïn thaúng y = mx + b. Nghóa laø, ta seõ tính toïa ñoä cuûa ñieåm (xi + 1, y) thuoäc veà ñoaïn thaúng thöïc. Tieáp ñoù, yi+1 seõ laø giaù trò sau khi laøm troøn giaù trò tung ñoä y. y = m(xi + 1) + b · Nhö vaäy : yi+1 = Round(y) (xi+1, Round(y)) (xi+1, y) (xi, yi) · Neáu tính tröïc tieáp giaù trò thöïc y ôû moãi böôùc töø phöông trình y = mx + bthì phaûi caàn moät pheùp toaùn nhaân vaø moät pheùp toaùn coäng soá thöïc. Ñeå caûi thieän toác ñoä, ngöôøi ta tính giaù trò thöïc cuûa y ôû moãi böôùc theo caùch sau ñeå khöû pheùp tính nhaân treân soá thöïc : · Nhaän xeùt raèng : ysau = mxi+1 + b = m(xi + 1) + b ytröôùc = mxi + b Þ ysau = ytröôùc + m Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 3/22
  4. ÑOÀ HOÏA MAÙY TÍNH Löu ñoà thuaät toaùn DDA Begin m=Dy/Dx; x=x1; y=y1; putpixel(x, Round(y), c); x<x2 No Yes x=x+1; y=y+m; putpixel(x, Round(y),c); End Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 4/22
  5. ÑOÀ HOÏA MAÙY TÍNH · Ví duï : Cho A(12, 20) vaø B(22, 27), ta coù m= 0.7 ii xii yii y 0 12 20 20 1 13 21 20.7 2 14 21 21.4 3 15 22 22.1 4 16 5 17 6 18 7 19 8 20 9 21 10 22 27 · Caøi ñaët minh hoïa thuaät toaùn DDA #define Round(a) int(a+0.5) int Color = GREEN; void LineDDA (int x1, int y1, int x2, int y2) { int x = x1; float y = y1; float m = float(y2-y1)/(x2-x1); putpixel(x, Round(y), Color); for(int i=x1; i<x2; i++) { x++; y +=m; putpixel(x, Round(y), Color); } } // LineDDA Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 5/22
  6. ÑOÀ HOÏA MAÙY TÍNH Thuaäät toaùùn Bresenham (xi+1, y) P yi+1 d2 y d1 S yi xi xi+1 · Goïi (xi + 1, y) laø ñieåm thuoäc ñoaïn thaúng. Ta coù: y = m(xi + 1) + b . d1 = y - yi · Ñaët d2 = (yi + 1) - y · Xeùt taát caû caùc vò trí töông ñoái cuûa y so vôùi yi vaø yi + 1 , vieäc choïn ñieåm (xi+1 , yi+1 ) laø S hay P phuï thuoäc vaøo vieäc so saùnh d1 vaø d2 hay daáu cuûa d1 - d2 : ¨ Neáu d1 - d2 < 0 , ta seõ choïn ñieåm S, töùc laø yi+1 = yi . ¨ Ngöôïc laïi, neáu d1 - d2 ³ 0 , ta seõ choïn ñieåm P, töùc laø yi+1 = yi + 1 · Xeùt pi = Dx(d1 - d2 ) = Dx(2y - 2yi - 1) Þ pi = Dx[2(m(xi + 1) + b) - 2yi - 1] Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 6/22
  7. ÑOÀ HOÏA MAÙY TÍNH Dy m = · Thay Dx vaøo phöông trình treân ta ñöôïc : pi = 2Dyxi - 2Dxyi + c , vôùi c = 2Dy + (2b - 1)Dx . · Nhaän xeùt raèng neáu taïi böôùc thöù i ta xaùc ñònh ñöôïc daáu cuûa pi thì xem nhö ta xaùc ñònh ñöôïc ñieåm caàn choïn ôû böôùc (i+1). · Ta coù : pi+1 - pi = (2Dyxi+1 - 2Dxyi+1 + c) - (2Dyxi - 2Dxyi + c) Û pi+1 - pi = 2Dy(xi+1 - xi ) - 2Dx(yi+1 - yi ) Û pi+1 - pi = 2Dy - 2Dx(yi+1 - yi ), do xi+1 = xi + 1 · Töø ñaây ta coù theå suy ra caùch tính pi+1 töø pi nhö sau : ¨ Neáu pi < 0 thì pi+1 = pi + 2Dy do ta choïn yi+1 = yi . ¨ Ngöôïc laïi, neáu pi ³ 0 , thì pi+1 = pi + 2Dy - 2Dx , do ta choïn yi+1 = yi + 1 . · Giaù trò p0 ñöôïc tính töø ñieåm veõ ñaàu tieân (x0 , y0 ) theo coâng thöùc : p0 = 2Dyx0 - 2Dxy0 + c = 2Dyx0 - 2Dxy0 + 2Dy - (2b - 1)Dx · Do (x0 , y0 ) laø ñieåm nguyeân thuoäc veà ñoaïn thaúng Dy y = mx + b = x + b neân ta coù 0 0 Dx 0 . Theá vaøo phöông trình treân ta suy ra : p0 = 2Dy - Dx . Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 7/22
  8. ÑOÀ HOÏA MAÙY TÍNH Löu ñoà thuaät toaùn Bresenham Begin p=2Dy-Dx; Const1=2Dy; Const2=2(Dy-Dx); x=x1; y=y1; putpixel(x, y, c); x<x2 No Yes p<0 No Yes p=p+Const1; p=p+Const2; y=y+1 x=x+1; putpixel(x,y,c); End Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 8/22
  9. ÑOÀ HOÏA MAÙY TÍNH · Ví duï : Cho A(12, 20) vaø B(22, 27), · Ta coù ¨ Dx = 22-12 = 10, Dy=27-20=7 ¨ Const1 = 2Dy = 14, Const2 = 2(Dy – Dx) = -6 ¨ p0 = 2Dy – Dx = 14-10 = 4 ii xii yii pii 0 12 20 4 1 13 21 -2 2 14 21 12 3 15 22 6 4 16 23 0 5 17 24 -6 6 18 24 8 7 19 25 2 8 20 26 -4 9 21 26 10 10 22 27 4 · Nhaän xeùt ¨ Thuaät toaùn Bresenham chæ laøm vieäc treân soá nguyeân vaø caùc thao taùc treân soá nguyeân chæ laø pheùp coäng vaø pheùp dòch bit (pheùp nhaân 2) ñieàu naøy laø moät caûi tieán laøm taêng toác ñoä ñaùng keå so vôùi thuaät toaùn DDA. YÙ töôûng chính cuûa thuaät toaùn naèm ôû choã xeùt daáu pi ñeå quyeát ñònh ñieåm keá tieáp, vaø söû duïng coâng thöùc truy hoài pi+1 - pi ñeå tính pi baèng caùc pheùp toaùn ñôn giaûn treân soá nguyeân. ¨ Thuaät toaùn naøy cho keát quaû töông töï nhö thuaät toaùn DDA. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 9/22
  10. ÑOÀ HOÏA MAÙY TÍNH · Caøi ñaët minh hoïa thuaät toaùn Bresenham void LineBres (int x1, int y1, int x2, int y2) { int Dx, Dy, p, Const1, Const2; int x, y; Dx = x2 - x1; Dy = y2 - y1; p = 2*Dy - Dx; // Dy <<1 - Dx Const1 = 2*Dy; // Dy <<1 Const2 = 2*(Dy-Dx); // (Dy-Dx) <<1 x = x1; y = y1; putpixel(x, y, Color); for(i=x1; i<x2; i++) { if (p<0) p += Const1; else { p += Const2; y++; } x++; putpixel(x, y, Color); } } // LineBres Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 10/22
  11. ÑOÀ HOÏA MAÙY TÍNH Thuaäät toaùùn MidPoint · Thuaät toaùn MidPoint ñöa ra caùch choïn yi+1 laø yi hay yi + 1 baèng caùch so saùnh ñieåm thöïc Q(xi + 1, y) 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. Q(xi+1, y) P yi+1 MidPoint S yi xi xi+1 · Ta coù daïng toång quaùt cuûa phöông trình ñöôøng thaúng : Ax + By + C = 0 vôùi A = y2 - y1 , B = -(x2 - x1 ), C = x2 y1 - x1 y2 · Ñaët F(x, y) = Ax + By + C , ta coù nhaän xeùt : ì 0,neáu (x, y) naèm phía döôùi ñöôøng thaúng. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 11/22
  12. ÑOÀ HOÏA MAÙY TÍNH · Luùc naøy vieäc choïn caùc ñieåm S, P ôû treân ñöôïc ñöa veà æ 1 ö vieäc xeùt daáu cuûa pi = 2F(MidPoint ) = 2Fç xi +1, yi + ÷ . è 2 ø ¨ Neáu pi < 0 , ñ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ø yi+1 = yi . ¨ Ngöôïc laïi, neáu pi ³ 0 , ñ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ø yi+1 = yi + 1 . · Maët khaùc : æ 1 ö æ 1 ö pi+1 - pi = 2Fç xi+1 + 1, yi+1 + ÷ - 2Fç xi + 1, yi + ÷ è 2 ø è 2 ø é æ 1ö ù é æ 1ö ù Û pi+1 - pi = 2êA(xi+1 + 1) + Bç yi+1 + ÷ + Cú - 2êA(xi + 1) + Bç yi + ÷ + Cú ë è 2ø û ë è 2ø û Û pi+1 - pi = 2A + 2B(yi+1 - yi ) = 2Dy - 2Dx(yi+1 - yi ) · Nhö vaäy : ¨ pi+1 = pi + 2Dy , neáu pi < 0 do ta choïn yi+1 = yi . ¨ pi+1 = pi + 2Dy - 2Dx , neáu pi ³ 0 do ta choïn yi+1 = yi + 1 . · Ta tính giaù trò p0 öùng vôùi ñieåm ban ñaàu (x0 , y0 ) , vôùi nhaän xeùt raèng (x0 , y0 ) laø ñieåm thuoäc veà ñoaïn thaúng, töùc laø coù : Ax0 + By0 + C = 0 æ 1 ö é æ 1 ö ù p0 = 2Fç x0 + 1, y0 + ÷ = 2êA(x0 + 1) + Bç y0 + ÷ + Cú è 2 ø ë è 2 ø û Þ p0 = 2(Ax0 + By0 + C) + 2A + B = 2A + B = 2Dy - Dx Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 12/22
  13. ÑOÀ HOÏA MAÙY TÍNH 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) ? Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 13/22
  14. ÑOÀ HOÏA MAÙY TÍNH · Caøi ñaët thuaät toaùn cho 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 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 Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 14/22
  15. ÑOÀ HOÏA MAÙY TÍNH 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õ) : ì 2 ï0 £ x £ R ï 2 í ï 2 R £ y £ R îï 2 (-x,y) (x,y) (-y,x) (y,x) R (-y,-x) 2 (y,-x) (-x,-y) (x,-y) · 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). Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 15/22
  16. ÑOÀ HOÏA MAÙY TÍNH · Choïn ñieåm baét ñaàu ñeå veõ laø ñieåm (0,R). · Döïa vaøo hình veõ, neáu (xi , yi ) laø ñieåm nguyeân ñaõ tìm ñöôïc ôû böôùc thöù i, thì ñieåm (xi+1 , yi+1 ) ôû böôùc thöù (i+1) laø söï löïa choïn giöõa S vaø P. ìxi+1 = xi + 1 · Nhö vaäy : í îyi+1 Î {yi , yi - 1} Q(xi+1, y) S yi MidPoint P yi-1 xi xi+1 2 2 2 · Ñaët F(x, y) = x + y - R , ta coù : ì 0,neáu (x, y) naèm ngoaøi ñöôøng troøn. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 16/22
  17. ÑOÀ HOÏA MAÙY TÍNH æ 1 ö pi = F(MidPoint) = Fç xi + 1, yi - ÷ · Xeùt è 2 ø . Ta coù : ¨ Neáu pi < 0 , ñ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ø yi+1 = yi . ¨ Ngöôïc laïi, neáu pi ³ 0 , ñ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ø yi+1 = yi - 1 . · Maët khaùc : æ 1 ö æ 1 ö pi+1 - pi = Fç xi+1 + 1, yi+1 - ÷ - Fç xi + 1, yi - ÷ è 2 ø è 2 ø é 2 ù é 2 ù 2 æ 1 ö 2 2 æ 1 ö 2 Û pi+1 - pi = ê(xi+1 + 1) + ç yi+1 - ÷ - R ú - ê(xi + 1) + ç yi - ÷ - R ú ëê è 2ø ûú ëê è 2ø ûú 2 2 Û pi+1 - pi = 2xi + 3 + (yi+1 - yi ) - (yi+1 - yi ) · Vaäy : ¨ pi+1 = pi + 2xi + 3 , neáu pi < 0 do ta choïn yi+1 = yi . ¨ pi+1 = pi + 2xi - 2yi + 5 , neáu pi ³ 0 do ta choïn yi+1 = yi - 1 . · p0 öùng vôùi ñieåm ban ñaàu (x0 , y0 ) = (0, R) . æ 1 ö æ 1 ö 5 p0 = Fç x0 + 1, y0 - ÷ = Fç1, R - ÷ = - R è 2 ø è 2 ø 4 Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 17/22
  18. ÑOÀ HOÏA MAÙY TÍNH 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 No Yes p<0 No Yes p=p+2*x+3; p=p+2(x-y)+5; y=y-1 x=x+1; Put8Pixel(x,y,c); End Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 18/22
  19. ÑOÀ HOÏA MAÙY TÍNH 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 Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 19/22
  20. ÑOÀ HOÏA MAÙY TÍNH · Ví duï : Veõ ñöôøng troøn taâm I(0,0), baùn kính R=15. ii xii yI pii Dellta1 Dellta2 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. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 20/22
  21. ÑOÀ HOÏA MAÙY TÍNH 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 : 2 2 Ax + Bxy + Cy + Dx + Ey + F = 0 . 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: ì 0, daïng hyperbol. 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õ : ìxi+1 = xi + 1 ¨ Neáu 0 £ f '(x) £ 1 thì í îyi+1 Î {yi , yi + 1} (*) ìxi+1 = xi + 1 ¨ Neáu -1 £ f '(x) £ 0 thì í îyi+1 Î {yi , yi - 1} (*) ìyi+1 = yi + 1 ¨ Neáu f '(x) > 1 thì í îxi+1 Î {xi , xi + 1} (*) ìyi+1 = yi + 1 ¨ Neáu f ' (x) < -1 thì í îxi+1 Î {xi , xi - 1} (*) Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 21/22
  22. ÑOÀ HOÏA MAÙY TÍNH · Böôùc 3 : Xaùc ñònh coâng thöùc cuûa pi cho töøng tröôøng hôïp ñeå quyeát ñònh (*) döïa treân daáu cuûa pi . pi thöôøng laø haøm ñöôïc xaây döïng töø phöông trình ñöôøng cong ñeå cho pi = 0 neáu (xi ,yi )thuoäc veà ñöôøng cong. Vieäc choïn pi caàn phaûi chuù yù sao cho thao taùc tính pi 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 pi+1 vaø pi baèng caùch xeùt hieäu pi+1 - pi . · Böôùc 5 : Tính p0 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 ïR £ x £ R ï 2 í 2 ï0 £ y £ R îï 2 · 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. Döông Anh Ñöùc, Leâ Ñình Duy Caùc thuaät toaùn veõ ñöôøng 22/22