1 / 42

Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng. Thieát bò hieån thò. Thieát bò queùt raster (refresh CRT, raster-scan display): ñaõ ñöôïc trình baøy Thieát bò hieån thò ñoaïn thaúng (line-drawing display): chæ hieån thò ñöôïc ñoaïn thaúng Pen plotter Leänh cô baûn: Pen_Up Pen_Down

oleg
Download Presentation

Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  2. Thieát bò hieån thò • Thieát bò queùt raster (refresh CRT, raster-scan display): ñaõ ñöôïc trình baøy • Thieát bò hieån thò ñoaïn thaúng (line-drawing display): chæ hieån thò ñöôïc ñoaïn thaúng • Pen plotter • Leänh cô baûn: • Pen_Up • Pen_Down • Go_To(x, y) • Get_Pen(i) • Vector-refresh display Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  3. Pen plotter • Heä thoáng toïa ñoä y (1023, 767) caây vieát x (0, 0) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  4. Bieåu dieãn ñoaïn thaúng trong frame buffer • Device driver Line • So saùnh vôùi giaûi thuaät cuûa Bresenham! procedure DD_Line(row1, col1, row2, col2, color : integer) {Bieåu dieãn trong frame buffer ñoaïn thaúng noái (col1, row1) vaø (col2, row2} {Tröôøng hôïp ñaëc bieät: -1  heä soá goùc  1 vaø col1  col2} var dx, dy, y, m : real; x : integer; begin dx := col2 - col1; dy := row2 - row1; m := dy/dx; y := row1; for x := col1 to col2 dobegin SetPixel(x, Round(y), color); y := y + m end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  5. NDC • Toïa ñoä thieát bò ñöôïc chuaån hoùa (NDC, normalized device coordinates): • Vuøng hình vuoâng vôùi goùc döôùi beân traùi (lower left corner) vaø goùc treân beân phaûi (upper right corner) coù toïa ñoä laø (0, 0) vaø (1, 1). • Duøng NDC ñeå goïi thuû tuïc veõ ñoaïn thaúng gioáng nhau cho moïi thieát bò procedure LineNDC_(x1, y1, x2, y2 : real) { Veõ ñoaïn thaúng noái (x1, y1) vaø (x2, y2) trong NDC Coù moät thuû tuïc nhö theá naøy cho moãi loaïi thieát bò Caùch goïi thuû tuïc ñeàu nhö nhau cho moïi loaïi thieát bò.} Display y 1. (x2, y2) (x1, y1) x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  6. Ví duï veõ aûnh duøng LineNDC_( ) • Veõ hình chöõ nhaät leân thieát bò Display y 1. (x2, y2) (x1, y1) x 1. procedure Box(x1, y1, x2, y2 : real); {Veõ hình chöõ nhaät coù ñænh döôùi beân traùi (x1, y1) vaø ñænh treân beân phaûi (x2, y2) trong NDC} begin LineNDC_(x1, y1, x2, y1); LineNDC_(x2, y1, x2, y2); LineNDC_(x2, y2, x1, y2); LineNDC_(x1, y2, x1, y1) end; {Box} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  7. AÙnh xaï NDC vaøo moät thieát bò • Hieån thò moät ñieåm trong NDC thaønh moät ñieåm cuûa thieát bò • AÙnh xaï sao cho NDC aùnh xaï thaønh hình vuoâng ôû giöõa lôùn nhaát cuûa thieát bò hieån thò y Hình vuoâng lôùn nhaát NDC 1. Q dy P Display y dx x x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  8. AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Baøi toaùn: Xaùc ñònh caùc heä soá A, B, C, D • Ví duï: ymaxxmax . Hình vuoâng lôùn nhaát ôû giöõa thieát bò coù • goùc treân traùi: ((xmax-ymax) / 2, ymax) • goùc döôùi phaûi: ((xmax + ymax) / 2, 0) • Ví duï: kích thöôùc thieát bò laø 1024  768. Hình vuoâng lôùn nhaát y dy ymax 767 1. NDC dx 1023 128 895 x xmax 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  9. AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Tính ñöôïc: (128, 767) vaø (895, 0) • Töø treân tìm ñöôïc: Hình vuoâng lôùn nhaát y dy ymax 767 1. NDC dx 1023 128 895 x xmax 0. 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  10. AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Tröôøng hôïp ymaxxmax . Ñaët offset= (xmax-ymax) / 2 thì dx = ymaxx+offset dy = ymaxy Hình vuoâng lôùn nhaát y dy 1. ymax NDC dx x xmax offset 0. 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  11. Veõ töø NDC vaøo thieát bò • Thuû tuïc veõ töø NDC leân hình vuoâng ôû giöõa lôùn nhaát cuûa thieát bò procedure LineNDC_(x1, y1, x2, y2 : real); {aùnh xaï leân hình vuoâng lôùn nhaát. Giaû söû Maxy  Maxx} const Maxx = 1023; Maxy = 767; var dx1, dy1, dx2, dy2 : integer; offset : real; begin offset := (Maxx - Maxy)/2.0; dx1 := round(Maxy*x1 + offset); {aùnh xaï leân hình vuoâng } dy1 := round(Maxy*y1); {lôùn nhaát } dx2 := round(Maxy*x2 + offset); dy2 := round(Maxy*y2); Pen_Up; Go_To(dx1, dy1); Pen_Down; Go_To(dx2, dy2) end; phuï thuoäc thieát bò phuï thuoäc thieát bò Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  12. R = Heä soá tyû leä (cuûa moät hình chöõ nhaät) = AÙnh xaï töø NDC leân toaøn thieát bò • Giaû söû R cuûa thieát bò < 1. • Laøm theá naøo ñeå taän duïng ñöôïc caû beà maët cuûa thieát bò? y RNDC Rdev NDC 1. R x 1. Heä soá tyû leä laø R Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  13. dx = xmax x dy = xmax y  AÙnh xaï töø NDC leân toaøn thieát bò (tieáp) Giaûi phaùp: Chæ söû duïng moät phaàn thích hôïp cuûa NDC y RNDC Rdev NDC 1. R x 0 1. Heä soá tyû leä laø R < 1. ÖÙng duïng phaûi bieát heä soá tyû leä R Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  14. LineNDC_( ) vaø LineNDC( ) • Kieåu döõ lieäu cho ñieåm trong maët phaúng type point = record x, y : real end; procedure LineNDC(p1, p2 : point); {Veõ ñoaïn thaúng noái p1 vaø p2} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  15. Polyline • polyline: chuoãi caùc ñoaïn thaúng • Kieåu döõ lieäu bieåu dieãn polyline polypoint = record num : 0..MaxVert; {number of points} pt : array [1..MaxVert] of point end; y 1. procedure PolylineNDC(poly : polypoint); {Veõ polyline poly} var i : integer; begin with poly doif num > 1 then for i := 1 to (num - 1) do LineNDC(pt[i], pt[i + 1]) end; x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  16. Polymarker • Ñaëc taû polymarker • ñònh nghóa tröôùc marker: , D, ,... • thuoäc tính: maøu, kích thöôùc • interface • procedure Polymarker(places : polypoint)     Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  17. Text • Ñaëc taû text • font (kieåu): ví duï Courier, Helvetica,... • serif • sans serif: sans serif • tröõ font döôùi daïng • bitmap • öu ñieåm: ñònh nghóa vaø hieån thò deã daøng, khoâng qua scan • conversion • khuyeát ñieåm: khoâng deã daøng sinh ra kích thöôùc khaùc • outline: bieåu dieãn kyù töï baèng caùc ñoaïn thaúng vaø ñöôøng cong • öu ñieåm: deã daøng sinh ra kích thöôùc khaùc • khuyeát ñieåm: phaûi qua scan conversion • interface • procedure Text(x, y, String) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  18. Duøng LineNDC_( ) ñeå veõ hình • Veõ aûnh chæ goàm caùc ñoaïn thaúng duøng thuû tuïc LineNDC_( ) • LineNDC_(x1, y1, x2, y2 : real) procedure House; begin LineNDC_(0.5, 0.7, 0.8, 0.5); {veõ daùng cuûa nhaø} LineNDC_(0.8, 0.5, 0.8, 0.1); LineNDC_(0.8, 0.1, 0.2, 0.1); LineNDC_(0.2, 0.1, 0.2, 0.5); LineNDC_(0.2, 0.5, 0.5, 0.7); LineNDC_(0.35, 0.1, 0.35, 0.3); {veõ cöûa} LineNDC_(0.35, 0.3, 0.5, 0.3); LineNDC_(0.5, 0.3, 0.5, 0.1) end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  19. Ví duï moät chöông trình ñoà hoïa • Ví duï moät chöông trình ñoà hoïa goïi thuû tuïc House program DrawHouse; <khai baùo House, LineNDC_, StartGraphics,...> begin StartGraphics; House; ExitGraphics end. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  20. Laäp trình ñeå söû duïng laïi: moät ví duï • Moät giôùi haïn cuûa thuû tuïc House laø khoâng tieän söû duïng laïi • Tham soá hoùa thuû tuïc House ñeå deã söû duïng laïi. procedure House2(corner : point; W, H : real); var Right, Top, Roof_Top, Door_Right, Door_Top, Door_Left : real; begin with corner do begin Right := x + W; Top := y + H; {toïa ñoä y lôùn nhaát cuûa vaùch} Roof_Top := Top + H/2.0; {toïa ñoä y cuûa ñænh cao nhaát} Door_Right := x + W/2.0; Door_Top := y + H/2.0; Door_Left := Door_Right - W/4.0; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  21. Laäp trình ñeå söû duïng laïi: moät ví duï (tieáp) LineNDC_(x, y, x, Top); LineNDC_(x , Top, Door_right, Roof_Top); LineNDC_(Door_right, Roof_Top, Right, Top); LineNDC_(Right, Top, Right, y); LineNDC_(Right, y, x, y); LineNDC_(Door_right, y, Door_right, Door_Top); LineNDC_(Door_right, Door_Top, Door_Left, Door_Top); {veõ cöûa} LineNDC_(Door_Left, Door_Top, Door_Left, y) end; end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  22. Thuû tuïc ñöôïc tham soá hoùa • Ví duï duøng thuû tuïc ñöôïc tham soá hoùa House2( ) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  23. Moâ hình vaø toïa ñoä thöïc • Cho ñeán baây giôø, taïo aûnh trong • frame buffer (duøng DD_Line( )) • NDC (duøng LineNDC( ) hay LineNDC_( )) • Laäp moâ hình • Moâ hình cho ñoái töôïng hay heä thoáng • Coâng cuï: phöông trình vi phaân,... • Moâ hình hình hoïc (geometric model) • hình daïng, kích thöôùc, thuoäc tính khaùc • Heä toïa ñoä thöïc (world coordinate system) • ñieåm trong maët phaúng coù toïa ñoä (x, y) • ñôn vò chieàu daøi: mm, m,... • Muïc ñích: töø moâ hình suy dieãn ñöôïc haønh vi cuûa ñoái töôïng hay heä thoáng. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  24. Moâ hình vaø toïa ñoä thöïc (tieáp) • Vieäc nhìn (viewing): quaù trình veõ moät pheùp nhìn (view) cuûa moâ hình leân moät thieát bò. Ba vaán ñeà: • Phaàn naøo cuûa moâ hình/ñoái töôïng caàn ñöôïc veõ? • Veõ ôû ñaâu treân thieát bò? • Veõ lôùn côõ naøo? (Bieán ñoåi toïa ñoä thöïc sang NDC) • Tieâu chí khi ñaëc taû vieäc nhìn: ít phuï thuoäc thieát bò. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  25. Cöûa soå Cöûa soå vaø vuøng nhìn • Pheùp nhìn (view) ñöôïc xaùc ñònh bôûi • Cöûa soå (window): phaàn cuûa moâ hình caàn ñöôïc veõ • Vuøng nhìn (viewport): phaàn trong NDC maø cöûa soå ñöôïc aùnh xaï leân. • Ñaëc taû vuøng nhìn trong NDC ñeå ít phuï thuoäc thieát bò. Heä toïa ñoä thöïc NDC 1. R Vuøng nhìn 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  26. Cöûa soå vaø vuøng nhìn (tieáp) • Cöûa soå vaø vuøng nhìn coù caùc caïnh song song vôùi caùc truïc toïa ñoä (tröø khi ñöôïc yeâu caàu khaùc) • Kích thöôùc vaø vò trí cuûa cöûa soå laø tuøy yù • Vuøng nhìn phaûi naèm trong NDC • Heä soá tyû leä cuûa cöûa soå vaø vuøng nhìn khoâng caàn phaûi baèng nhau. Heä toïa ñoä thöïc NDC 1. R Cöûa soå Vuøng nhìn 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  27. AÙnh xaï töø cöûa soå tôùi vuøng nhìn • Pheùp aùnh xaï: thoõa bieåu thöùc tuyeán tính vaø aûnh cuûa W laø V dx = sxx + tx dy = syy + ty Heä toïa ñoä thöïc NDC dy y V Vt l: left r: right b: bottom t: top W Wt (x, y) (dx, dy) Wb Vb x dx Wl Wr Vl Vr Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  28. Xaùc ñònh caùc heä soá cuûa aùnh xaï töø cöûa soå tôùi vuøng nhìn • Khi x = Wl thì dx = Vl , do ñoù • Vl = sxWl + tx • Khi x = Wr thì dx = Vr , do ñoù • Vr = sxWr + tx • Töông töï, coù ñöôïc heä thoáng phöông trình baäc nhaát vôùi 2 aån soá sy vaø ty Töø ñoù xaùc ñònh ñöôïc sy vaø ty . Heä thoáng phöông trình baäc nhaát vôùi 2 aån soá sx vaø tx Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  29. Caùc heä soá cuûa aùnh xaï töø cöûa soå tôùi vuøng nhìn Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  30. Kieåu döõ lieäu cho cöûa soå vaø vuøng nhìn • Kieåu döõ lieäu cho hình chöõ nhaät • Caøi caùc tham soá cuûa hình chöõ nhaät type rect = record {hình chöõ nhaät} l, t, r, b : real {l: left, t: top, r: right, b: bottom} end procedure SetRect(left, top, right, bott : real; var r : rect); {set boundary of rectangle} begin with r dobegin l := left; t := top; r := right; b := bott end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  31. Hieän thöïc aùnh xaï töø cöûa soå leân vuøng nhìn • Cho cöûa soå W vaø vuøng nhìn V, thuû tuïc sau xaùc ñònh caùc heä soá cuûa aùnh xaï töø W leân V: • AÙnh xaï ñieåm trong toïa ñoä thöïc pWorld : point ñeán ñieåm NDC : point procedure MapRects(W, V : rect; var sx, tx, sy, ty : real); {tính sx, sy, tx, ty töø caùc tham soá cuûa caùc hình chöõ nhaät} ... sx := (V.r - V.l)/(W.r - W.l); tx := ... sy := ... ty := ... pNDC.x := sx*pWorld.x + tx; pNDC.y := sy*pWorld.y + ty Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  32. Veõ ñoaïn thaúng • Veõ ñoaïn thaúng trong toïa ñoä thöïc leân thieát bò procedure Line(p1, p2 : point) {Veõ ñoaïn thaúng noái p1 vaø p2 trong toïa ñoä thöïc} var pNDC1, pNDC2 : point; {caùc ñieåm bieân cuûa ñoaïn thaúng trong NDC} begin Clip(p1, p2, vis); {remove if no clipping desired} if vis then {remove if no clipping desired} begin {Caùc bieán sx, sy, tx, ty laø toaøn cuïc} pNDC1.x := sx*p1.x + tx; pNDC1.y := sy*p1.y + ty; pNDC2.x := sx*py.x + tx; pNDC2.y := sy*py.y + ty; LineNDC(pNDC1, pNDC2) end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  33. Xeùn (clipping) ñoaïn thaúng • Caét ñi caùc phaàn cuûa ñoaïn thaúng naèm ngoaøi cöõa soå • Baøi toaùn: xeùn ñoaïn thaúng sao cho phí toån thôøi gian thaáp. Cöõa soå Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  34. Xeùn (clipping) ñoaïn thaúng (tieáp) • Thuû tuïc Clip(var p1, p2 : point; var vis : boolean) • xeùn ñoaïn thaúng noái p1 vaø p2 (toïa ñoä thöïc) ñoái vôùi cöûa soå • neáu vis laø true thì giao cuûa ñoaïn p1p2 vaø cöûa soå laø , vaø caùc ñieåm bieân ñöôïc tröõ trong p1 vaø p2 • neáu vis laø false thì giao cuûa ñoaïn p1p2 vaø cöûa soå laø . • Vôùi ñoaïn thaúng caàn ñöôïc xöû lyù, Clip( ) seõ: • khoâng laøm gì caû, neáu caû ñoaïn thaúng naèm trong cöûa soå • khöû noù, neáu caû ñoaïn thaúng naèm ngoaøi cöûa soå • caét moät ñieåm bieân, neáu ñoaïn thaúng coù moät ñieåm bieân naèm trong vaø moät ñieåm bieân naèm ngoaøi cöûa soå • caét caû hai ñieåm bieân, neáu caû hai ñieåm bieân cuûa ñoaïn thaúng naèm ngoaøi cöûa soå, nhöng moät phaàn ñoaïn thaúng naèm trong cöûa soå. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  35. Quan heä trong/ngoaøi giöõa ñieåm vaø hình chöõ nhaät • Quan heä trong/ngoaøi giöõa ñieåm bieân vaø cöõa soå c.r true c.r false type half_space_code = record l, t, r, b : boolean end; W procedure Encode(p : point; var c : half_space_code); {build code for point p} begin c.l := (p.x < W.l); c.r := (p.x > W.r); c.b := (p.y < W.b); c.t := (p.y > W.t) end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  36. Caét ñoaïn thaúng ñoái vôùi moät caïnh cuûa cöûa soå • Xaùc ñònh toïa ñoä cuûa A • Toïa ñoä x cuûa A: W.r • Toïa ñoä y cuûa A: p1.y - (p1.x - W.r)*m • Töông töï cho caùc caïnh khaùc cuûa cöûa soå d y W p1 W.t d A e W.b p2 x W.l W.r Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  37. Giaûi thuaät clipping cuûa Cohen-Sutherland • Xeùn ñoaïn thaúng noái p1 vaø p2 trong toïa ñoä thöïc procedure Clip(var p1, p2 : point; var vis : boolean); {vis laø true neáu sau khi xeùn, phaàn coøn laïi  } var c1, c2, tmp_cd : half_space_code; tmp_pt : point; m : real; {heä soá goùc cuûa ñoaïn thaúng} in1, in2, done : boolean; {cheùp procedure Encode( ) vaøo ñaây} begin {Clip} done := false; vis := false; repeat Encode(p1, c1); Encode(p2, c2); Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  38. Giaûi thuaät clipping cuûa Cohen-Sutherland (2) in1 := (not c1.l) and (not c1.t) and (not c1.r) and (not c1.b) in2 := (not c2.l) and (not c2.t) and (not c2.r) and (not c2.b) if in1 and in2 thenbegin {ñoaïn thaúng naèm trong} done := true; vis := true end elseif (c1.l and c2.l) or (c1.r and c2.r) or (c1.t and c2.t) or (c1.b and c2.b) thenbegin {ñoaïn thaúng naèm ngoaøi} done := true; vis := false end elsebegin {ít nhaát moät ñieåm bieân naèm ngoaøi} if in1 thenbegin {trao ñoåi p1, p2 vaø c1, c2 : baûo ñaûm p1 naèm ngoaøi} tmp_cd := c1; c1 := c2; c2 := tmp_cd; tmp_pt := p1; p1 := p2; p2 := tmp_pt end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  39. Giaûi thuaät clipping cuûa Cohen-Sutherland (3) if p2.x = p1.x thenbegin {ñoaïn thaúng ñöùng} if c1.t then p1.y := w.t {p1 naèm treân} elseif c1.b then p1.y := w.b {p1 naèm döôùi} end elsebegin {khoâng phaûi laø ñoaïn thaúng ñöùng} m := (p2.y - p1.y)/(p2.x - p1.x); {heä soá goùc} if c1.l thenbegin p1.y := p1.y + (w.l - p1.x)*m; p1.x := w.l end elseif c1.r thenbegin p1.y := p1.y + (w.r - p1.x)*m; p1.x := w.r end Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  40. Giaûi thuaät clipping cuûa Cohen-Sutherland (4) elseif c1.b thenbegin p1.x := p1.x + (w.b - p1.y)/m; p1.y := w.b end elseif c1.t thenbegin p1.x := p1.x + (w.t - p1.y)/m; p1.y := w.t end end {khoâng phaûi laø ñoaïn thaúng ñöùng} end {ít nhaát moät ñieåm bieân naèm ngoaøi} until done end; {Clip} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  41. Xeùn ñoaïn thaúng trong tröôøng hôïp xaáu nhaát • Giaûi thuaät Cohen-Sutherland coù theå caàn ñeán 4 laàn caét. • Thöù töï caét trong ví duï laø A, C, B, D. p2 B D C A p1 Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

  42. Baøi thí nghieäm/thöïc haønh 2 • 1. Hieän thöïc caùc thuû tuïc LineNDC_( ) vaø LineNDC( ) cho maøn hình coù kích thöôùc cao = 640 vaø roäng = 480 pixel. Caùc thuû tuïc caàn taän duïng ñöôïc caû maøn hình. • 2. Hieän thöïc thuû tuïc Clip( ). Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng

More Related