Mo t so gia i thua t o ho a c ba n
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

Moät soá giaûi thuaät ñoà hoïa cô baûn PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on
  • Presentation posted in: General

Moät soá giaûi thuaät ñoà hoïa cô baûn. Scan conversion. Scan conversion : quaù trình bieåu dieãn moät ñoái töôïng hình hoïc (ñoaïn thaúng, voøng troøn,...) trong boä ñeäm aûnh ñôn (frame buffer) cuûa heä thoáng ñoà hoïa queùt raster.

Download Presentation

Moät soá giaûi thuaät ñoà hoïa cô baûn

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Mo t so gia i thua t o ho a c ba n

Moät soá giaûi thuaät ñoà hoïa cô baûn

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Scan conversion

Scan conversion

  • Scan conversion: quaù trình bieåu dieãn moät ñoái töôïng hình hoïc (ñoaïn thaúng, voøng troøn,...) trong boä ñeäm aûnh ñôn (frame buffer) cuûa heä thoáng ñoà hoïa queùt raster.

  • vaän haønh (drive) the frame buffer thoâng qua caùc thuû tuïc

    • SetPixel()

    • GetPixel()

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Frame buffer va thie t b hie n th

Frame buffer vaø thieát bò hieån thò

  • Moâ hình chöùc naêng cuûa frame buffer

B

C

y

R

laøm töôi aûnh

x

Maøn hình

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Truy ca p va o frame buffer

Truy caäp vaøo frame buffer

  • Moâ hình laäp trình

    • Moâ hình cho frame buffer

    • Caùc thao taùc leân frame buffer.

const{moät ví duï}

MaxColumn= 639;{= C - 1}

MaxRow= 479;{= R - 1}

MaxColor= 255;{= soá caùc maøu - 1}

type

col= 0..MaxColumn;

row= 0..MaxRow;

color= 0..MaxColor;

procedure SetPixel(c : col, r : row, value : color); {load frame buffer}

function GetPixel(c : col, r : row) : color; {read frame buffer}

MaxRow

2

1

0

0

1

2

MaxColumn

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Bie u die n oa n tha ng trong frame buffer

Bieåu dieãn ñoaïn thaúng trong frame buffer

  • Cho ñoaïn thaúng noái hai ñieåm (xa , ya) vaø (xb , yb),

    • caùc toïa ñoä ñeàu laø soá nguyeân (toïa ñoä trong frame buffer)

  • Bieåu dieãn töôøng minh cuûa ñöôøng thaúng:

    • Ñoä doác: , vôùi

  • Baøi toaùn: Xaùc ñònh caùc pixel bieåu dieãn ñoaïn thaúng “toát” nhaát

    • tuøy thuoäc vaøo caùch ñònh nghóa sai soá

  • Wlog (without loss of generality), xa < xb vaø 0 < m < 1

y = m(x-xa) + ya

Dy = yb-ya

Dx = xb-xa

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Sai so khi cho n pixel

Sai soá khi choïn pixel

  • Sinh caùc pixel baèng phöông phaùp taêng daàn

  • Ñònh nghóa sai soá

e(Ti) = y* -yi - 1

e(Si) = (yi - 1+ 1) -y*

Ñoaïn thaúng lyù töôûng

Si

y*

yi- 1

Ti

xi- 1

xi

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Quy ta c cho n pixel xa p x to t oa n tha ng th c

Quy taéc choïn pixel xaáp xæ toát ñoaïn thaúng thöïc

  • Quy taéc choïn pixel

Choïn Ti neáu vaø chæ neáu e(Ti) -e(Si) < 0

Tính e(Ti) -e(Si) = 2m(xi-xa) + 2(ya-yi - 1) - 1

Töø treân, ñeå chæ tính vôùi soá nguyeân, ñònh nghóa

ei = Dx(e(Ti) - e(Si))

= 2(Dy)(xi-xa) + 2(Dx)(ya-yi - 1) -Dx(*)

Neáu ei < 0 thì choïn yi = yi- 1 , neáu khoâng thì choïn yi = yi- 1 + 1

Caàn kieåm tra tính ñuùng ñaén cuûa quy taéc treân!

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Kie m tra t nh u ng a n cu a quy ta c cho n pixel

Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel

  • Tröôøng hôïp ñoaïn thaúng lyù töôûng ñi qua giöõa Si vaø Ti

Ñoaïn thaúng lyù töôûng

Si

y*

yi- 1

Ti

xi- 1

xi

e(Ti) = y* -yi - 1

e(Si) = (yi - 1 + 1) -y*

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Kie m tra t nh u ng a n cu a quy ta c cho n pixel tie p

Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel (tieáp)

  • Caùc tröôøng hôïp coøn laïi

ñoaïn thaúng lyù töôûng

ñi qua phía treân Si vaø Ti

ñoaïn thaúng lyù töôûng

ñi qua phía döôùi Si vaø Ti

Si

Si

Ti

yi- 1

yi- 1

Ti

xi- 1

xi

xi- 1

xi

Nhaéc laïi: e(Ti) = y* -yi - 1

e(Si) = (yi - 1 + 1) -y*

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


T nh sai so mo t ca ch h u hie u

Tính sai soá moät caùch höõu hieäu

  • Töø (*) coùei + 1 = 2(Dy)(xi + 1-xa) + 2(Dx)(ya-yi ) -Dx

  • Töø treân,ei + 1 = ei + 2(Dy)(xi + 1-xi) - 2(Dx)(yi-yi- 1)

  • Theo quy taéc choïn pixel,

    • neáu ei < 0 thì choïn yi =yi- 1

      • ei + 1 = ei + 2Dy

    • neáu khoâng thì choïn yi =yi- 1 + 1

      • ei + 1 = ei + 2Dy- 2Dx

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Gia i thua t cu a bresenham

Giaûi thuaät cuûa Bresenham

  • Bieåu dieãn ñoaïn thaúng trong frame buffer

    • Giaûi thuaät baét ñaàu nhö theá naøo?

      • x0 = xa, y0 = ya

      • Töø (*) coù e1 = 2(Dy) -Dx(duøng x1-xa = 1)

procedure Bresenham(xa, xb : col; ya, yb : row; col_val : color);

{veõ ñoaïn thaúng coù maøu laø col_val töø (xa, ya) ñeán (ya, yb)}

{wlog, xa < xb vaø 0 < ñoä doác cuûa ñoaïn thaúng < 1}

var

x : col;

y : row;

dx, dy,

e_inc,{thay ñoåi cuûa sai soá khi y taêng}

e_noinc,{thay ñoåi cuûa sai soá khi y khoâng taêng}

e : integer;{sai soá hieän thôøi}

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Gia i thua t cu a bresenham tie p

Giaûi thuaät cuûa Bresenham (tieáp)

begin

y := ya;

dx := xb - xa;

dy := yb - ya;

e_noinc := dy + dy;

e := e_noinc - dx;

e_inc := e - dx;

for x := xa to xb do {voøng laëp chính}

begin

SetPixel(x, y, col_val);

if e < 0 then e := e + e_noinc;

elsebegin

y := y + 1;

e := e + e_inc

end;

end;

end; {Bresenham}

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Ca c tr ng h p kha c

Caùc tröôøng hôïp khaùc

  • Giaûi thuaät Bresenham giaû söû xa > xb vaø 0 < m < 1. Giaûi quyeát caùc tröôøng hôïp coøn laïi:

  • xa > xb

  • m > 1

  • Ñoä doác aâm: -1 < m < 0

  • Ñoaïn thaúng ñöùng vaø ñoaïn thaúng naèm ngang

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Bie u die n vo ng tro n trong frame buffer

Bieåu dieãn voøng troøn trong frame buffer

  • Baøi toaùn: Xaùc ñònh caùc pixel bieåu dieãn voøng troøn “toát” nhaát

    • tuøy thuoäc vaøo caùch ñònh nghóa sai soá

  • Giaûi quyeát

    • Do ñoái xöùng, chæ caàn khaûo saùt caùch veõ khi 0  x sao cho y(x)  x töùc laø cung AB.

    • Sinh caùc pixel baèng phöông phaùp taêng daàn (incremental).

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


O i x ng tre n vo ng tro n

Ñoái xöùng treân voøng troøn

  • Giaûm phí toån tính toaùn baèng caùch duøng pheùp ñoái xöùng treân voøng troøn

    • Chæ caàn xaùc ñònh caùc pixel töông öùng vôùi moät cung laø 1/8 voøng troøn, ôû ñaây choïn cung AB.

y

(-x, y)

(x, y)

A

B

(y, x)

(-y, x)

x

(-y, -x)

(y, -x)

(-x, -y)

(x, -y)

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Sai so khi cho n pixel1

Sai soá khi choïn pixel

  • Giaû söû coù pixel toát nhaát taïi böôùc thöù i- 1 laø Pi- 1 = (xi - 1, yi - 1)

  • Ñònh nghóa

    • Si = (xi - 1 + 1, yi - 1)

    • Ti = (xi - 1 + 1, yi - 1- 1)

  • Ñònh nghóa sai soá

    • e(P) = (x2 + y2) -R2

  • Ñònh nghóa haøm soá quyeát ñònh

    • di = e(Si) + e(Ti)

Pi- 1

Si

yi- 1

Ti

xi- 1

xi

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Qui ta c cho n pixel xa p x to t cung vo ng tro n

Qui taéc choïn pixel xaáp xæ toát cung voøng troøn

Neáu di < 0 thì choïn Si coøn neáu khoâng thì choïn Ti

Pi- 1

Si

yi- 1

Ti

xi- 1

xi

Caàn kieåm tra tính ñuùng ñaén cuûa quy taéc treân!

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Kie m tra t nh u ng a n cu a quy ta c cho n pixel1

Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel

  • Nhaéc laïi: di = e(Si) + e(Ti)

  • Tröôøng hôïp: di < 0

Si

Si

Si

Ti

Ti

Ti

e(Si) > 0

e(Ti) > 0

e(Si) > 0

e(Ti) < 0

e(Si) < 0

e(Ti) < 0

Khoâng theå!

OK, vì di < 0

 Si gaàn ñöôøng troøn hôn

OK!

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Kie m tra t nh u ng a n cu a quy ta c cho n pixel tie p1

Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel (tieáp)

  • Nhaéc laïi: di = e(Si) + e(Ti)

  • Tröôøng hôïp: di 0

Si

Si

Si

Ti

Ti

Ti

e(Si) > 0

e(Ti) < 0

e(Si) > 0

e(Ti) > 0

e(Si) < 0

e(Ti) < 0

OK, vì di0

 Ti gaàn ñöôøng troøn hôn

Khoâng theå!

OK!

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


T nh ha m so quye t nh mo t ca ch h u hie u

Tính haøm soá quyeát ñònh moät caùch höõu hieäu

  • Nhaéc laïi: e(P) = (x2 + y2) -R2

  • Coù theå chöùng minh ñöôïc (baøi taäp):

    • di + 1 = di + 4 xi - 1 + 6 + 2(yi2-yi- 12) - 2(yi-yi- 1)

  • Theo quy taéc choïn pixel

    • neáu di< 0 thì ta coù yi=yi- 1 , do ñoù

      • di + 1 = di + 4 xi - 1 + 6

    • neáu khoâng thì yi=yi- 1- 1, do ñoù

      • di + 1 = di + 4(xi - 1-yi - 1) + 10

  • Giaûi thuaät baét ñaàu nhö theá naøo?

    • x0 = 0, y0 = R

  • do ñoù S1 = (1, R) vaø T1 = (1, R- 1), vaäy d1 = 3 - 2R

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Gia i thua t cu a michener

Giaûi thuaät cuûa Michener

  • Bieåu dieãn voøng troøn trong frame buffer

procedure MichCirc(xc : col; yc : row; Rad : integer; value : color);

{Veõ voøng troøn coù taâm (xc, yc), baùn kính Rad, vaø maøu value}

var

x : col;

y : row;

d : integer;

begin

x := 0; y := Rad;

d := 3 - 2*Rad;

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


Gia i thua t cu a michener tie p

Giaûi thuaät cuûa Michener (tieáp)

while x <= y do begin

SetPixel(xc + x, yc + y, value);{draw 8 points }

SetPixel(xc - x, yc + y, value);{based on (x, y)}

SetPixel(xc + x, yc - y, value);

SetPixel(xc - x, yc - y, value);

SetPixel(xc + y, yc + x, value);

SetPixel(xc - y, yc + x, value);

SetPixel(xc + y, yc - x, value);

SetPixel(xc - y, yc - x, value);

if d < 0 then d := d + 4*x + 6{update error term}

elsebegin

d := d + 4*(x - y) + 10;

y := y - 1

end;

x := x + 1

end

end; {MichCirc}

Chöông 2: Moät soá giaûi thuaät ñoà hoïa cô baûn


  • Login