Grafika Komputerowa(1)

31
Katedra Technik Programowania p. 420 WETI tel. (347-)20-96 GRAFIKA KOMPUTEROWA LITERATURA: 1. R. A. Earnshaw (ed.): Fundamental Algorithms for Computer Graphics. Springer, Berlin 1985. 2. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes, R. L. Phillips: Wprowadzenie do grafiki komputerowej. WNT, Warszawa 1995. 3. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes: Computer Graphics: Principles and Practice, Second Edition. Addison-Wesley, Reading 1990. 4. G. Hégron: Synthèse d’image: algorithmes élémentaires. Dunod informatique, Paris 1985. 5. M. Jankowski: Elementy grafiki komputerowej. WNT, Warszawa 1990. 6. T. Pavlidis: Grafika i przetwarzanie obrazów. WNT, Warszawa 1987. 7. J. Zabrodzki (red.): Grafika komputerowa, metody i narz dzia. WNT, Warszawa 1994. Gda sk 2000 2 GRAFIKA, PRZETWARZANIE I ROZPOZNAWANIE OBRAZÓW Obraz Opis Przetwarzanie obrazów Rozpoznawanie obrazów Grafika Rys. przetwarzaniem obrazów i rozpoznawaniem obrazów. GRAFIKA KOMPUTEROWA Obrazowanie schematów S Synteza obrazów realistycznych Wizualizacja modelowanych zjawisk Animacja Plastyka PRZETWARZANIE OBRAZÓW Dyskretyzacja obrazów Polepszanie jako Urealnianie obrazów Rekonstrukcja obrazów Kompresja obrazów ROZPOZNAWANIE OBRAZÓW Opis obiektów Klasyfikacja obiektów Porównywanie obrazów Analiza struktury

Transcript of Grafika Komputerowa(1)

Page 1: Grafika Komputerowa(1)

-DFHN /HELHG(

32/,7(&+1,.$ *'$6.$

:\G]LDá (OHNWURQLNL 7HOHNRPXQLNDFML L ,QIRUPDW\NL

Katedra Technik Programowania

p. 420 WETI tel. (347-)20-96

GRAFIKA KOMPUTEROWA

LITERATURA:

1. R. A. Earnshaw (ed.): Fundamental Algorithms for ComputerGraphics. Springer, Berlin 1985.

2. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes, R. L. Phillips:Wprowadzenie do grafiki komputerowej. WNT, Warszawa 1995.

3. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes: Computer Graphics:Principles and Practice, Second Edition. Addison-Wesley, Reading 1990.

4. G. Hégron: Synthèse d’image: algorithmes élémentaires. Dunodinformatique, Paris 1985.

5. M. Jankowski: Elementy grafiki komputerowej. WNT, Warszawa 1990.6. T. Pavlidis: Grafika i przetwarzanie obrazów. WNT, Warszawa 1987.7. J. Zabrodzki (red.): Grafika komputerowa, metody i narzdzia. WNT,

Warszawa 1994.

Gdask 2000

2

GRAFIKA, PRZETWARZANIE I ROZPOZNAWANIE OBRAZÓW

Obraz

Opis

Przetwarzanie obrazów

Rozpoznawanie obrazówGrafika

Rys. 6FKHPDW LOXVWUXMF\

Z]DMHPQH ]DOH*QRFL

PLG]\ JUDILN

przetwarzaniemobrazów irozpoznawaniemobrazów.

GRAFIKA KOMPUTEROWA• .RPXQLNDFMD ] F]áRZLHNLHP

• Obrazowanie schematów• 3UH]HQWRZDQLH ]HVWDZLH

• 0RGHORZDQLH NV]WDáWyZ

• .UHOHQLH U\VXQNyZ WHFKQLF]Q\FK

• 6NáDGDQLH SXEOLNDFML

• SSRU]G]DQLH PDS NDUWRJUDILD

• Synteza obrazów realistycznych• Wizualizacja modelowanych zjawisk• Animacja• Plastyka

PRZETWARZANIE OBRAZÓW• Dyskretyzacja obrazów• Polepszanie jakoFL REUD]yZ• Urealnianie obrazów• Rekonstrukcja obrazów• Kompresja obrazów• :\RGUEQLDQLH RELHNWyZ

• 8SUDV]F]DQLH NV]WDáWyZ

ROZPOZNAWANIE OBRAZÓW• Opis obiektów• Klasyfikacja obiektów• Porównywanie obrazów• Analiza struktury

Page 2: Grafika Komputerowa(1)

3

BARWA (KOLOR)

ZLDWáR SURPLHQLRZDQLH HOHNWURPDJQHW\F]QH R GáXJRFL IDOL λ∈(380,780) nm.

• Dwa rodzaje receptorów w ludzkim oku:

• SUFLNL UHDJXM MX* SU]\ QLVNLP SR]LRPLH RZLHWOHQLD EUDN ZUD*Hbarwnych - widzenie skotopowe (nocne);

• czopki UHDJXM GRSLHUR SU]\ Z\*V]\P SR]LRPLH RZLHWOHQLD ZUD*HQLHbarwy - widzenie fotopowe (dzienne).

• Teoria Younga - Helmholtza Z\MDQLDMFD PHFKDQL]P SRZVWDZDQLD

ZUD*HQLD EDUZ\ =DNáDGD RQD Z\VWSRZDQLH Z F]RSNDFK WU]HFK VXEVWDQFML

ZLDWáRF]Xá\FK F]Xá\FK RGSRZLHGQLR QD EDUZ\

• QLHELHVN F]XáRü β(λ),

• ]LHORQ F]XáRü γ(λ),

• SRPDUDF]RZRF]HUZRQ F]XáRü ρ(λ).

3RVWU]HJDQD EDUZD Z\QLND ]H VWRVXQNX SREXG]H W\FK SRV]F]HJyOQ\FK

VXEVWDQFML 6XPD SREXG]H GHWHUPLQXMH RGELHUDQ MDVQRü

• Zjawisko metameryzmu SURPLHQLRZDQLH R Uy*Q\P VNáDG]LH ZLGPRZ\P

PR*H GDZDü LGHQW\F]QH ZUD*HQLH EDUZ\ LGHQW\F]Q\ VWRVXQHN SREXG]HWU]HFK VXEVWDQFML ZLDWáRF]Xá\FK Z F]RSNDFK

• Modele syntezy barw:

• model RGB ang. red + green + blue - czerwony + zielony + niebieski,synteza addytywna, stosowany w monitorach kolorowych;

• modele CMY i CMYK ang. cyan + magenta + yellow (+ black) -]LHORQRQLHELHVNL NDUPD]\QRZ\ *yáW\ F]DUQ\

synteza subtraktywna, stosowane w poligrafii;

• modele YUV, YIQ i YCbCr - luminancja + dwie chrominancje,VWRVRZDQH Z WHOHZL]ML NRORURZHM ]JRGQH ] WHOHZL]M F]DUQRELDá

• modele HSV i HLS ang. hue + saturation + value (lightness) -RGFLH QDV\FHQLH ZDUWRü MDVQRü RGFLH DQJ hue Z\UD*DQ\ NWHP

hue: red yellow green cyan blue magentaNW 0° 60° 120° 180° 240° 300°

VWRVRZDQH Z GLDORJX ] F]áRZLHNLHP ]JRGQH ] OXG]N LQWXLFM

• model CIE XYZ (franc. Commission Internationale de l'Eclairage),PRGHO WHRUHW\F]Q\ DEVWUDNF\MQ\ XNáDG EDUZ RGQLHVLHQLD ; < =

• modele CIE LUV i CIE LAB - inne modele teoretyczne CIE;

• model TekHVC - model teoretyczny opracowany w firmie Tektronix,RGOHJáRFL JHRPHWU\F]QH SURSRUFMRQDOQH GR Uy*QLF ZUD*H EDUZQ\FK

4

SPOSOBY PREZENTACJI OBRAZÓW W GRAFICE KOMPUTEROWEJ:

• GRAFIKA RASTROWA3áDV]F]\]QD REUD]X MHVW SRG]LHORQD QD SURVWRNWQH HOHPHQW\ W]Z SLNVHOH

Tworzenie obrazu polega na wyznaczeniu kolorów poszczególnych pikselii naniesieniu tych kolorów w odpowiednich miejscach poleceniem write(c).SU]\NáDG\ XU]G]H GUXNDUND LJáRZD VNDQHU

Sposoby reprezentacji obrazów:• tablice (mapy bitowe) type Image = array [0..mx,0..my] of Color• drzewa czwórkowe• drzewa binarne

Kompresja:• metody bez utraty informacji:

• PHWRG\ NRGyZ ]PLHQQHM GáXJRFL +XIIPDQ

• metody arytmetyczne• PHWRG\ VáRZQLNRZH /HPSHO=LY:HOFK /=:

• bezstratne metody kompresji danych graficznych,QS NRGRZDQLH GáXJRFL VHNZHQFML DQJ run length encoding RLE)

• PHWRG\ ] XWUDW LQIRUPDFML

• PHWRG\ EH]SRUHGQLH Z G]LHG]LQLH REUD]X PLQ PHWRG\ IDONRZH

• metody transformat, np. JPEG (ang. Joint Photographic Experts Group)• metody fraktalne

Formy danych obrazowych:• obrazy kolorowe type Color = record red, green, blue: integer end• obrazy szare (wielopoziomowe) type Color = integer• REUD]\ F]DUQRELDáH GZXSR]LRPRZH type Color = Boolean

• GRAFIKA WEKTOROWA2EUD] VNáDGD VL ] WDNLFK RELHNWyZ MDN RGFLQHN OXE SXQNW

Tworzenie obrazu polega na narysowaniu poszczególnych obiektówVNáDGRZ\FK SROHFHQLDPL plot(x,y,c), vector(x1,y1,x2,y2,c).SU]\NáDG\ XU]G]H SORWHU WDEOHW

Sposoby reprezentacji obrazów:• zbiór linii type Image = list of Line

Formy danych obrazowych:• REUD]\ VNáDGDMFH VL ] OLQLL FLJá\FK

type Line = record x,y:integer; c:Color; chain: list of 0..7 end• REUD]\ VNáDGDMFH VL ] RGFLQNyZ

type Line = list of record x,y:integer; c:Color end

Page 3: Grafika Komputerowa(1)

5

Metody kompresji danych graficznych

• .RGRZDQLH GáXJRFL VHNZHQFML (ang. run length encoding RLE)

: REUD]LH ]OLQHDU\]RZDQ\P Z\VWSXM F]VWR FLJL SLNVHOL R WDNLP VDP\P

NRORU]H &LJL WDNLH PR*QD NRGRZDü MDNR SDU\ OLF]ED SLNVHOL L LFK NRORU

• Metody transformat

♦ 3RG]LDá REUD]X QD EORNL Um×m o rozmiarze m×m (dla JPEG: m=8).♦ Wykonanie zadanej transformacji T na poszczególnych blokach Um×m:

Vm×m=TUm×m (dla JPEG: DCT).♦ Dokonanie kwantyzacji K wyników transformacji Vm×m:

Wm×m=KVm×m (dla JPEG: wi,j = [vi,j / qi,j ], gdzie wi,j, vi,j, qi,j Velementami macierzy Wm×m, Vm×m i Qm×m, przy czym Qm×m jest]DGDQ PDFLHU] NZDQW\]DFML

♦ Linearyzacja skwantowanych wyników transformacji Wm×m (dla JPEG:metoda ZIGZAG).

♦ .RPSUHVMD HIHNWyZ OLQHDU\]DFML MDN PHWRG EH] XWUDW\ LQIRUPDFML GOD

JPEG: metoda Huffmana).

Rys. KomprHVMD PHWRG WUDQVIRUPDW

♦ Dekompresja skwantowanych wyników transformacji Wm×m X*\W GR

NRPSUHVML PHWRG EH] XWUDW\ LQIRUPDFML GOD -3(* PHWRGD +XIIPDQD

♦ 2GWZRU]HQLH SU]\EOL*RQ\FK Z\QLków transformacji Vm×m na podstawieskwantowanych wyników transformacji Wm×m (dla JPEG:vi,j = wi,j · qi,j, gdzie vi,j, wi,j, qi,j V HOHPHQWDPL PDFLHU]\ Vm×m,Wm×m i Qm×m, przy czym Qm×m MHVW ]DVWRVRZDQ SRGF]DV NRPSUHVML

PDFLHU] NZDQW\]DFML

♦ Wykonanie zadanej transformacji odwrotnej T-1 na poszczególnychSU]\EOL*RQ\FK Z\QLNDFK WUDQVIRUPDFML Vm×m: Um×m=T-1Vm×m (dlaJPEG: odwrotna DCT).

5\V 'HNRPSUHVMD PHWRG WUDQVIRUPDW

16 11 10 16 24 40 51 61 17 18 24 47 66 99 99 9912 12 14 19 26 58 60 55 18 21 26 66 99 99 99 9914 13 16 24 40 57 69 56 24 26 56 99 99 99 99 9914 17 22 29 51 87 80 62 47 69 99 99 99 99 99 9918 22 37 56 68 109 103 77 99 99 99 99 99 99 99 9924 35 55 64 81 104 113 92 99 99 99 99 99 99 99 9949 64 78 87 103 121 120 101 99 99 99 99 99 99 99 9972 92 95 98 112 100 103 99 99 99 99 99 99 99 99 99

Rys. Macierze kwantyzacji Q8×8

dla luminancji i dla chrominancji.

Rys. Linearyzacja metod =,*=$* GOD m=8).

6

• Metody falkowe

:\NRU]\VW\ZDQH WX V GZD ILOWU\ MHGQRZ\PLDURZH ILOWU GROQRprzepustowy Li lustrzany do niego filtr górnoprzepustowy H.

7ZRU]RQ\ MHVW FLJ REUD]yZ Î1+, Î1

–, Î1|, Î2

+, Î2–, Î2

|, ..., În+, În

–, În|, In.

Kompresja polega tu na skwantowaniu kolorów pikseli obrazówXWZRU]RQHJR FLJX L ]DNRGRZDQLX LFK PHWRG EH] XWUDW\ LQIRUPDFML

• Metody fraktalne

Fraktalem QD]\ZDP\ SRG]ELyU SáDV]F]\]Q\ OXE LQQHM SU]HVWU]HQL

PHWU\F]QHM NWyUHJR IUDJPHQW\ V SRGREQH Z MDNLP VHQVLH GR FDáRFL

0DWHPDW\F]QLH SRGRELHVWZR WR RSLVXMH VL Z IRUPLH SU]HNV]WDáFHQLD

RGZ]RURZXMFHJR FDá\ IUDNWDO QD MHJR F]ü =HVSyá WDNLFK SU]HNV]WDáFH

RGSRZLDGDMF\FK SRGRELHVWZX SRV]F]HJyOQ\FK F]FL GR FDáRFL RNUHOD

VL PLDQHP LWHUDF\MQHJR XNáDGX IXQNFML DQJ iterated function system).= ND*G\P IUDNWDOHP PR*QD ]DWHP VNRMDU]\ü LWHUDF\MQ\ XNáDG IXQNFML

• PHWRG\ NROD*X ,)6 DQJ iterated function system) NRGRZDQLH SRGRELHVWZ JHRPHWU\F]Q\FK NV]WDáWyZ

• PHWRG\ SDF]áRUNX 3,)6 DQJ partitioned iterated function system) NRGRZDQLH SRGRELHVWZ Z G]LHG]LQLH NRORUyZ

a) b)

x' = 0.85· x + 0.04· y + 0y' = – 0.04· x + 0.85· y + 1.6

x' = 0.2· x – 0.26· y + 0y' = 0.23· x + 0.22· y + 1.6

x' = – 0.15· x + 0.28· y + 0y' = 0.26· x + 0.24· y + 0.44

x' = 0· x + 0· y + 0y' = 0· x + 0.16· y + 0

5\V )UDNWDOQ\ OLü SDSURFL D L MHJR LWHUDF\MQ\ XNáDG IXQNFML E

Ii

Ii+1

Îi+1+

Îi+1|

Îi+1–H

L

2:1

2:1

H

L

H

L

2:1

2:1

2:1

2:1wiersze

kolumny

Page 4: Grafika Komputerowa(1)

7

Dyskretyzacja obrazów rzeczywistych

• Próbkowanie - wybór dyskretnej siatki (rastra) do przedstawienia obrazu.• =DOH*QRü HIHNWyZ SUyENRZDQLD RG SRáR*HQLD VLDWNL SUyENRZDQLD

• =PLDQD NV]WDáWX REV]DUX SR SUyENRZDQLX

:DUXQHN ]JRGQRFL ]H VWDá α GOD REV]DUX SRG]ELRUX SáDV]F]\]Q\ Ω i kwadratowej siatki próbkowania (rastra) o boku h:

( ) ( )

( ) ( )∃ > ∀ ∈

∃ ⊂ ∈

∃ ⊂ ′ ∈

r h

r r

r r

α

k

k

P

Q P Q

Q P Q

1 1

Fr

k , Fr ,

&

k , Fr ,

ΩΩ

Ω2 2

,

gdzieFrΩ - brzeg obszaru Ω, FrΩ Ω Ω= ∩ ′ ,

Ω GRPNQLFLH REV]DUX Ω, Ω Ω Ω= ∪ Fr ,

′Ω GRSHáQLHQLH REV]DUX Ω, ′ = ∉Ω ΩP ,

( )k ,Q r NRáR R URGNX Z SXQNFLH Q i o promieniu r.

Stwierdzenie 1:

-HOL REV]DU Ω i kwadratowa siatka próbkowania (raster) o boku h

VSHáQLDM ZDUXQHN ]JRGQRFL ]H VWDá α = 22

, wówczas próbkowanie

]DFKRZD WRSRORJL NV]WDáW REV]DUX

Stwierdzenie 2:

-HOL REV]DU Ω i kwadratowa siatka próbkowania (raster) o boku h

VSHáQLDM ZDUXQHN ]JRGQRFL ]H VWDá α = 102

, wówczas próbkowanie

]DFKRZD WRSRORJL NV]WDáW ZQWU]D REV]DUX D NRQWXU EG]LH VL VNáDGDü

] NU]\Z\FK ]DPNQLW\FK

• Kwantowanie - odwzorowanie kolorów w zbiór dyskretny.

Z\PDJDQD MDNRü dobra UHGQLD

OLF]ED SR]LRPyZ MDVQRFL 256 64obrazy szare 8 b/piksel 6 b/pikselobrazy kolorowe 24 b/piksel 18 b/piksel

: Z\QLNX NZDQWRZDQLD REUD]X PRJ SRMDZLü VL QLHSR*GDQH NUDZG]LH

:SURZDG]HQLH QLHZLHONLHJR ORVRZHJR ]DEXU]HQLD ZDUWRFL SR]LRPyZ

MDVQRFL W]Z GU*HQLH, ang. dither XVXZD UR]P\ZD WH NUDZG]LH

8

GEOMETRIA DYSKRETNA

QVVLDG

pikselaP

EVVLDG

pikselaP

QVVLDG

pikselaP

EVVLDG

pikselaP

piksel PEVVLDG

pikselaP

5\V 6VLHG]L SLNVHOD P. QVVLDG

pikselaP

EVVLDG

pikselaP

QVVLDG

pikselaP

'HILQLFMH VVLHG]WZD

• %H]SRUHGQLPL VVLDGDPL EVVLDGDPL QD]\ZDP\ GZD SLNVHOH PDMFH

wspólny bok.• 1LHEH]SRUHGQLPL VVLDGDPL QVVLDGDPL V GZD SLNVHOH VW\NDMFH VL

]H VRE W\ONR QDUR*QLNDPL

• 6VLDGDPL ]ZLHP\ ]DUyZQR EVVLDGyZ MDN L QVVLDGyZ

Definicje linii:• %GURJ MHVW FLJ SLNVHOL P1, P2, ..., Pn WDNL *H ∀k∈1, 2, .., n-1 piksele

Pk i Pk+1 V EVVLDGDPL

• 'URJ QGURJ MHVW FLJ SLNVHOL P1, P2, ..., Pn WDNL *H ∀k∈1, 2, .., n-1piksele Pk i Pk+1 V VVLDGDPL

• 'URJ SURVW MHVW GURJD Z NWyUHM ZV]\VWNLH SLNVHOH FLJX VWDQRZLFHJR GURJ

V Uy*QH L *DGHQ ] QLFK QLH PD ZLFHM QL* GZyFK EVVLDGyZ Z W\P FLJX

• 'URJ ]DPNQLW MHVW GURJD Z NWyUHM SLHUZV]\ SLNVHO FLJX VWDQRZLFHJR

GURJ MHVW VVLDGHP RVWDWQLHJR SLNVHOD WHJR FLJX

• .U]\Z G\VNUHWQ QD]\ZDP\ ND*G\ VSyMQ\ ]ELyU SLNVHOL

QLH ]DZLHUDMF\ F]ZyUHN SLNVHOL WZRU]F\FK NZDGUDW R ERNX

Definicje konturu:• B-konturem danego zbioru pikseli nazywamy zbiór wszystkich pikseli

QDOH*F\FK GR WHJR ]ELRUX L PDMF\FK SU]\QDMPQLHM MHGQHJR VVLDGD QLH

QDOH*FHJR GR WHJR ]ELRUX

• Konturem (n-konturem) danego zbioru pikseli nazywamy zbiórZV]\VWNLFK SLNVHOL QDOH*F\FK GR WHJR ]ELRUX L PDMF\FK SU]\QDMPQLHM

MHGQHJR EVVLDGD QLH QDOH*FHJR GR WHJR ]ELRUX

'HILQLFMH VSyMQRFL

• Zbiór pikseli jest spójny (n-spójny) MHOL GOD ND*GHM SDU\ SLNVHOL WHJR ]ELRUX

LVWQLHMH GURJD áF]FD WH SLNVHOH L ]DZLHUDMFD VL Z W\P ]ELRU]H

• Zbiór pikseli jest b-spójny MHOL GOD ND*GHM SDU\ SLNVHOL WHJR ]ELRUX LVWQLHMH

EGURJD áF]FD WH SLNVHOH L ]DZLHUDMFD VL Z W\P ]ELRU]H

Page 5: Grafika Komputerowa(1)

9

Krzywe dyskretne• .U]\Z G\VNUHWQ QD]\ZDP\ ND*G\ VSyMQ\ ]ELyU SLNVHOL

QLH ]DZLHUDMF\ F]ZyUHN SLNVHOL WZRU]F\FK NZDGUDW R ERNX

• ,QQH VSRW\NDQH Z OLWHUDWXU]H RNUHOHQLD NU]\ZHM G\VNUHtnej:• ]ELyU EGF\ MHGQRF]HQLH VZRLP NRQWXUHP

• ]ELyU EGF\ GURJ SURVW

• ]ELyU Z NWyU\P LVWQLHMH W\ONR MHGQD GURJD PLG]\ GRZROQ SDU SLNVHOL

a)d)

b) ×

c) ×

Rys. 3U]\NáDG\ UR]ELH*QRFL SU]\MWHM WX GHILQLFML NU]\ZHM ] LQQ\PL RNUHOHQLDPL

a) ]ELyU EGF\ VZRLP NRQWXUHP D QLH EGF\ NU]\Z

b) ]ELyU EGF\ GURJ SURVW MHGQRF]HQLH VZRLP NRQWXUHP D QLH EGF\ NU]\Z

c) krzywa, w której dla dwóch dowolnych pikseOL OH*F\FK SR Uy*Q\FK VWURQDFK

]DáDPDQLD LVWQLHM GZLH GURJL MHGQD ] SLNVHOHP QDUR*Q\P ×, druga bez);d) NU]\ZD QLH EGFD VZRLP NRQWXUHP FHQWUDOQ\ SLNVHO × DQL GURJ SURVW Z

NWyUHM GOD GRZROQ\FK GZyFK SLNVHOL LVWQLHM SU]\QDMPQLHM GZLH GURJL áF]ce je.

Metody rysowania krzywych dyskretnych:• numeryczne

• podstawowe, parametryczne.• Z\QLNDM EH]SRUHGQLR ]H Z]RUyZ DQDOLW\F]QHJR y = f(x) lub paramet-

rycznych x = x(t), y = y(t) wykorzystywanych w geometrii euklidesowej,• QDMF]FLHM Z\PDJDM REOLF]H ]PLHQQRSU]HFLQNRZ\FK

• VWRVRZDQH ]ZáDV]F]D GOD ÄZ\UDILQRZDQ\FK´ NU]\Z\FK QS %p]LHUD

• warunkowe• %UHVHQKDPD SXQNWX URGkowego (ang. midpoint), porównawcze Jordana.

• Z\QLNDM EH]SRUHGQLR ] UyZQDQLD XZLNáDQHJR F(x, y) = 0stosowanego do opisu krzywej w geometrii euklidesowej,

• GOD V]HURNLHM NODV\ NU]\Z\FK Z\VWDUF]DM REOLF]HQLD FDáNRZLWROLF]ERZH

• Z\NRU]\VW\ZDQH SRZV]HFKQLH GOD RGFLQNyZ L NU]\Z\FK VWR*NRZ\FK

• strukturalne• áDFXFKRZH ]H ]PLHQQ GáXJRFL VHULL DQJ run length slice).

• Z\QLNDM EH]SRUHGQLR ] RSLVX VWUXNWXUDOQHJR NU]\ZHM G\VNUHWQHM

• NRU]\VWDM MHG\QLH ] REOLF]H FDáNRZLWROLF]ERZ\FK

• ]QDQH MHG\QLH GOD RGFLQNyZ L HZHQWXDOQLH RNUJyZ

10

Odcinek dyskretny

'HILQLFMD GáXJRFL NU]\ZHM

• 'áXJRFL NU]\ZHM QD]\ZDü EG]LHP\ SRPQLHMV]RQ R MHGHQ

OLF]E SLNVHOL ] NWyU\FK NU]\ZD WD VL VNáDGD

Definicja odcinka:• Odcinkiem R SRF]WNX Z SLNVHOX P1 L NRFX Z SLNVHOX P2

QD]\ZDP\ QDMPQLHMV]HM GáXJRFL NU]\Z áF]F WH SLNVHOH

Z NWyUHM QVVLHG]WZD L EVVLHG]WZD NROHMQ\FK SLNVHOL FLJX

VWDQRZLFHJR NU]\Z Z\VWSXM MDN QDMEDUG]LHM UyZQRPLHUQLH

5\V 'ZD Uy*QH RGFLQNL

áF]FH WH VDPH GZD SXQNW\

6WZLHUG]HQLD R F]FL ZVSyOQHM GZyFK RGFLQNyZ

• 'ZD NU]\*XMFH VL RGFLQNL PRJ PLHü GRZROQ OLF]E SXQNWyZ ZVSyOQ\FK

(0, 1, 2, ...).• &]ü ZVSyOQD RGFLQNyZ PR*H QLH E\ü VSyMQD

• 2GFLQHN NWyUHJR NUDFH QDOH* GR GUXJLHJR RGFLQND PR*H QLH ]DZLHUDü VL

w tym drugim odcinku.

a) b) c) E d) A e) ÆE E A E Æ

A E A E A E A E ÆA E A E A E A E A E

A E A E Æ Æ ÆA E Æ Æ A E ÆE A E A E A Æ AE A E A E A Æ A

E A E A A E AE A A A Æ

A A A E AA A A E A

A A A E AA A A A

5\V 3U]\NáDG\ NU]\*RZDQLD VL RGFLQNyZ G\VNUHWQ\FK

D NU]\*XMFH VL RGFLQNL A i E QLH PDM F]FL ZVSyOQHM

E NU]\*XMFH VL RGFLQNL A i E PDM MHGHQ ZVSyOQ\ SLNVHO

F NU]\*XMFH VL RGFLQNL A i E PDM GZD ZVSyOQH SLNVHOH

G ZVSyOQD F]ü NU]\*XMF\FK VL RGFLQNyZ A i E nie jest spójna;e) odcinek E R NRFDFK OH*F\FK QD RGFLQNX A QLH ]DZLHUD VL Z QLP Z FDáRFL

Page 6: Grafika Komputerowa(1)

11

Algorytmy rysowania odcinków:

• numeryczne

.ROHMQH SLNVHOH RGFLQND Z\]QDF]DQH V SU]H] SRGVWDZLDQLH ]PLHQLDQHM ]H

VWDá\P NURNLHP SHZQHM ]PLHQQHM GR Z]RUyZ JHRPHWULL HXNOLGHVRZHM L

]DRNUJODQLH RWU]\PDQ\FK Z WHQ VSRVyE ZVSyáU]GQ\FK

• podstawowy

• Uy*QLFRZ\ DQJ DDA - Digital Differential Analyser)

• warunkowe

.ROHMQH SLNVHOH RGFLQND Z\]QDF]DQH V VSRUyG SLNVHOLNDQG\GDWyZ QD

SRGVWDZLH SRUyZQD Z G]LHG]LQLH OLF]E FDáNRZLW\FK

• Bresenhama

• SXQNWX URGNRZHJR DQJ midpoint)

• porównawczy Jordana

• F]WHURNURNRZ\ Z RJyOQRFL ZLHlokrokowy) Gilla

• strukturalne

.ROHMQH SLNVHOH RGFLQND Z\]QDF]DQH V QD SRGVWDZLH RSLVX VWUXNWXUDOQHJR

• Metzgera-Bronsa

• ]H ]PLHQQ GáXJRFL VHULL DQJ. run length slice)

$OJRU\WP\ U\VRZDQLD RGFLQNyZ ] Z\JáDG]DQLHP SR]LRPDPL MDVQRFL

(ang. antialiasing):

• numeryczne – nie omawiane tutaj

• warunkowe

• z uprRV]F]RQ\P Z\JáDG]DQLHP

• Wu

• VWUXNWXUDOQH QLH QDGDM VL

Oznaczenia: (xs , ys SRF]WHN RGFLQND xe , ye) - koniec odcinka.

12

Algorytm podstawowy

• UyZQDQLH SURVWHM QD SáDV]F]\(QLH y = m * x + bm ZVSyáF]\QQLN NLHUXQNRZ\

b - wyraz wolny• dwa przypadki:

m

m = -1

=1

| | < 1| | < 1

| | > 1

| | > 1

m

m

m

m

α

5\V .W QDFK\OHQLD α rysowanegoRGFLQND Z ]DOH*QRFL RG

ZVSyáF]\QQLND NLHUXQNRZHJR m.

• |m| > 1 zamiast równania y = m * x + b

PR*HP\ UR]SDWU\ZDü UyZQDQLH x = m' * y + b',

gdzie m' = 1m

, b' = − b

m, przy czym wówczas |m'| ≤ 1,

ZLF SU]\SDGHN WHQ VSURZDG]D VL GR GUXJLHJR SU]\SDGNX

• |m| ≤ 1 xe ≠ xs, my y

x x= −

−e se s

, b y m x= −s s* .

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: m, b:real; inc, dx, dy:integer; dx := xe-x; dy := ye-y;

dla |dx| ≥ |dy| (czyli |m| ≤ 1):m := dy/dx ^]Dá `

b := y-m*x;inc := sgn(dx);while x ≠ xe do

beginplot(x, y);x := x+inc;y := round(m*x+b)

end;plot(xe,ye)

Page 7: Grafika Komputerowa(1)

13

$OJRU\WP Uy*QLFRZ\ DQJ DDA - Digital Differential Analyser)

• dla |m|≤ ]PLDQD ZVSyáU]GQHM x o ±1 ⇒ ]PLDQD ZVSyáU]GQHM y o ±m.

• dla |m_! ]PLDQD ZVSyáU]GQHM y o ±1 ⇒ ]PLDQD ZVSyáU]GQHM x o ± 1m

.

∆ y m

x=1

=

Rys. Dla |m|≤1 ZmianaZVSyáU]GQHM x o 1SRZRGXMH ]PLDQ

ZVSyáU]GQHM y o m

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: z, zinc:real; inc, dx, dy:integer; dx := xe-x; dy := ye-y;

dla |dx| ≥ |dy| (czyli |m| ≤ 1):z := y;inc := sgn(dx);zinc := dy/|dx_ ^]Dá `

while x ≠ xe dobegin

plot(x, y);x := x+inc;z := z+zinc;y := round(z)

end;plot(xe,ye)

14

Algorytm Bresenhama

• =DáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π4

].

'OD WDNLHJR NWD QDFK\OHQLD α ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW

VVLDGHP SRSU]HGQLHJR Z NLHUXQNXÒ albo Î.

narysowanypiksel

ostatnio dwapiksele

kandydaci

d

d

2

1

odcinekidealny

Rys. Kryterium wyborukolejnego piksela dlaUR]ZD*DQHJR SU]\SDGNX

• d1>d2 ⇒ rysowanygórny piksel kandydat,

• d1<d2 ⇒ rysowanydolny piksel kandydat,

• d1=d2 ⇒ rysowanydowolny z pikselikandydatów.

• 3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD Z\QLRV

xi+1:= xi +1 przy wyborze dowolnego z pikseli kandydatów,

yiyi

yi+ =

+

11

:przy wyborze górnego piksela kandydata,

przy wyborze dolnego piksela kandydata.

• Wynik porównania d1>d2 decyduje o wyborze kolejnego piksela

do rysowania: d1 = y-yi = m*(xi+1)+b-yi.d2 = (yi+1)-y = (yi+1)-m*(xi+1)-b.

• =DPLDVW QLHUyZQRFL d1>d2 PR*QD UR]ZD*Dü ]QDN Uy*QLF\ d1-d2.

d1-d2 = 2*m*(xi+1)+2*b-2*yi-1.

• 3RQLHZD* U\VRZDQ\ RGFLQHN QDFK\ORQ\ MHVW GR RVL 0X SRG NWHP α ∈ [0,π4

]

ZLF ∆x = xe-xs ! VWG VJQd1-d2) = sgn(∆x*(d1-d2)).

• Oznaczenie:pi = ∆x*(d1-d2) =

= 2*∆x*m*(xi+1)+2*∆x*b-2*∆x*yi-∆x == 2*∆x*m*(xi+1)+2*∆x*ys-2*∆x*m*xs-2*∆x*yi-∆x == 2*∆y*(xi+1)+2*∆x*ys-2*∆y*xs-2*∆x*yi-∆x.

b = ys-m*xs∆y = ∆x*m

:DUWRü pi jest zawsze ZDUWRFL FDáNRZLW.

Page 8: Grafika Komputerowa(1)

15

• d1>d2 ⇔ d1-d2>0 ⇔ pi>0 ⇒ wybór górnego piksela kandydata,d1<d2 ⇔ d1-d2<0 ⇔ pi<0 ⇒ wybór dolnego piksela kandydata,d1=d2 ⇔ d1-d2=0 ⇔ pi=0 ⇒ wybór dowolnego piksela kandydata,

w algorytmie przyjWR Z\EyU JyUQHJR

• 3RF]WNRZD ZDUWRü pi:

p0 = 2*∆y*(x0+1)+2*∆x*ys-2*∆y*xs-2*∆x*y0-∆x == 2*∆y*xs+2*∆y+2*∆x*ys-2*∆y*xs-2*∆x*ys-∆x =

= 2*∆y-∆x.

x0=xs, y0=ys

• Modyfikacja wartoFL pi:

pi+1-pi = 2*∆y*(xi+1-xi)-2*∆x*(yi+1-yi) == 2*∆y-2*∆x*(yi+1-yi) ==

2 0 1 1

2 0 1 0

*

*

( ) ( ),

( ).

∆ ∆∆

y x pi yi yiy pi yi yi

− ≥ + − =< + − =

JG\

JG\

xi+1-xi = 1yi+1-yi ∈ 0,1

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: p, pinc, pdec, dx, dy:integer; dx := xe-x; dy := ye-y;

dla dx ≥ dy ≥ 0:p := 2*dy-dx;pinc := 2*dy;pdec := 2*(dy-dx);while x ≠ xe do

beginplot(x, y);x := x+1;if p < 0 then p := p+pinc

else begin y := y+1; p := p+pdec endend;

plot(xe,ye)

16

$OJRU\WP SXQNWX URGNRZHJR DQJ midpoint)

• =DáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π4

].

'OD WDNLHJR NWD QDFK\OHQLD α ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW

VVLDGHP SRSU]HGQLHJR Z NLHUXQNXÒ albo Î.

narysowanypiksel

ostatnio dwapiksele

kandydaci

odcinekidealny

Rys. Kryterium wyboru kolejnegoSLNVHOD GOD UR]ZD*DQHJR

przypadku:o wyborze kolejnego pikselaGHF\GXMH ]QDN ZDUWRFL

funkcji F(x,y)= a*x+b*y+cZ SXQNFLH URGNRZ\P

]D]QDF]RQ\P NU]\*\NLHP

SRPLG]\ SLNVHODPL

kandydatami.

• 3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD Z\QLRV

xi+1:= xi +1 przy wyborze dowolnego z pikseli kandydatów,

yi

yiyi+ =+

1

1:

przy wyborze górnego piksela kandydata,

przy wyborze dolnego piksela kandydata.

• Równanie ogólne prostej: F(x,y)=0, gdzie F(x,y)=a*x+b*y+c.

Dla dwóch punktów prostej: ac y y

x y x y=

− −−

*

* *

( )V H

H V V H

, bc x x

x y x y=

− −−

*

* *

( )H V

H V V H

.

3U]\MPXMF c = xe*ys - xs*ye RWU]\PXMH VL a = ye - ys, b = -(xe - xs).

:DUWRFL a, b, c PR*QD ZLF WDN GREUDü E\ E\á\ FDáNRZLWH.

• 3RQLHZD* SRF]WHN RGFLQND xs , ys) i jego koniec (xe , ye OH* QD SURVWHMF(x,y ZLF

F(x0,y0) = F(xs,ys) = 0 oraz F(xe,ye) = 0.

• Oznaczenie: fi := [F(xi+1, yi+1

2)] = [a*(xi+1) + b*(yi+

1

2) + c] =

= a*xi + b*yi + c + a + [b

2] = F(xi,yi) + a + [

b

2].

:DUWRü fi jest zawsze ZDUWRFL FDáNRZLW.

Page 9: Grafika Komputerowa(1)

17

• F(xi+1,yi+1

2) > 0 ⇒ fi ≥ 0 ⇒ wybór górnego piksela kandydata,

F(xi+1,yi+1

2) < 0 ⇒ fi < 0 ⇒ wybór dolnego piksela kandydata,

F(xi+1,yi+1

2) = 0 ⇒ wybór dowolnego piksela kandydata,

przyjWR Z\EyU JyUQHJR JG\* ZWHG\ fi = 0.

• 3RF]WNRZD ZDUWRü fi:

f0 = F(x0,y0) + a + [b

2] =

= F(xs,ys) + a + [b

2] =

= a + [b

2].

x0=xs, y0=ys

F(x0,y0) = F(xs,ys) = 0

• 0RG\ILNDFMD ZDUWRFL fi:

fi+1-fi = F(xi+1,yi+1) - F(xi,yi) == a*(xi+1-xi) + b*(yi+1-yi) == a + b*(yi+1-yi) =

= a b fi yi yia fi yi yi

JG\

JG\

≥ + − =< + − =

0 1 1

0 1 0

( ),

( ).

xi+1-xi = 1yi+1-yi ∈ 0,1

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: f, df, dx, dy:integer; dx := xe-x; dy := ye-y;

dla dx ≥ dy ≥ 0:df := dy-dx;f := df+(dx div 2); f := dy-((dx+1) div 2);while x ≠ xe do

beginplot(x, y);x := x+1;if f < 0 then f := f+dy

else begin y := y+1; f := f+df endend;

plot(xe,ye)

18

Algorytm porównawczy Jordana

• ZaáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π2

].

'OD WDNLHJR NWD QDFK\OHQLD α ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW

VVLDGHP SRSU]HGQLHJR Z NLHUXQNXÏ, Ò albo Î.

narysowanypiksel

ostatnio trzypiksele

kandydaci

odcinekidealny

Rys. Kryterium wyborukolejnego piksela dlaUR]ZD*DQHJR SU]\SDGNX

rysowany jest ten piksel,NWyUHJR URGHN OH*\

QDMEOL*HM RGFLQND LGHDOQHJR

• 3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD PRJ Z\QLHü

1. xi+1:= xi +1yi+1:= yi

przy wyborze prawego piksela kandydata,

2. xi+1:= xiyi+1:= yi +1

przy wyborze górnego piksela kandydata,

3. xi+1:= xi +1yi+1:= yi +1

przy wyborze prawego górnego piksela kandydata.

• Równanie ogólne prostej: F(x,y)=0, gdzie F(x,y)=a*x+b*y+c.

Dla dwóch punktów prostej: ac y y

x y x y=

− −−

*

* *

( )V H

H V V H

, bc x x

x y x y=

− −−

*

* *

( )H V

H V V H

.

PrzyjmujF c = - (xe*ys - xs*ye RWU]\PXMH VL b = xe - xs, a = -(ye - ys).

:DUWRFL a, b, c PR*QD ZLF WDN GREUDü E\ E\á\ FDáNRZLWH.

• Oznaczenia: f := F(xi,yi), F(x0,y0) = F(xs,ys) = 0,

f1 := F(xi+1,yi) = f+a,

f2 := F(xi,yi+1) = f+b,

f3 := F(xi+1,yi+1) = f+a+b.

Page 10: Grafika Komputerowa(1)

19

• |f1|<|f2| & |f1|<|f3| ⇒ wybór prawego piksela kandydata,|f2|<|f1| & |f2|<|f3| ⇒ wybór górnego piksela kandydata,|f3|<|f1| & |f3|<|f2| ⇒ wybór prawego górnego piksela kandydata,|f1|<|f2| & |f1|=|f3| ⇒ wybór prawego lub prawego górnego piksela,|f2|<|f1| & |f2|=|f3| ⇒ wybór górnego lub prawego górnego piksela,

Z DOJRU\WPLH SU]\MWR Z\EyU SUDZHJR JyUQHJR

• 3RQLHZD* f2 ≥ f3 ≥ f1 ZLF

|f1|<|f2| & |f1|<|f3| ⇔ |f1|<|f3| ⇒ wybór prawego piksela kandydata,|f2|<|f1| & |f2|<|f3| ⇔ |f2|<|f3| ⇒ wybór górnego piksela kandydata,Z SR]RVWDá\FK SU]\SDGNDFK Z\EyU SUDZHJR JyUQHJR SLNVHOD NDQG\GDWD

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: f1, f2, f3, dx, dy:integer; dx := xe-x; dy := ye-y;

dla dx ≥ 0 & dy ≥ 0:f1 := -dy;while (x ≠ xe) or (y ≠ ye) do

beginplot(x, y);f3 := f1+dx; f2 := f3+dy;if |f1| < |f3| then begin x := x+1; f1 := f1-dy endelse if |f2| < |f3| then begin y := y+1; f1 := f2-dy endelse begin x := x+1; y := y+1; f1 := f3-dy end

end;plot(xe,ye)

• 3RQLHZD* f2 ≥ f3 ≥ f1 ZLF

|f1|<|f3| ⇔ -f1<f3 ⇒ wybór prawego piksela kandydata,|f2|<|f3| ⇔ f2<-f3 ⇒ wybór górnego piksela kandydata,Z SR]RVWDá\FK SU]\SDGNDFK Z\EyU SUDZHJR JyUQHJR SLNVHOD NDQG\GDWD

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: f1, f2, f3, dx, dy:integer; dx := xe-x; dy := ye-y;

dla dx ≥ 0 & dy ≥ 0:f1 := -dy;while (x ≠ xe) or (y ≠ ye) do

beginplot(x, y);f3 := f1+dx; f2 := f3+dy;if f3 < -f1 then begin y := y+1; f1 := f3 end;if -f3 < f2 then begin x := x+1; f1 := f1-dy end

end;plot(xe,ye)

20

$OJRU\WP F]WHURNURNRZ\ Z RJyOQRFL ZLHORNURNRZ\ *LOOD

• =DPLDVW MHGQHJR SLNVHOD Z\]QDF]DP\ RG UD]X ZLFHM QS F]WHU\

• =DáR*HQLH RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ (0, arctg1

4].

'OD WDNLHJR NWD QDFK\OHQLD α NROHMQH F]ZyUNL SLNVHOL PRJ SU]\MPRZDü

XZ]JOGQLDMF Z]DMHPQH VVLHG]WZR MDN L SRáR*HQLH Z]JOGHP SLNVHOD

SRSU]HG]DMFHJR MHGQ ] SLFLX IRUP

0 0 0 0 0 0 0 1 0 0 1 0

0 1 0 0 1 0 0 0

• 5R]ZD*DMF F]WHU\ NURNL DOJRU\WPX %UHVHQKDPD RWU]\PXMHP\ GOD ND*GHM

F]ZyUNL SLNVHOL QDVWSXMFH ZDUXQNL

0000 0001 0010 0100 1000pi<0 pi<0 pi<0 pi<0 pi≥0

pi+2∆y<0 pi+2∆y<0 pi+2∆y<0 pi+2∆y≥0 pi+2∆y-2∆x<0pi+4∆y<0 pi+4∆y<0 pi+4∆y≥0 pi+4∆y-2∆x<0 pi+4∆y-2∆x<0pi+6∆y<0 pi+6∆y≥0 pi+6∆y-2∆x<0 pi+6∆y-2∆x<0 pi+6∆y-2∆x<0

:DUXQNL WH GDM VL XSURFLü GR SRQL*V]HM SRVWDFL

0000 0001 0010 0100 1000 pi < -6∆y ≤ pi < -4∆y ≤ pi < -2∆y ≤ pi < 0 ≤ pi

• $QDOL]XMF GOD SRZ\*V]\FK F]ZyUHN SLNVHOL VSRVyE PRG\ILNDFML ZDUWRFL piZ DOJRU\WPLH %UHVHQKDPD PR*QD ]DXZD*\ü *H

pi piy

y x

pi y

pi y+ − =−

< −≥ −4

8

8 2

6

6

*

* *

*

*

∆∆ ∆

∆∆

JG\

JG\

W]Q F]ZyUND

SR]RVWDá H F]ZyUNL

• 'RGDWNRZH SU]\VSLHV]HQLH DOJRU\WPX PR*QD X]\VNDü XZ]JOGQLDMF

SUDZGRSRGRELHVWZD Z\VWSLHQLD NROHMQ\FK F]ZyUHN SR GDQHM F]ZyUFH

QL*V]H SR]\FMH Z WDEHOL RGSRZLDGDM PQLHMV]\P SUDZGRSRGRELHVWZRP

0000 0001 0010 0100 10000000 0000 0000 0000 00001000 0001 0001 0010 01000100 0010 0100 10000010 0001 00100001 0001

Page 11: Grafika Komputerowa(1)

21

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: p, pinc, pdec, dx, dy, m2, m4, m6, xe2:integer;

dla dx ≥ 4*dy ≥ 0: dx := xe-x; dy := ye-y;

p := 2*dy-dx; pinc := 8*dy; pdec := 8*dy-2*dx;m2 := -2*dy; m4 := -4*dy; m6 := -6*dy; xe2 := xe-2;while x < xe2 do rysowanie (dx+1) div 4 czwórek

beginif p < m6 then 0000

begin plot(x, y); plot(x+1, y);plot(x+2, y); plot(x+3, y);p := p+pinc

endelse

beginif p < m2 then

if p < m4 then 0001begin plot(x, y); plot(x+1, y);

plot(x+2, y); plot(x+3, y); y := y+1end

else 0010begin plot(x, y); plot(x+1, y);

plot(x+2, y); y := y+1; plot(x+3, y)end

else if p < 0 then 0100begin plot(x, y); plot(x+1, y); y := y+1;

plot(x+2, y); plot(x+3, y)end

else 1000begin plot(x, y); y := y+1; plot(x+1, y);

plot(x+2, y); plot(x+3, y)end;

p := p+pdecend;

x := x+4end;

if x ≤ xe then rysowanie (dx+1) mod 4 pikselibegin if x < xe then

begin if x ≤ xe2 thenbegin plot(x, y); x := x+1;

if p ≥ 0 then y := y+1 end;

plot(x,y)end;

plot(xe,ye)end

22

Algorytm strukturalny Metzgera-Bronsa

0

123

4

5 6 7

5\V .D*G\ SLNVHO RGFLQND MDN L

GRZROQHM NU]\ZHM PR*H E\ü

kodowany jako cyfra ósemkowaR]QDF]DMFD QXPHU VVLDGD

jakim jest ten piksel dlapoprzedzajacego go piksela.2GFLQHN G\VNUHWQ\ MDN L ND*G

NU]\Z PR*QD ]DWHP RSLVDü

SU]\ SRPRF\ FLJX F\IU

ósemkowych zwanego kodemáDFXFKRZ\P

31 Rys. 3U]\NáDGRZD NU]\ZD L MHM NRG áDFXFKRZ\

1 2 0170213 0 7 0

• 3RVWXODW\ )UHHPDQD RGQRQLH NRGX áDFXFKRZHJR RSLVXMFHJR RGFLQHN

• : NRG]LH áDFXFKRZ\P PRJ Z\VWSRZDü FR QDMZ\*HM GZLH F\IU\

RGSRZLDGDMFH VVLHGQLP NLHUXQNRP

• 7\ONR MHGQD ] F\IU Z\VWSXMF\FK Z NRG]LH áDFXFKRZ\P PR*H

VVLDGRZDü VDPD ]H VRE

• 6XNFHV\ZQH UR]PLHV]F]HQLH F\IU Z NRG]LH áDFXFKRZ\P SRZLQQR E\ü

WDN MHGQRURGQH MDN W\ONR MHVW WR PR*OLZH

• =DáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π4

].

'OD WDNLHJR NWD QDFK\OHQLD α ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW

VVLDGHP SRSU]HGQLHJR Z NLHUXQNXÒ albo Î : NRG]LH áDFXFKRZ\P

PRJ ZLF Z\VWSRZDü MHG\QLH F\IU\ L

3RQLHZD* RGFLQHN MHVW QDMPQLHMV]HM GáXJRFL NU]\Z áF]F GZD SLNVHOH

ZLF Z NRG]LH áDFXFKRZ\P SRZLQQR VL ]QDOH(ü GRNáDGQLH

∆y jedynek i ∆x-∆y zer (∆y = ye-ys, ∆x = xe-xs).

• Oznaczenia:

h ( )1 2u

u=

, K2 2( )u u

u= −

lub K1 2( )u u

u= −

, K2 2( )u

u=

.

• Podstawienie wartoFL SRF]WNRZ\FK i := 0,a0 := ∆y, A0 := "1",b0 := ∆x-∆y, B0 := "0".

Page 12: Grafika Komputerowa(1)

23

• 1DOH*\ ]DWHP SU]HPLHV]Dü ai áDFXFKyZ Ai z bi áDFXFKDPL Bi.

• Podstawienie:ci := max(ai,bi), ci=ai ⇒ Ci := Ai, Di := Bi,di := min(ai,bi), ci≠ai ⇒ Ci := Bi, Di := Ai,ci ≥ di.

• 1D MHGHQ áDFXFK Di SU]\SDGD UHGQLR ricidi

= áDFXFKyZ Ci (ri≥1).

• ri FDáNRZLWH ⇒ NRG áDFXFKRZ\ RGFLQND idiriCiDiriC

)()(1

KK .

• -HOL ri QLH MHVW ZDUWRFL FDáNRZLW WR QDOH*\ SU]HPLHV]Dü ]H VRE

ai+1 := ci mod di áDFXFKyZ Ai Ciri DiCi

ri+ = + +1 1 1 1: ([ ] ) ([ ] )h h2 i

bi+1 := di - (ci mod di áDFXFKyZ Bi Ciri DiCi

ri+ =1 1: ([ ]) ([ ])h h2 .

1DOH*\ ZLF SRZWyU]\ü SRZ\*V]H NURNL GOD i := i+1.

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: A, B:string; w:Boolean; a, b, dx, dy:integer; dx := xe-x;

dla dx ≥ dy ≥ 0: dy := ye-y;

a := dy; b := dx-dy; A := "1"; B := "0";while a ≠ 0 do

beginw := false; trueif a < b then begin swap(a,b); swap(A,B) end;repeat

if w then B := A+B else B := B+A;w := not w;a := a-b

until a < b;if w then A := A+B else A := B+A;b := b-a

end;for i := 1 to b do

for j := 1 to length(B) dobegin

plot(x,y);x := x+1; if B[j] = '1' then y := y+1

end;plot(xe,ye)

24

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: A, B:string; w:Boolean; a, b, dx, dy:integer; dx := xe-x;

dla dx ≥ dy ≥ 0: dy := ye-y;

a := dy; b := dx-dy; A := "1"; B := "0";w := false; truewhile a ≠ 0 do

beginwhile a < b do

beginif w then A := A+B else A := B+A;w := not w;b := b-a

end;repeat

if w then B := A+B else B := B+A;w := not w;a := a-b

until a < bend;

for i := 1 to b dofor j := 1 to length(B) do

beginplot(x,y);x := x+1; if B[j] = '1' then y := y+1

end;plot(xe,ye)

Page 13: Grafika Komputerowa(1)

25

$OJRU\WP VWUXNWXUDOQ\ ]H ]PLHQQ GáXJRFL VHULL (ang. run lengthslice)

• =DáR*HQLH RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ϕ ∈ (0, arctg1

2].

'OD WDNLHJR NWD QDFK\OHQLD ϕ ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW

VVLDGHP SRSU]HGQLHJR Z NLHUXQNXÒ albo Î : NRG]LH áDFXFKRZ\P

PRJ ZLF Z\VWSRZDü MHG\QLH F\IU\ L 3RQDGWR ND*GD MHG\QND EG]LH Z

W\P NRG]LH áDFXFKRZ\P RWRF]RQD ]HUDPL JG\* ]HU MHVW ZLFHM

3RQLHZD* RGFLQHN MHVW QDMPQLHMV]HM GáXJRFL NU]\Z áF]F GZD SLNVHOH

ZLF Z NRG]LH áDFXFKRZ\P SRZLQQR VL ]QDOH(ü GRNáDGQLH

β = ∆y jedynek i α = ∆x-∆y zer (∆y = ye-ys, ∆x = xe-xs).

• .RG áDFXFKRZ\ RGFLQND 0 1 02 1 2

1

i i

i

=∏ α αβ

,

gdzie α αβ

jj=∑ =

1

2

, A A Aii

n=∏ =

11

β... ,

n

n AAAA ...=

7U]HFL SRVWXODW )UHHPDQD PyZL W\OH *H ZDUWRFL αi SRZLQQ\ E\ü MDN

QDMEOL*V]H VLHELH : SUDNW\FH R]QDF]D WR L* αi SU]\MPXMH MHGQ ] GZyFK

ZDUWRFL αβ2 = α div (2β) lub α

β2 +1 = α div (2β)+1, przy czym

UR]NáDG W\FK ZDUWRFL SRZLQLHQ E\ü MDN QDMEDUG]LHM UyZQRPLHUQ\ :áDVQRü

W ]DSHZQLD QDVWSXMF\ Z]yU LWHUDF\MQ\

α ααβj k

k

j

j= −

=

∑round 21

1

lub α α β α βj kk

j

j= − +

=

∑21

1

div (2β).

• 2VWDWHF]QLH NRG áDFXFKRZ\ RGFLQND G\VNUHWQHJR MHVW QDVWSXMF\

0 1 02 1 2

1

i i

i

=∏ α αβ

, gdzie A A Aii

n=∏ =

11

β... ,

n

n AAAA ...= ,

α div (2β) dla λj + α mod (2β) < 2β,]D αj =

α div (2β) +1 dla λj + α mod (2β) ≥ 2β,

λj = (α(j−1) +β) mod (2β),

czyli λ1 = β,

λj + α mod (2β) dla λj + α mod (2β) < 2β,λj+1 =

λj + α mod (2β) − 2β dla λj + α mod (2β) ≥ 2β,

26

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: a, b, a2, ba2M, ba2D, l, i, j, dx, dy:integer; dx := xe-x;

dla dx ≥ 2*dy > 0: dy := ye-y;

a := dy; b := dx-dy; l := a;a2 := a+a; ba2M := b mod a2; ba2D := b div a2;plot(x,y);for i := 1 to a do

beginfor j := 1 to ba2D do begin x := x+1; plot(x,y) end;l := l+ba2M;if l ≥ a2 then begin l := l-a2; x := x+1; plot(x,y) end;x := x+1; y := y+1; plot(x,y);for j := 1 to ba2D do begin x := x+1; plot(x,y) end;l := l+ba2M;if l ≥ a2 then begin l := l-a2; x := x+1; plot(x,y) end

end

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: a, b, a2, baD, baM2, ba2M, ba2D, l, i, j, dx, dy:integer;

dla dx ≥ 2*dy > 0: dx := xe-x; dy := ye-y;a := dy; b := dx-dy; l := a;a2 := a+a; ba2M := b mod a2; ba2D := b div a2;baD := ba2D+ba2D; baM2 := ba2M+ba2M;if ba2M > a

then begin baD := baD+1; baM2 := baM2-a2 end;plot(x,y);for j := 1 to ba2D do begin x := x+1; plot(x,y) end;l := l+ba2M;if l ≥ a2 then begin l := l-a2; x := x+1; plot(x,y) end;x := x+1; y := y+1; plot(x,y);for i := 2 to a do

beginfor j := 1 to baD do begin x := x+1; plot(x,y) end;l := l+baM2;if l ≥ a2 then begin l := l-a2; x := x+1; plot(x,y) end;x := x+1; y := y+1; plot(x,y);

end;for j := 1 to ba2D do begin x := x+1; plot(x,y) end;if l+ba2M ≥ a2 then begin x := x+1; plot(x,y) end

Page 14: Grafika Komputerowa(1)

27

„=EDWRü” odcinków dyskretnych (ang. aliasing)

5\V 2GFLQHN G\VNUHWQ\ ] Z\UD(QLH ZLGRF]Q\PL ]EDPL VFKRGNDPL

Metody usuwania „]EDWRFL” odcinków

• ]ZLNV]HQLH UR]G]LHOF]RFL

5\V 2GFLQHN G\VNUHWQ\ Z ]ZLNV]RQHM UR]G]LHOF]RFL

• Z\JáDG]DQLH RGFLQNyZ SR]LRPDPL MDVQRFL DQJ antialiasing)

5\V :\JáDG]RQ\ RGFLQHN G\VNUHWQ\

Rys. Model odcinka

-DNR LGHDOQH SU]\EOL*HQLH RGFLQND G\VNUHWQHJR PR*QD SU]\Mü SURVWRNW R

V]HURNRFL SLNVHOD : SU]\SDGNX RGFLQND XNRQHJR EG]LH RQ SRNU\ZDá

W\ONR IUDJPHQW\ SLNVHOL -DVQRü W\FK SLNVHOL SRZLQQD ZLF ]DOH*Hü RG

UR]PLDUyZ IUDJPHQWyZ SRNU\ZDQ\FK SU]H] WDNL SURVWRNW 8]\VNDQ\ Z WHQ

VSRVyE U\VXQHN RGFLQND GDMH ZUD*HQLH Z\JáDG]RQHJR DQJ antialiased).

28

:\JáDG]DQLH RGFLQNyZ G\VNUHWQ\FK DQJ antialiasing)

• bezwagowe próbkowanie powierzchni

Rys. Bezwagowe próbkowanie powierzchni odpowiadaSURVWRSDGáRFLHQQHM IXQNFML ZDJRZHM

5\V %H]ZDJRZR Z\JáDG]RQ\ RGFLQHN G\VNUHWQ\ ZDJD SURVWRSDGáRFLHQQD

• wagowe próbkowanie powierzchni

5\V 2VWURVáXSRZD IXQNFMD ZDJRZD

5\V 6WR*NRZD IXQNFMD ZDJRZD

5\V :DJRZR Z\JáDG]RQ\ RGFLQHN G\VNUHWQ\ ZDJD RVWURVáXSRZD X JyU\

L ZDJD VWR*NRZD QD GROH

Page 15: Grafika Komputerowa(1)

29

$OJRU\WP ] XSURV]F]RQ\P Z\JáDG]DQLHP DQJ antialiasing)

• =DáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π4

].

narysowaneostatnio

(dwie pary)

trzy piksele

odcinekidealny

yi

xi

ki

pikselekandydaci

Piksele rysowane parami w pionie.

Rys. Kryterium wyboru kolejnychpikseli:• k>0 ⇒ kolejne dwa piksele

rysowane w tych samychwierszach (yi, yi-1),

• k<0 ⇒ kolejne dwa pikselerysowane w wierszach oSR]LRP Z\*HM yi+1, yi),

• k=0 ⇒ kolejny piksel (tylkojeden) rysowanyw górnym wierszu (yi),

• 3U]\MPLMP\ *H JyUQ\ ] RVWDWQLR QDU\VRZDQ\FK SLNVHOL PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH JyUQHJR SLNVHOD NROHMQHM SDU\ Z\QLRV

xi+1:= xi +1

yiyi

yi+ =

+

11

:dla k<0,

dla k≥0.

• ,QWHQV\ZQRü JyUQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR k,LQWHQV\ZQRü GROQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR k.

• =DáR*HQLH SURFHGXUD SORWx, y, c, cmax QDGDMH SXQNWRZL R ZVSyáU]GQ\FK

x, y LQWHQV\ZQRü Z]JOGQ c / cmax (gdzie c, cmax ZDUWRFL FDáNRZLWH

• ZamiDVW ZDUWRFL XáDPNRZHM k OHSLHM MHVW UR]ZD*Dü ZDUWRü FDáNRZLW k*∆x.

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

zmienne procedury: kdx, dx, dy:integer; dx := xe-x; dy := ye-y;

dla dx ≥ dy ≥ 0:kdx := 0;while x ≠ xe do

beginplot(x, y, dx-kdx, dx);if kdx ≠ 0 then plot(x, y-1, kdx, dx);x := x+1;kdx := kdx-dy;if kdx < 0 then begin y := y+1; kdx := kdx+dx end

end;plot(xe, ye, 1, 1)

30

$OJRU\WP :X ] Z\JáDG]DQLHP DQJ antialiasing)

• =DáR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP α ∈ [0,π4

].

Piksele rysowane parami w pionie.

• =DáR*HQLH mGRVWSQ\FK SR]LRPyZ MDVQRFL

• 3U]\MPLMP\ *H GROQ\ ] RVWDWQLR QDU\VRZDQ\FK SLNVHOL PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH GROQHJR SLNVHOD NROHMQHM SDU\ Z\QLRV

xi+1:= xi +1

yiyi

yi+ =

+

11

:dla [a·(i+1)] > [a·i], gdzie a = tgα,

dla [a·(i+1)] = [a·i].

• ,QWHQV\ZQRü JyUQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR a·(i+1)-[a·(i+1)],LQWHQV\ZQRü GROQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR a·(i+1)+[a·(i+1)].

• =DáR*HQLH SURFHGXUD SORWx, y, c, cmax QDGDMH SXQNWRZL R ZVSyáU]GQ\FK

x, y LQWHQV\ZQRü Z]JOGQ c / cmax (gdzie c, cmax ZDUWRFL FDáNRZLWH

FR ZLFHM cmax MHVW SRPQLHMV]RQ R SRWJ OLF]E\

• =DPLDVW ZDUWRFL XáDPNRZHM a·i-[a·i] OHSLHM MHVW UR]ZD*Dü ZDUWRü FDáNRZLW

([2n·a+0,5]·i) mod 2n.

• =DáR*HQLH IXQNFMD RYHUIORZd ]ZUDFD ZDUWRü true tylko wtedy,gdy poprzednia operacja na zmiennej d ]DNRF]\áD VL SU]HSHáQLHQLHP

parametry procedury: x, y, xe, ye:integer; x := xs, y := ys, xe := xe, ye := ye.

VWDáH SURFHGXU\ n liczba bitów dla typu integer,nm n-m>0, gdzie 2m MHVW OLF]E SR]LRPyZ V]DURFL,em 2m-1;

zmienne procedury: dx, dy, d, dinc:integer; dx := xe-x; dy := ye-y;

dla dx ≥ dy ≥ 0:d := 0;dinc := ((dy shl n)+(dx shr 1)) div dx;while x ≠ xe do

beginplot(x, y, em - (d shr nm) , em);if d ≠ 0 then plot(x, y+1, d shr nm, em);x := x+1; d := d+dinc mod 2n;if overflow(d) then y := y+1

end;plot(xe, ye, em, em)

Page 16: Grafika Komputerowa(1)

31

àXN RNUJX HOLSV\

5\V 'ZLH RULHQWDFMH SU]\ U\VRZDQLX RNUJX

(orientacja ujemna - zgodnie z ruchemwskazówek zegara, orientacja dodatnia -przeciwnie do ruchu wskazówek zegara).

orientacjaujemna

orientacjadodatnia

$OJRU\WP\ U\VRZDQLD áXNyZ RNUJyZ HOLSV:

• zmiennoprzecinkowe.ROHMQH SLNVHOH áXNX Z\]QDF]DQH V SU]H] SRGVWDZLDQLH ]PLHQLDQHM ]H

VWDá\P NURNLHP SHZQHM ]PLHQQHM GR Z]RUyZ JHRPHWULL HXNOLGHVRZHM

L ]DRNUJODQLH RWU]\PDQ\FK Z WHQ VSRVyE ZVSyáU]GQ\FK

• podstawowy

• parametryczny

• +RQJD VWDáRSU]HFLQNRZD ZHUVMD DOJRU\WPX SDUDPHWU\F]QHJR

• warunkowe.ROHMQH SLNVHOH áXNX Z\]QDF]DQH V VSRUyG SLNVHOLNDQG\GDWyZ QD

SRGVWDZLH SRUyZQD Z G]LHG]LQLH OLF]E FDáNRZLW\FK

• Bresenhama

• SXQNWX URGNRZHJR DQJ midpoint)

• porównawczy Jordana

C

S

E 5\V àXN RNUJX R URGNX Z SXQNFLH &

UR]SRF]\QDMF\ VL Z SXQNFLH 6

NRF]F\ VL QD SyáSURVWHM &(

wyznaczonej przez punkt E,rysowany przy orientacji dodatniej.Uwaga: 3RGDQH QL*HM DOJRU\WP\

U\VXM áXNL ZJ RULHQWDFML GRGDWQLHM

Oznaczenia: (xs , ys SRF]WHN áXNX (xe , ye NRQLHF áXNX

(xc , yc URGHN RNUJX

=DáR*HQLH

:VSyáF]\QQLN NV]WDáWX SLNVHOD DQJ aspect ratio) wynosi 1.

5\V :VSyáF]\QQLN NV]WDáWX SLNVHOD UyZQ\ MHVWu

v.

u

vpiksel

Uwaga: 2NUJ R URGNX xc , yc) i promieniu r PR*QD RWU]\PDü ] RNUJX R

URGNX L SURPLHQLX r VWRVXMF SU]HVXQLFLH R ZHNWRU xc , yc).

32

Oktanty (ósemki)

5\V 3RG]LDá RNUJX QD RNWDQW\ yVHPNL

=D]QDF]RQD VWU]DáNDPL SU]\QDOH*QRü

GR RNWDQWX SyáSURVWHM UR]JUDQLF]DMFHM

]DOH*\ RG RULHQWDFML U\VRZDQLD

=DáR*HQLH (xc,yc) = (0,0)

1

23

4

5

6 7

8

dla orientacjidodatniej

dla orientacjiujemnej

• $OJRU\WP Z\]QDF]DQLD QXPHUX RNWDQWX QD SRGVWDZLH ZVSyáU]GQ\FK SLNVHOD

if y > 0 then if x > 0 then if x > y then Octant := 1else Octant := 2

else if y > -x then Octant := 3else Octant := 4

else if x < 0 then if x < y then Octant := 5else Octant := 6

else if y < -x then Octant := 7else if y ≠ 0 then Octant := 8

else if x ≠ 0 then Octant := 1else Octant := 0

Funkcja StartOctant(xs,ys,xe,ye) wykorzystuje ten algorytm do wyznaczeniaRNWDQWyZ SLNVHOD SRF]WNRZHJR xs,ys L NRFRZHJR xe,ye). Funkcja ta]ZUDFD QXPHU RNWDQWX SLNVHOD SRF]WNRZHJR áXNX ,QLFMDOL]XMH RQD SRQDGWR

pewne zmienne globalne dla potrzeb funkcji Octant.

• Algorytm wyznaczania numeru oktantu na podstawie ZVSyáU]GQ\FK SLNVHOD

SU]\ GRGDWNRZHM ]QDMRPRFL QXPHUX RNWDQWX SRSU]HG]DMFHJR JR SLNVHOD Z

áXNX RNUJX R SURPLHQLX r > 1) rysowanym przy orientacji dodatniej:

case Octant of 1: if x > y then Octant := 1 else Octant := 2;2: if x > 0 then Octant := 2 else Octant := 3;3: if y > -x then Octant := 3 else Octant := 4;4: if y > 0 then Octant := 4 else Octant := 5;5: if x < y then Octant := 5 else Octant := 6;6: if x < 0 then Octant := 6 else Octant := 7;7: if y < -x then Octant := 7 else Octant := 8;8: if y < 0 then Octant := 8 else Octant := 1 end

Funkcja Octant(x,y) wykorzystuje ten algorytm do wyznaczenia oktantupiksela (x,y). Funkcja ta zwraca numer oktantu tego piksela lub zero, gdyRVLJQLW\ ]RVWDá NRQLHF áXNX :\NRU]\VWXMH RQD SRQDGWR SHZQH ]PLHQQH

JOREDOQH ]DLQLFMDOL]RZDQH SU]H] IXQNFM 6WDUW2FWDQW

• :DUXQHN VWZLHUG]DMF\ RVLJQLFLH NRFD áXNX GOD RULHQWDFML GRGDWQLHM

:DUXQHN WHQ QDOH*\ WHVWRZDü MHG\QLH Z RNWDQFLH SLNVHOD NRFRZHJR áXNX

y*xe > ye*x ⇒ RVLJQLWR NRQLHF áXNX

Page 17: Grafika Komputerowa(1)

33

Algorytm podstawowy

• Ogólna zasada:3U]\ U\VRZDQLX NU]\ZHM SROHJDMF\P QD Z\]QDF]DQLX ZVSyáU]GQ\FK

NROHMQ\FK SLNVHOL SRSU]H] PRG\ILNDFM MHGQHM ]H ZVSyáU]GQ\FK R L

REOLF]DQLX GUXJLHM ZVSyáU]GQHM ]H Z]RUX DQDOLW\F]QHJR ZVSyáU]GQ

]PLHQLDQ R SRZLQQD E\ü ZVSyáU]GQD GOD NWyUHM SU]\URVW\ V ZLNV]H

• 5yZQDQLH RNUJX R rodku (xc,yc) = (0,0) i promieniu r: x2 + y2 = r2

1

23

4

5

6 7

8

5\V 3RG]LDá RNUJX QD RNWDQW\

Dla orientacji dodatniej i dla oktantów:

• 1, 8: y ]ZLNV]DQH R x r y: [ ]= − +2 2 12

,

• 2, 3: x zmniejszane o 1, y r x: [ ]= − +2 2 12

,

• 4, 5: y zmniejszane o 1, x r y: [ ]= − − +2 2 12

,

• [ ]ZLNV]DQH R y r x: [ ]= − − +2 2 12

.

• Uwaga: 'ZXEDMWRZ\ W\S LQWHJHU PR*H QLH Z\VWDUF]\ü GR SU]HFKRZDQLD

Z\QLNX PQR*HQLD SRGQRV]HQLD GR NZDGUDWX ZDUWRFL ZVSyáU]GQ\FK

(np. 200* ! 'ODWHJR WH* IXQNFMD SRGQRV]FD GRNZDGUDWX SRZLQQD E\ü ]EXGRZDQD QDVWSXMFR

function sqr(u:integer):longint; begin sqr:=longint(u)*longint(u) end

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: rr:longint; xe := xe-xc, ye := ye-yc,

dla oktantów nr 1 i 8: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) in [1, 8] thenbegin

rr := sqr(x) + sqr(y);repeat

plot(x+xc, y+yc);y := y+1;x := round(sqrt(rr-sqr(y)))

until not (Octant(x,y) in [1, 8])end

34

Algorytm parametryczny

• RównDQLH SDUDPHWU\F]QH RNUJX R URGNX xc,yc) = (0,0) i promieniu r:x = r*cosϕ,y = r*sinϕ, ϕ ∈ [0, 2*π)

• =DáR*HQLH NROHMQH SLNVHOH Z\]QDF]DQH V SRSU]H] ]PLDQ SDUDPHWUX ϕ oVWDá ZDUWRü ∆ϕ = const.

• -H*HOL SLNVHO xi,yi PD ZVSyáU]GQH xi = r*cosϕi,yi = r*sinϕi,

WR SU]\ RULHQWDFML GRGDWQLHM QDVWSXMF\ SR QLP SLNVHO xi+1,yi+1) maZVSyáU]GQH

xi+1 = r*cosϕi+1 = r*cos(ϕi+∆ϕ) == r*cosϕi*cos∆ϕ - r*sinϕi*sin∆ϕ == xi*cos∆ϕ - yi*sin∆ϕ,

yi+1 = r*sinϕi+1 = r*sin(ϕi+∆ϕ) == r*cosϕi*sin∆ϕ + r*sinϕi*cos∆ϕ == xi*sin∆ϕ + yi*cos∆ϕ,

∆ϕ ∆ϕ∗ ≤1r

r

r

5\V :DUWRü ∆ϕ SRZLQQD SRZRGRZDü ]PLDQ

ZDUWRFL ZVSyáU]GQ\FK QLH ZLFHM QL* R

:DUWRü ∆ϕ ≤ 1

r]DSHZQLD ]PLDQ ZDUWRFL

ZVSyáU]GQ\FK QLH ZLFHM QL* R

1DOH*\ ]DWHP SU]\Mü ∆ϕ = 1

r.

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: c, s, u, v, z:real; xe := xe-xc, ye := ye-yc,

dla wszystkich oktantów: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) ≠ 0 thenbegin

u := 1.0 / sqrt(sqr(x) + sqr(y)); c := cos(u); s := sin(u);v := x; z := y;repeat

plot(x+xc, y+yc);u := v*c-z*s; z := v*s+z*c; v := u;x := round(v); y := round(z)

until Octant(x,y) = 0end

Page 18: Grafika Komputerowa(1)

35

Algorytm Honga

• Dla algorytmu parametrycznego: xi+1 = xi*cos∆ϕ - yi*sin∆ϕ, ∆ϕ ≤ 1

ryi+1 = xi*sin∆ϕ + yi*cos∆ϕ.

• Oznaczenie:k := [log2 r@ OLF]ED ELWyZ SRWU]HEQ\FK GR ]DSLVDQLD ZDUWRFL r.

• 2k-1 ≤ r < 2k & 2-k < 1

r ≤ 2-k+1 Z\JRGQLH ]DWHP SU]\Mü ∆ϕ =2-k <

1

r.

• 3RQLHZD* NW ∆ϕ MHVW PDá\ ZLF IXQNFMH WU\JRQRPHWU\F]QH WHJR NWD

Z\VWSXMFH Z SRZ\*V]\FK Z]RUDFK PR*QD GRü GREU]H SU]\EOL*\ü

SRF]WNRZ\PL Z\UD]DPL RGSRZLHGQLFK V]HUHJyZ 7D\ORUD

cosx xn x n

n= − + + − +1

1

22 1 2

2!..

( )

( )!...

*

* sinx x x

n x n

n= − + + − +

++1

33 1 2 1

2 1!..

( )

( )!...

*

*

• 3U]\MPXMF SU]\EOL*HQLH FRVx ≈ 1-1

2 *x2, sinx ≈ x L XZ]JOGQLDMF ∆ϕ=2-k,

RWU]\PXMH VL QDVWSXMFH Z]RU\

xi+1 = xi*(1-1

2 *(∆ϕ)2) - yi*∆ϕ = xi -xi*2-(2k+1) -yi*2-k,

yi+1 = xi*∆ϕ + yi*(1-1

2 *(∆ϕ)2) = xi*2-k+yi-yi*2-(2k+1).

• 0QR*HQLH G]LHOHQLH SU]H] n RGSRZLDGD SU]HVXQLFLX DU\WPHW\F]QHPX

=DáR*HQLH shr, shl - operacje przesuwania arytmetycznego w prawo i lewo.

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: k, n:integer; u, v, z:longint; xe := xe-xc, ye := ye-yc,

dla wszystkich oktantów: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) ≠ 0 thenbegin

u := sqr(x) + sqr(y); k := 0;while u ≠ 0 do begin u := u shr 2; k := k+1 end;k := trunc(log2(sqrt(sqr(x)+sqr(y))))+1;n := 2*k+1; v := x; z := y; v := v shl n; z := z shl n;repeat

plot(x+xc, y+yc);u := v-x-(z shr k); z := z-y+(v shr k); v := u;x := v shr n; y := z shr n

until Octant(x,y) = 0end

36

Algorytm Bresenhama

• =DáR*HQLH U\VRZDQ\ áXN RNUJX ] RNWDQWX QU

'OD WDNLHJR áXNX ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW VVLDGHP

poprzedniego w kierunku Ï albo Ñ.

narysowanypiksel

ostatnio

dwapiksele

kandydaci

áXN LGHDOQ\

d

d2

1

Rys. Kryterium wyborukolejnego piksela dlaUR]ZD*DQHJR SU]\SDGNX

• d1>d2 ⇒ rysowanylewy piksel kandydat,

• d1<d2 ⇒ rysowanyprawy piksel kandydat,

• d1=d2 ⇒ rysowanydowolny z pikselikandydatów

• 3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD Z\QLRV

xi

xixi+ =−

1

1:

przy wyborze lewego piksela kandydata,

przy wyborze prawego piksela kandydata.

yi+1:= yi +1 przy wyborze dowolnego z pikseli kandydatów,

• Wynik porównania d1>d2 decyduje o wyborze kolejnego piksela

do rysowania: d xi r yi12 1 2= − − +( ) , d r yi xi2

2 1 2 1= − + − −( ) ( ) .

• d1>d2 ⇔ xi r yi r yi xi− − + > − + − −2 1 2 2 1 2 1( ) ( ) ( )

⇔ 2 1 2 2 1 2* * ( )xi r yi− > − +⇔ (2*xi-1)2 > 4*(r2-(yi+1)2)

⇔ 4*xi2-4*xi+1 > 4*(r2-(yi+1)2)

⇔ 4*xi2-4*xi+2 > 4*(r2-(yi+1)2)

⇔ 2*xi2-2*xi+1 > 2*(r2-(yi+1)2)

⇔ xi2+xi2-2*xi+1 > 2*(r2-(yi+1)2)

⇔ xi2+(xi-1)2 > 2*(r2-(yi+1)2)

⇔ xi2+(yi+1)2-r2 > r2-(xi-1)2-(yi+1)2

⇔ F(xi,yi+1)+F(xi-1,yi+1) > 0

(...)2 (xi > 0)

OLF]E\ FDáNRZLWH

/ 2

F(x,y) = x2+y2-r2

Page 19: Grafika Komputerowa(1)

37

• Oznaczenie: pi := F(xi,yi+1)+F(xi-1,yi+1).

:DUWRü pi jest zawsze ZDUWRFL FDáNRZLW.

• d1>d2 ⇔ pi>0 ⇒ wybór lewego piksela kandydata,d1<d2 ⇔ pi<0 ⇒ wybór prawego piksela kandydata,d1=d2 ⇔ pi=0 ⇒ wybór dowolnego piksela kandydata,

w algorytmie SU]\MWR Z\EyU OHZHJR

ten przypadek nigdy nie zajdzie.

• 3RF]WNRZD ZDUWRü pi:

p0 = F(x0,y0+1)+F(x0-1,y0+1) =

= F(xs,ys+1)+F(xs-1,ys+1) =

= xs2+(ys+1)2-r2+(xs-1)2+(ys+1)2-r2 =

= xs2+ys2+2*ys+1-r2+xs2-2*xs+1+ys2+2*ys+1-r2 =

= 4*ys-2*xs+3.

x0=xs, y0=ys

x 2+y 2-r 2=0

• 0RG\ILNDFMD ZDUWRFL pi:

pi+1-pi = F(xi+1,yi+1+1)+F(xi+1-1,yi+1+1)-F(xi,yi+1)-F(xi-1,yi+1) =

= xi+12+(yi+1+1)2-r2+(xi+1-1)2+(yi+1+1)2-r2+-xi2-(yi+1)2+r2-(xi-1)2-(yi+1)2+r2 =

= xi+12-xi2+(xi+1-1)2-(xi-1)2+2*((yi+1+1)2-(yi+1)2) =

=

xi2-xi2+(xi-1)2-(xi-1)2+2*((yi+2)2-(yi+1)2) =

= 4*yi+6 dla wyboru prawego piksela,

(xi-1)2-xi2+(xi-2)2-(xi-1)2+2*((yi+2)2-(yi+1)2) =

= 4*yi-4*xi+10 dla wyboru lewego piksela.

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: p:integer; xe := xe-xc, ye := ye-yc,

dla oktantu nr 1: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) = 1 thenbegin

p := 4*y-2*x+3;repeat

plot(x+xc, y+yc);if p < 0 then p := p+4*y+6

else begin p := p+4*(y-x)+10; x := x-1 end;y := y+1

until Octant(x,y) ≠ 1end

38

$OJRU\WP SXQNWX URGNRZHJR DQJ midpoint)

• =DáR*HQLH U\VRZDQ\ áXN RNUJX ] RNWDQWX QU

'OD WDNLHJR áXNX ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW VVLDGHP

poprzedniego w kierunku Ï albo Ñ.

narysowanypiksel

ostatnio

dwapiksele

kandydaci

áXN LGHDOQ\

Rys. Kryterium wyborukolejnego piksela dlaUR]ZD*DQHJR SU]\SDGNX

o wyborze kolejnegopiksela decyduje znakZDUWRFL IXQNFML

F(x,y)=x2+y2-r2

Z SXQNFLH URGNRZ\P

]D]QDF]RQ\P NU]\*\NLHP

SRPLG]\ SLNVHODPL

kandydatami.

• PrzyjmiMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD Z\QLRV

xi

xixi+ =−

1

1:

przy wyborze lewego piksela kandydata,

przy wyborze prawego piksela kandydata.

yi+1:= yi +1 przy wyborze dowolnego z pikseli kandydatów,

• Oznaczenie:

fi := F(xi-1

2,yi+1)-

1

4 = (xi-

1

2)2 +(yi+1)2 -r2 -

1

4 = xi2 -xi +yi2 +2*yi +1 -r2.

• Uwaga: :DUWRü fi := F(xi-1

2,yi+1) -

1

4MHVW ]DZV]H ZDUWRFL FDáNRZLW

• Kryterium wyboru kolejnego piksela:

• F(xi-1

2,yi+1)>0 ⇔ fi ≥ 0 ⇒ rysowany lewy piksel kandydat,

• F(xi-1

2,yi+1)<0 ⇔ fi < 0 ⇒ rysowany prawy piksel kandydat,

• F(xi-1

2,yi+1)=0 ⇒ rysowany dowolny z pikseli kandydatów -

ten przypadek nigdy nie zajdzie.

Page 20: Grafika Komputerowa(1)

39

• PoczWNRZD ZDUWRü fi:

=−+ 0222 ryx VV

f0 := F(x0,y0)-1

4 = F(xs,ys)-

1

4 = xs2 -xs +ys2 +2*ys +1 -r2 = 2*ys -xs +1.

• 0RG\ILNDFMD ZDUWRFL fi:

fi+1-fi := F(xi+1-1

2,yi+1+1) -

1

4 - F(xi-

1

2,yi+1) +

1

4 =

= xi+12 -xi+1 +yi+12 +2*yi+1 +1 -r2 -xi2 +xi -yi2 -2*yi -1 +r2 =

= xi+12-xi2-xi+1+xi+yi+12-yi2+2*(yi+1-yi) =

= (xi+1+xi-1)*(xi+1-xi)+(yi+1+yi+2)*(yi+1-yi) =

= (xi+1+xi-1)*(xi+1-xi)+2*yi+3 =

=+

− +

2 3

2 2 5

*

* *

yiyi xi

JG\ Z\EUDQR SUDZ\ SLNVHO

JG\ Z\EUDQR OHZ\ SLNVHO

= + +

+ − + +

2 1 1

2 1 2 1 1

*

* *

yiyi xi

JG\ Z\EUDQR SUDZ\ SLNVHO

JG\ Z\EUDQR OHZ\ SLNVHO

yi+1 = yi+1

xi+1 = xi

xi+1 = xi-1

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: f:integer; xe := xe-xc, ye := ye-yc,

dla oktantu nr 1: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) = 1 thenbegin

f := 2*y-x+1;repeat

plot(x+xc, y+yc);y := y+1;if f < 0 then f := f+2*y+1

else begin x := x-1; f := f+2*(y-x)+1 enduntil Octant(x,y) ≠ 1

end

40

Algorytm porównawczy Jordana

• ZaáR*HQLH U\VRZDQ\ áXN RNUJX ] RNWDQWX QU OXE

'OD WDNLHJR áXNX ND*G\ NROHMQ\ SLNVHO U\VRZDQHJR RGFLQND MHVW VVLDGHP

poprzedniego w kierunku Ï, Ñ albo Í.

narysowanypiksel

ostatnio

trzypiksele

kandydaci

áXN LGHDOQ\

Rys. Kryterium wyborukolejnego piksela dlaUR]ZD*DQHJR SU]\SDGNX

rysowany jest ten piksel,GOD NWyUHJR ZDUWRü

EH]Z]JOGQD ] ZDUWRFL

funkcji F(x,y)=x2+y2-r2

Z URGNX WHJR SLNVHOD MHVW

najmniejsza.

• 3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyáU]GQH xi, yi.:yZF]DV ZVSyáU]GQH NROHMQHJR SLNVHOD PRJ Z\QLHü

1. xi+1:= xi - 1yi+1:= yi

przy wyborze lewego piksela kandydata,

2. xi+1:= xiyi+1:= yi +1

przy wyborze górnego piksela kandydata,

3. xi+1:= xi - 1yi+1:= yi +1

przy wyborze lewego górnego piksela kandydata.

• Oznaczenia: f := F(xi,yi), F(x0,y0) = F(xs,ys) = 0,

f1 := F(xi-1,yi) = f -2*xi +1,

f2 := F(xi,yi+1) = f +2*yi +1,

f3 := F(xi-1,yi+1) = f -2*xi +2*yi +2.

• |f1|<|f2| & |f1|<|f3| ⇒ wybór lewego piksela kandydata,|f2|<|f1| & |f2|<|f3| ⇒ wybór górnego piksela kandydata,|f3|<|f1| & |f3|<|f2| ⇒ wybór lewego górnego piksela kandydata,|f1|<|f2| & |f1|=|f3| ⇒ wybór lewego lub lewego górnego piksela,|f2|<|f1| & |f2|=|f3| ⇒ wybór górnego lub lewego górnego piksela,

w alJRU\WPLH SU]\MWR Z\EyU OHZHJR JyUQHJR

Page 21: Grafika Komputerowa(1)

41

• 3RQLHZD* f2 ≥ f3 ≥ f1 ZLF

|f1|<|f2| & |f1|<|f3| ⇔ |f1|<|f3| ⇒ wybór lewego piksela kandydata,|f2|<|f1| & |f2|<|f3| ⇔ |f2|<|f3| ⇒ wybór górnego piksela kandydata,Z SR]RVWDá\FK SU]\SDGNDFK Z\EyU OHZHJR JyUQHJR SLNVHOD NDQG\GDWD

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: f1, f2, f3:integer; xe := xe-xc, ye := ye-yc,

dla oktantu nr 1 lub 2: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) in [1, 2] thenbegin

f1 := -2*x+1;repeat

plot(x+xc, y+yc);f3 := f1+2*y+1; f2 := f3+2*x-1;if |f1| < |f3| then begin x := x-1; f1 := f1-2*x+1 endelse if |f2| < |f3| then begin y := y+1; f1 := f2-2*x+1 endelse begin x := x-1; y := y+1; f1 := f3-2*x+1 end

until not (Octant(x,y) in [1, 2])end

• 3RQLHZD* f2 ≥ f3 ≥ f1 ZLF

|f1|<|f3| ⇔ -f1<f3 ⇒ wybór lewego piksela kandydata,|f2|<|f3| ⇔ f2<-f3 ⇒ wybór górnego piksela kandydata,Z SR]RVWDá\FK SU]\SDGNDFK Z\EyU OHZHJR JyUQHJR SLNVHOD NDQG\GDWD

parametry procedury: x, y, xe, ye, xc, yc:integer; x := xs-xc, y := ys-yc,

zmienne procedury: f1, f2, f3:integer; xe := xe-xc, ye := ye-yc,

dla oktantu nr 1 lub 2: xc := xc, yc := yc.

if StartOctant(x,y,xe,ye) in [1, 2] thenbegin

f1 := -2*x+1;repeat

plot(x+xc, y+yc);f3 := f1+2*y+1; f2 := f3+2*x-1;if f3 < -f1 then begin y := y+1; f1 := f3 end;if -f3 < f2 then begin x := x-1; f1 := f1-2*x+1 end

until not (Octant(x,y) in [1, 2])end

42

2NUJ

• $E\ QDU\VRZDü SHáHQ RNUJ R URGNX xc,yc) ipromieniu r Z\VWDUF]\ GRNRQDü REOLF]H MHG\QLH GOD

jednego oktantu (np. nr 1). Otrzymane dla tegoRNWDQWX ZVSyáU]GQH x, y SR]ZDODM Z\]QDF]\ü

SLNVHOH RNUJX ]H ZV]\VWNLFK RPLX RNWDQWyZ (x,y),(y,x), (-y,x), (-x,y), (-x,-y), (-y,-x), (y,-x), (x,-y).

1

23

4

5

6 7

8

Elipsa

• $E\ QDU\VRZDü SHáQ HOLSV R URGNX xc,yc) iSyáRVLDFK p i q Z\VWDUF]\ GRNRQDü REOLF]H GOD

MHGQHM üZLDUWNL F]\OL GOD GZyFK RNWDQWyZ QS QU

L 2WU]\PDQH GOD WHM üZLDUWNL ZVSyáU]GQH x,y SR]ZDODM Z\]QDF]\ü SLNVHOH HOLSV\ ]H

ZV]\VWNLFK üZLDUWHN (x,y), (-x,y), (-x,-y), (x,-y).

1

23

4

5

6 7

8

3U]\NáDGRZ\ DOJRU\WP U\VRZDQLD HOLSV\ DOJRU\WP .DSSHOD

procedure Ellipse(xc, yc, p, q: integer);var x, y: integer; pp, qq, pp2, qq2, f, fx, fy: longint;begin

x := p; y := 0;pp := p*p; qq := q*q;pp2 := 2*pp; qq2 := 2*qq;f := pp - p*qq + qq div 4; fx := qq2*p; fy := 0;while fx > fy do oktant nr 1 (oraz nr 4, 5, 8)

beginplot(x+xc, y+yc); plot(-x+xc, y+yc);plot(-x+xc, -y+yc); plot(x+xc, -y+yc);y := y+1; fy := fy+pp2;if f < 0 then f := f+fy+ppelse begin x := x-1; fx := fx-qq2; f := f-fx+fy+pp end

end;f := f - (fx+fy) div 2 + qq - pp - (qq-pp) div 4;repeat oktant nr 2 (oraz nr 3, 6, 7)

plot(x+xc, y+yc); plot(-x+xc, y+yc);plot(-x+xc, -y+yc); plot(x+xc, -y+yc);x := x-1; fx := fx-qq2;if f > 0 then f := f-fx+qqelse begin y := y+1; fy := fy+pp2; f := f-fx+fy+qq end

until x < 0end

Page 22: Grafika Komputerowa(1)

43

Znajdowanie konturu

• Konturem danego zbioru pikseli nazywamy zbiór wszystkich pikseliQDOH*F\FK GR WHJR ]ELRUX L PDMF\FK SU]\QDMPQLHM MHGQHJR EVVLDGD QLH

QDOH*FHJR GR WHJR ]ELRUX

• Znajdowanie wszystkich konturów dowolnego zbioru pikseli:procedura AllContourTracing.:\V]XNDQLH VSRUyG ZV]\VWNLFK SLNVHOL ]ELRUX W\FK NWyUH PDM

SU]\QDMPQLHM MHGQHJR EVVLDGD QLH QDOH*FHJR GR WHJR ]ELRUX

• Znajdowanie pojedynczego konturu spójnego podzbioru zbioru pikseli:procedura ContourTracing.6WRSQLRZH Z\V]XNLZDQLH SRF]ZV]\ RG ZVND]DQHJR SLNVHOD SLNVHOL

NRQWXUX SRSU]H] DQDOL] VVLHG]WZD NROHMQR ]QDMGRZDQ\FK SLNVHOL NRQWXUX

pikselkonturu

pikselspozazbioru

1 2 3

4

567

5\V 3U]\NáDGRZ\ ]ELyU

pikseli i jego kontur.

5\V .ROHMQRü SU]HJOGDQLD VVLDGyZ SLNVHOD

NRQWXUX Z FHOX ]QDOH]LHQLD QDVWSQHJR

piksela konturu.

44

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour);

procedure AllContourTracing;var x,y: coordinate;begin

for x:=minx to maxx dofor y:=miny to maxy do

if pixel[x,y]HPSW\ thenif (pixel[x–1,y]=empty) or

(pixel[x+1,y]=empty) or(pixel[x,y–1]=empty) or(pixel[x,y+1]=empty) then pixel[x,y]:=contour

end;

procedure neighbour(var nx,ny:coordinate; x,y:coordinate; s:direction);begin

case s of0: begin nx:=x+1; ny:=y end;1: begin nx:=x+1; ny:=y–1 end;2: begin nx:=x; ny:=y–1 end;3: begin nx:=x–1; ny:=y–1 end;4: begin nx:=x–1; ny:=y end;5: begin nx:=x–1; ny:=y+1 end;6: begin nx:=x; ny:=y+1 end;7: begin nx:=x+1; ny:=y+1 end

endend;

Page 23: Grafika Komputerowa(1)

45

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour);

procedure ContourTracing(bx,by:coordinate; bs:direction);varx,y,nx,ny: coordinate;

s: direction;begin

^ NRQWUROD Z\PDJD VWDZLDQ\FK SU]HG GDQ\PL SRF]WNRZ\PL `

if pixel[bx,by]LQWHULRU then exit; punkt (bx,by QLH QDOH*\ GR ]ELRUX `

bs:= bs mod 8 - bs mod 2;neighbour(nx,ny,bx,by,bs);if pixel[nx,ny]HPSW\ then exit ^ VVLDG SXQNWX bx,by QDOH*\ GR ]ELRUX `

^ Z\]QDF]HQLH NRFRZHJR NLHUXQNX EVVLDGD SR REHMFLX NRQWXUX `

s:=bs;repeat

bs:= (bs+7) mod 8;if bs=s then

beginpixel[bx,by]:=contour;exit ^ QLH PD VVLDGyZ QDOH*F\FK GR ]ELRUX ]ELyU MHGQRSXQNWRZ\ `

end;neighbour(nx,ny,bx,by,bs)

until pixel[nx,ny]HPSW\

if odd(bs) then bs:= (bs+1) mod 8 else bs:= (bs+2) mod 8;

znajdowanie konturu x:=bx; y:=by;repeat

pixel[x,y]:=contour;repeat

s:= (s+1) mod 8;neighbour(nx,ny,x,y,s)

until pixel[nx,ny]HPSW\

x:=nx; y:=ny;if odd(s) then s:= (s+5) mod 8 else s:= (s+6) mod 8

until (x=bx) and (y=by) and (s=bs)end;

46

:\SHáQLDQLH NRQWXUX

• 0HWRG\ Z\SHáQLDQLD NRQWXUX

• 0HWRGD Z\SHáQLDQLD NRQWXUX ] NRQWURO SDU]\VWRFL -Z\SHáQLDQLH ZV]\VWNLFK NRQWXUyZ SURFHGXUD $OO&RQWRXU)LOOLQJ

3U]HJOGDQLH ZV]\VWNLFK SLNVHOL REUD]X NROHMQ\PL OLQLDmi poziomymi.:\NU\FLH QLHSDU]\VWHM OLF]E\ SU]HFLü NRQWXUX ] ]DGDQ OLQL SR]LRP

QD OHZR RG GDQHJR SLNVHOD R]QDF]D *H QDOH*\ RQ GR ZQWU]D ]ELRUX

$E\ Z\NU\ü IUDJPHQW\ NRQWXUX VW\F]QH GR OLQLL SR]LRP\FK QDOH*\ GOD

ND*GHM OLQLL SR]LRPHM SU]HDQDOL]RZDü OLQLH GR QLHM VVLHGQLH -HOL Z

MHGQHM ] OLQLL VVLHGQLFK JyUQHM DOER GROQHM Z VVLHG]WZLH Z\NU\WHJR

IUDJPHQWX NRQWXUX QLH PD *DGQHJR SLNVHOD NRQWXUX WR MHVW WR IUDJPHQW

konturu styczny do linii poziomej.

5\V 3U]\NáDGRZ\

kontur. Fragmentykonturu styczne dolinii poziomych nieSRZLQQ\ E\ü

traktowane jakoSU]HFLFLD NRQWXUX ]

liniami poziomymi.

5\V 3U]\NáDGRZ\ NRQWXU

dla któregoproceduraAllContourFilling]DV\JQDOL]XMH EáG

'RSLHUR XVXQLFLH

z tego konturupikseli oznaczonychNU]\*\NDPL

XPR*OLZL

SUDZLGáRZH Z\NR

nanie tej procedury.

Page 24: Grafika Komputerowa(1)

47

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour);

procedure AllContourFilling;var x,y: coordinate; above,below: integer; oddintsect: Boolean;begin

for y:=miny to maxy dobegin

oddintsect:=false;x:=minx;while xmaxx do

if pixel[x,y]FRQWRXUthen

beginif oddintsect then pixel[x,y]:=interior;x:=x+1

endelse

beginif (pixel[x-1,y-1]=contour) or (pixel[x,y-1]=contour)

then above:=1 else above:=0;if (pixel[x-1,y+1]=contour) or (pixel[x,y+1]=contour)

then below:=1 else below:=0;repeat

if (pixel[x+1,y-1]=contour) and (pixel[x,y-1]FRQWRXUthen above:=above+1;

if (pixel[x+1,y+1]=contour) and (pixel[x,y+1]FRQWRXUthen below:=below+1;

x:=x+1;until (pixel[x,y]FRQWRXU or (xmaxx);if odd(above) and odd(below) then oddintsect:= not oddintsect;if odd(above) RGGbelow) then HUURU ^ EáGQD V\WXDFMD `

endend

end;

48

• 0HWRGD Z\SHáQLDQLD NRQWXUX SU]H] VSyMQRü (przez sianie) -Z\SHáQLDQLH ]DGDQHJR NRQWXUX SURFHGXU\ )LOO L &RQWRXU)LOOLQJ

3U]HJOGDQLH ZH ZV]\VWNLFK NLHUXQNDFK SRF]ZV]\ RG ]DGDQHJR SLNVHOD

W]Z ]LDUQD NROHMQ\FK EVVLDGyZ D* GR RVLJQLFLD NRQWXUX

procedure Fill(x, y: Integer); x, y ZVSyáU]GQH ]LDUQD `

beginif pixel[x,y] = empty then

beginpixel[x,y] := interior;Fill(x+1,y); Fill(x,y-1); Fill(x-1,y); Fill(x,y+1)

endend

0 1

2 3

456

7

8

9

10

11

0 1

2 3

234

5

6

6

7

8

x

y

3URFHGXUD )LOO QLH MHVW HIHNW\ZQD JG\* GOD ND*GHJR SLNVHOD MHVW

Z\NRQ\ZDQH RVREQH Z\ZRáDQLH SU]H] FR V]\ENR URQLH SR]LRP

UHNXUHQFML SURZDG]F Z SUDNW\FH GR SU]HSHáQLHQLD VWRVX

2 ZLHOH U]DG]LHM GR UHNXUHQFML RGZRáXMH VL SURFHGXUD &RQWRXU)LOOLQJ

2 3

10 11

876

1

4

0

5

9

0 0

0 0

1 1 1 1

1

0 0

1

x

y

5\V :\SHáQLHQLH

SU]\NáDGRZHJR NRQ

WXUX Z\ZRáDQLHP

procedury Fill(x,y)ELDáH OLF]E\

R]QDF]DM NROHMQRü

czarne cyfry - poziomrekurencji).

5\V :\SHáQLHQLH

SU]\NáDGRZHJR NRQ

WXUX Z\ZRáDQLHP

proceduryContourFilling(x,y)ELDáH OLF]E\

R]QDF]DM NROHMQRü

czarne cyfry - poziomrekurencji).

Page 25: Grafika Komputerowa(1)

49

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour);

procedure ContourFilling(x,y: coordinate);

procedure filling(x,y: coordinate; dy: integer);var ax,ay,bx,by: coordinate; afind,bfind: Boolean;begin

if pixel[x,y]=empty thenrepeat

ax:=x; ay:=y+dy;bx:=x; by:=y-dy;while pixel[ax,ay]=empty do ax:=ax-1;if axx then ax:=ax+1;while pixel[bx,by]=empty do bx:=bx-1;if bxx then bx:=bx+1;afind:=pixel[ax,ay]=empty;bfind:=pixel[bx,by]=empty;pixel[x,y]:=interior;x:=x+1;while pixel[x,y]=empty do

begin pixel[x,y]:=interior;if (pixel[x,ay]=empty) and (pixel[x-1,ay]HPSW\

then begin if afindthen filling(ax,ay,dy)else afind:=true;

ax:=xend;

if (pixel[x,by]=empty) and (pixel[x-1,by]HPSW\

then begin if bfindthen filling(bx,by,-dy)else bfind:=true;

bx:=xend;

x:=x+1end;

if afind and bfind then filling(ax,ay,dy);if bfind then begin x:=bx; y:=by; dy:=-dy end

else begin x:=ax; y:=ay enduntil not (afind or bfind)

end;

beginif pixel[x,y]HPSW\ then exit;repeat x:=x-1 until pixel[x,y]HPSW\

x:=x+1;filling(x,y,1)

end;

50

FLHQLDQLH NV]WDáWyZ

• 1D SáDV]F]\(QLH HXNOLGHVRZHM

Definicja:• Szkieletem SkΩ zbioru Ω QD]\ZDP\ ]ELyU SXQNWyZ R QDVWSXMFHM

ZáDVQRFL

P PA

B

A B

AP BP

C CP AP

∈ ⇔ ∈∃ ∈∃ ∈

≠=

∀ ∈ ≥

SkFr

FrFr

Ω ΩΩΩ

Ω

• 1D SáDV]F]\(QLH G\VNUHWQHM

Definicja:• Piksel konturu nazywamy powtarzalnym JG\ VSHáQLD RQ SU]\QDMPQLHM

jeden z trzech warunków:1. Z\VWSXMH FR QDMPQLHM GZXNURWQLH Z GURJDFK RSLVXMF\FK NRQWXU

2. QLH PD VVLDGyZ ZHZQWU] REV]DUX RWRF]RQHJR NRQWXUHP

3. PD FR QDMPQLHM MHGQHJR EVVLDGD ] NRQWXUX NWyU\ QLH VVLDGXMH ] QLP

Z FLJX SLNVHOL VWDQRZLF\P GURJ RSLVXMF NRQWXU

Definicja:• Szkieletem danego zbioru pikseli jest zbiór pikseli, otrzymany w wyniku

F\NOLF]QHJR RGU]XFDQLD SLNVHOL NRQWXUX QLH EGF\FK SLNVHODPL SRZWDU]DOQ\PL

• Szkieletem jest zatem zbiór otrzymany w wyniku wykonania algorytmu:repeat ]QDOH]LHQLH NRQWXUX L XVXQLFLH ]H ]ELRUX W\FK SLNVHOL NRQWXUX

NWyUH QLH V SLNVHODPL SRZWDU]DOQ\PL

until QLH XVXQLWR *DGQHJR SLNVHOD

• :DUXQNL Z\VWSXMFH Z GHILQLFML SLNVHOL SRZWDU]DOQ\FK NRQWXUX PR*QD

RSLVDü Z]RUFDPL VVLHG]WZ

A A A A A A 5\V :]RUFH RGSRZLDGDMFH A A CX A X pierwszemu (Å) i trzeciemu*) X K

B B B A B (Æ) warunkowi. B B C0° 90° 0° 90° 180° 270°

JG\ QLH V VSHáQLRQH SR]RVWDáH ZDUXQNL0° 90° 180° 270°

• X - piksel powtarzalny konturu; K - piksel konturu;

• A, B, C - grupa pikVHOL R]QDF]RQ\FK W VDP OLWHU PD W ZáDVQRü L* FR

QDMPQLHM MHGHQ ] QLFK QDOH*\ GR ]ELRUX MHOL RED SLNVHOH & QDOH* GR

]ELRUX RVWDWQL Z]RU]HF WR SU]\QDOH*QRü SLNVHOL $ L % MHVW GRZROQD

• %DGDQLH SRZWDU]DOQRFL Z\Paga zatem jedynie sprawdzeniaQDMEOL*V]HJR VVLHG]WZD SLNVHOD NRQWXUX

• 3RGHMFLH ZJ GHILQLFML DOJRU\WP FLHQLDQLD SURFHGXUD 'HI7KLQQLQJ

• 3RGHMFLH XSURV]F]RQH DOJRU\WP NODV\F]Q\ FLeniania: procedura Thinning.

Page 26: Grafika Komputerowa(1)

51

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour, skeleton);

procedure DefThinning; ^ FLHQLDQLH QD SRGVWDZLH GHILQLFML V]NLHOHWX `

var x,y,nx,ny: coordinate; e,i,m: byte; s: direction; finish, pattern: Boolean;begin

repeatfinish:=true;AllContourTracing;for y:=miny to maxy do for x:=minx to maxx do if pixel[x,y]=contour then

begine:=0; i:=0; m:=0;for s:=0 to 7 do konstrukcja wzorców

begine:=e shl 1; i:=i shl 1; m:=m shl 1;neighbour(nx,ny,x,y,s);if pixel[nx,ny]=empty

then e:=e or 1else begin i:=i or 1;

if pixel[nx,ny]LQWHULRU then m:=m or 1end

end; Ë NRQWUROD ZDUXQNX SRZWDU]DOQRFL `

pattern:=(i=m) or È NRQWUROD ZDUXQNX SRZWDU]DOQRFL `

(((i and $70) and ((i and $07) and ((e and $88)=$88)) or(((i and $1C) and ((i and $C1) and ((e and $22)=$22)) or(((i and $01) and ((i and $7C) and ((e and $82)=$82)) or(((i and $40) and ((i and $1F) and ((e and $A0)=$A0)) or(((i and $10) and ((i and $C7) and ((e and $28)=$28)) or(((i and $04) and ((i and $F1) and ((e and $0A)=$0A)) or

È NRQWUROD ZDUXQNX SRZWDU]DOQRFL `

(((i and $41) and ((m and $80) and ((e and $08) and (((e and $41)=0) or (((i and $30) and ((i and $06) or(((i and $05) and ((m and $02) and ((e and $20) and (((e and $05)=0) or (((i and $C0) and ((i and $18) or(((i and $14) and ((m and $08) and ((e and $80) and (((e and $14)=0) or (((i and $03) and ((i and $60) or(((i and $50) and ((m and $20) and ((e and $02) and (((e and $50)=0) or (((i and $0C) and ((i and $81)

if pattern then pixel[x,y]:=skeleton else finish:=falseend;

for y:=miny to maxy do for x:=minx to maxx doif pixel[x,y]=contour then pixel[x,y]:=emptyelse if not finish and (pixel[x,y]=skeleton) then pixel[x,y]:=interior

until finish;for y:=miny to maxy do for x:=minx to maxx do

if pixel[x,y]=interior then pixel[x,y]:=skeletonend;

52

var pixel: array[minx..maxx, miny..maxy] of (empty, interior, contour, skeleton); procedure Thinning;var x,y,nx,ny: coordinate; q,r,s: direction; finish, pattern, first, second: Boolean;begin

repeatfinish:=true; s:=0;repeat

for y:=miny to maxy do for x:=minx to maxx doif pixel[x,y]=interior then

begin neighbour(nx,ny,x,y,s);if pixel[nx,ny]=empty then

begin pattern:=false;r:=(s+2) mod 8;repeat

neighbour(nx,ny,x,y,r);if pixel[nx,ny]=empty then

begin first:=false; second:=false;q:=(s+1) mod 8;repeat

neighbour(nx,ny,x,y,q);if pixel[nx,ny]HPSW\ then first:=true;q:=(q+1) mod 8

until (q=r) or first;q:=(r+1) mod 8;repeat

neighbour(nx,ny,x,y,q);if pixel[nx,ny]HPSW\ then second:=true;q:=(q+1) mod 8

until (q=s) or second;pattern:= first and second

end;r:=(r+2) mod 8

until (r=s) or pattern;if pattern then pixel[x,y]:=skeleton

else pixel[x,y]:=contourend

end;for y:=miny to maxy do for x:=minx to maxx do

if pixel[x,y]=contour thenbegin pixel[x,y]:=empty;

finish:=falseend;

s:=(s+2) mod 8until s=0

until finishend;

Page 27: Grafika Komputerowa(1)

53

12 1212 13 123

2 22 3 3 1

1 22 3

12 23

5\V 3U]\NáDGRZD ILJXUD L SLNVHOH MHM

konturu z zaznaczonymipikselami powtarzalnymi.&\IU\ ZVND]XM ZDUXQHN

definicji, z którego wynikaSRZWDU]DOQRü SLNVHOD NRQWXUX

2 - piksel figury

- piksel konturu

- piksel powtarzalny konturu

1 1 11 2 2 1

1 2 3 3 2 11 2 3 2 3 2 11 2 2 1 2 3 2 1

1 2 2 1 1 2 2 11 2 1 1 2 2 1

1 2 2 1 1 2 2 11 2 2 1 1 2 1

1 2 3 3 2 1 1 1 1 2 3 2 1

5\V 3U]\NáDGRZD ILJXUD L HIHNW MHM

FLHQLHQLD V]NLHOHW MDNR ]ELyU

otrzymany w wyniku cyklicznegoodrzucania punktów konturu nieEGF\FK SXQNWDPL SRZWDU]DO

nymi (wg definicji szkieletu) –procedura DefThinning. CyfryZVND]XM HWDS\ SRGF]DV NWyU\FK

GDQ\ SLNVHO QDOH*\ GR NRQWXUX

1 2 3 2 2 2 2 2 2 2 3 2 11 2 2 1 1 1 1 1 1 1 2 2 1

1 2 2 1 1 2 1- piksele figury

1 2 2 1 1 2 2 11 1 1 1 1 1

- piksele szkieletu

3 4 13 5 4 1

3 4 7 5 4 13 4 6 6 6 5 13 5 2 2 3 5 4 1

3 4 2 1 2 3 5 13 5 1 3 5 4 1

3 4 5 1 2 3 5 13 7 5 1 3 5 1

3 4 7 5 4 4 4 4 4 4 5 4 1

5\V 3U]\NáDGRZD ILJXUD L HIHNW MHM

FLHQLHQLD V]NLHOHW MDNR ]ELyU

otrzymany w wyniku wykonaniaDOJRU\WPX NODV\F]QHJR FLHQLDQLD

D ZLF QLH ZJ GHILQLFML V]NLHOHWX

– procedura Thinning. CyfryZVND]XM NROHMQRü DQDOL]\

pikseli jako konturu.

3 7 6 6 6 6 6 6 6 6 6 5 13 5 2 2 2 2 2 2 2 2 3 5 1

3 4 5 1 3 5 1- piksele figury

3 5 2 1 2 3 4 12 2 1 2 2 1

- piksele szkieletu

54

Filtracja

• Filtry liniowe - RSLV\ZDQH PDFLHU]DPL RNUHODMF\PL ZSá\Z SLNVHOD L MHJR

VVLDGyZ QD QRZ ZDUWRü F]\OL NRORU SLNVHOD

• )LOWU\ GROQRSU]HSXVWRZH ± XVXZDQLH V]F]HJyáyZ UR]P\ZDQLH REUD]X

H I H I H I H IG 1 1 1 G G 1 1 1 G G 1 2 1 G G 1 1 1 G

• G 1 1 1 G G 1 2 1 G G 2 4 2 G G 1 0 1 GG 1 1 1 G G 1 1 1 G G 1 2 1 G G 1 1 1 GJ K J K J K J K

• Filtry górnoprzepustowe – w\NU\ZDQLH NUDZG]L Z\RVWU]DQLH REUD]X

H I H I G 0 0 0 G G 0 0 0 G

• gradient Robertsa G -1 0 0 G G 0 0 -1 G G 0 1 0 G G 0 1 0 G J K J K H I H I G -1 -1 -1 G G -1 0 1 G

• maska Prewitta G 0 0 0 G G -1 0 1 G G 1 1 1 G G -1 0 1 G J K J K H I H I H I G -1 -2 -1 G G -1 0 1 G G -2 -1 0 G

• maska Sobela G 0 0 0 G G -2 0 2 G G -1 0 1 G G 1 2 1 G G -1 0 1 G G 0 1 2 G J K J K J K H I H I H I G -1 -1 1 G G -1 1 1 G G -5 -5 3 G

• wykrywanie G -1 -2 1 G G -1 -2 1 G G -5 0 3 GQDUR*QLNyZ G 1 1 1 G G -1 1 1 G G 3 3 3 G

J K J K J K H I H I H I G 0 -1 0 G G -1 -1 -1 G G 1 -2 1 G

• laplasjan G -1 4 -1 G G -1 8 -1 G G -2 4 -2 G G 0 -1 0 G G -1 -1 -1 G G 1 -2 1 G J K J K J K

• Filtry nieliniowe• NRPELQRZDQH Z\NU\ZDMFH NUDZG]LH

(np. pierwiastek sumy kwadratów pionowej i poziomej maski Prewitta)• medianowy, maksymalny, minimalny• operacje logiczne• adaptacyjne

3U]HNV]WDáFHQLD PRUIRORJLF]QH

• (UR]MD ± RGU]XFHQLH SLNVHOL ]ELRUX VVLDGXMF\FK ] SLNVHODPL spoza zbioru.• '\ODWDFMD ± GRGDQLH SLNVHOL VSR]D ]ELRUX VVLDGXMDF\FK ] SLNVHODPL ]ELRUX

Page 28: Grafika Komputerowa(1)

55

3U]HNV]WDáFHQLD Z SU]HVWU]HQL GZXZ\PLDURZHM

• 8NáDG\ ZVSyáU]GQ\FK

• GZXZ\PLDURZH NDUWH]MDVNL x,y i biegunowy r3

y

x X

Y

y

xX

Y

r

ϕ

r

ϕx r

y r

= cos

= sin

*

* ϕϕ

5\V 3UDZRVNUWQ\ L OHZRVNUWQ\ GZXZ\PLDURZ\ XNáDG ZVSyáU]GQ\FK

• 3RGVWDZRZH SU]HNV]WDáFHQLD OLQLRZH Z SU]HVWU]HQL

dwuwymiarowej:

• SU]HVXQLFLH WUDQVODFMD R ZHNWRU b: p' = I * p + b

gdzie

=10

01I

• REUyW ZRNyá SXQNWX q R NW 3 p' = D * p + (I - D) * q

gdzie

ϕϕϕ−ϕ

=cossin

sincosD

• MHGQRNáDGQRü R VNDOL k Z]JOGHP SXQNWX q: p' = k * I * p + (1 - k) * q

• V\PHWULD URGNRZD Z]JOGHP SXQNWX q: p' = -I * p + 2 * q

• V\PHWULD RVLRZD Z]JOGHP SURVWHM q1, q2: p' = G * p + h

−−−−−−−−−−

−+−=

212

21212*12*

12*12*2

122

122

122

12 )()()()(2

)()(2)()(

)()(

1

xxyyyyxx

yyxxyyxx

yyxxG ,

=

=

−−−

−+−−

=2

22

1

11

12

12

212

212

2*11*2* , czymprzy ,

)(

)()(

)(2

y

x

y

x

xx

yy

yyxx

yxyxqqh ;

dla osi x=a:

=

−=

0

2 ,

10

01 * ahG ; dla osi y=b:

=

=b*2

0 ,

10

01hG

=

=y

x

y

xpp ,

'

''

56

3U]HNV]WDáFHQLD Z SU]HVWU]HQL WUyMZ\PLDURZHM

• 8NáDG\ ZVSyáU]GQ\FK

• WUyMZ\PLDURZH NDUWH]MDVNL x,y,z; sferyczny R3, L F\OLQGU\F]Q\ r3z.

y

x

X

Y

y

xX

Y

rϕ r ϕ

x r

y r

= cos

= sin

*

* ϕϕ

Z

Θ R Θ R

Z

z z

x R = cos sin * ϕy R = sin sin * ϕz R = cos * Θ

ΘΘ

*

*

5\V 3UDZRVNUWQ\ L OHZRVNUWQ\ WUyMZ\PLDURZ\ XNáDG ZVSyáU]GQ\FK

• 3RGVWDZRZH SU]HNV]WDáFHQLD OLQLRZH Z SU]HVWU]HQL WUyMZ\PLDURZHM

• SU]HVXQLFLH WUDQVODFMD R ZHNWRU b: p' = I * p + b

gdzie

=

100

010

001

I

=

=

z

y

x

z

y

x

pp ,

'

'

'

'

• REUyW ZRNyá SXQNWX q: p' = D * p + (I - D) * q

gdzie

=

zzzyzx

yzyyyx

xzxyxx

ddd

ddd

ddd

D

• MHGQRNáDGQRü R VNDOL k Z]JOGHP SXQNWX q: p' = k * I * p + (1 - k) * q

• U]XW RUWRJRQDOQ\ QD SáDV]F]\]Q z=a: p' = F * p + h

gdzie

=

=

a

0

0

,

000

010

001

hF

=

0

0

0

z

y

x

q

• 3U]\NáDG SU]HNV]WDáFHQLD QLHOLQLRZHJR Z SU]HVWU]HQL WUyMZ\PLDURZHM

• rzut perspektywiczny z punktu qQD SáDV]F]\]Q z=a:

przy czym: duv FRV .uv ,.uv NW SRPLG]\ REUD]HP RVL u L RVL v

hqqpFp +

+−

−−

= )(' *

0

0*

zz

az

Page 29: Grafika Komputerowa(1)

57

3RáR*HQLH RELHNWyZ JHRPHWU\F]Q\FK Z]JOGHP VLHELH

• Fij(x,y) := (yi-yj)*x - (xi-xj)*y + xi*yj - xj*yi, Pk := (xk,yk).

• UyZQDQLH SURVWHM SU]HFKRG]FHM SU]H] SXQNW\ P1, P2: F12(x,y) = 0.

• GOD SXQNWyZ SR SUDZHM VWURQLH SURVWHM SDWU]F ] SXQNWX P1 Z VWURQ SXQNWX

P2): F12(x,y) < 0, dla punktów po lewej stronie: F12(x,y) > 0.

• UyZQDQLH SURVWHM SURVWRSDGáHM SU]HFKRG]FHM SU]H] SXQNW P0:(x1-x2)*x + (y1-y2)*y - (x1-x2)*x0 - (y1-y2)*y0 = 0.

• dwa odcinki P1P2 i P3P4 SU]HFLQDM VL ⇔sgn(F12(x3,y3)) ≠ sgn(F12(x4,y4)) & sgn(F34(x1,y1)) ≠ sgn(F34(x2,y2)).

• SRáR*HQLH SXQNWX Q = (x,y Z]JOGHP ZLHORNWD

• SURVWRNW R ERNDFK UyZQROHJá\FK GR RVL xmin≤x≤xmax & ymin≤y≤ymax.

• ZLHORNW Z\SXNá\ R ZLHU]FKRáNDFK XSRU]GNRZDQ\FK ]JRGQLH ] UXFKHP

wskazówek zegara P1, P2,... Pn: ∀i∈1,2,..n Fi(i mod n + 1)(x,y) < 0.

• ZLHORNW GRZROQ\ R ZLHU]FKRáNDFK XSRU]GNRZanych zgodnie z ruchemwskazówek zegara P1, P2,... Pn:• SRG]LDá QD ZLHORNW\ Z\SXNáH

• NRQWUROD SDU]\VWRFL OLF]E\ SU]HFLü GRZROQHM SyáSURVWHM Z\FKRG]FHM

z punktu Q ] ERNDPL ZLHORNWD

• REOLF]HQLH VXP\ NWyZ σ := ∑i=1..n ∠PiQP(i mod n + 1) (σ = 360° ⇔ Q QDOH*\ GR ZLHORNWD σ = 0° ⇔ Q QLH QDOH*\ GR ZLHORNWD

• SRáR*HQLH RGFLQND Q1Q2 Z]JOGHP ZLHORNWD

• SURVWRNW R ERNDFK UyZQROHJá\FK GR RVL

• ZLHORNW Z\SXNá\ FR QDMZ\*HM GZD SU]HFLFLD ] ERNDPL ZLHORNWD

• SRáR*HQLH ZLHORNWD Z]JOGHP LQQHJR ZLHORNWD F]ü ZVSyOQD

Definicja:• Punkt P=(xp,yp) SU]HVáDQLD RGFLQHN SURVW l MHOL SyáSURVWD SR]LRPD

Z\FKRG]FD ] P Z OHZ VWURQ W]Q y = yp, x < xp) przetnie l.

Definicja:• Odcinek a SU]HVáDQLD odcinek b MHOL FR QDMPQLHM MHGHQ ] SXQNWyZ RGFLQND

a SU]HVáDQLD RGFLQHN b L RED RGFLQNL VL QLH SU]HFLQDM

x

P

P'

l ab

c

y y

x

Rys. IlustracjadefinicjiSU]HVáDQLDQLD

58

Obrazy trójwymiarowe

• 5HSUH]HQWDFMD RELHNWyZ JUDILF]Q\FK EU\á L ILJXU

• DQDOLW\F]QD UyZQRFL QLHUyZQRFL QS ≤x≤2 &0≤y≤2 & 0≤z≤2 ∨ 0≤x≤1 & 0≤y≤1 & 2≤z≤3.

• szkieletowD EU\áD ZLHORFLDQ ILJXUD ZLHORNW

QS ZLHU]FKRáNL $ % &

D(2,0,0), E(1,1,2), F(0,1,2), G(0,2,2), H(2,2,2), I(2,0,2), J(1,0,2),. / 0 1 FLDQ\ $'&% &',+ %&+*

EFGHIJ, EJNM, EMLF, KLMN, ABGFLK, AKNJID.• konstruktywna (ang. constructive solid geometry) (obiekty elementarne +

RSHUDFMH VNáDGDQLD QS SU]HVNDORZDQ\ R MHGQRNáDGQRü V]HFLDQ

jednostkowy (tzn. 0≤x≤1 & 0≤y≤1 & 0≤z≤1) ∪ SU]HVXQLW\ WUDQVODFMD

R ZHNWRU V]HFLDQ MHGQRVWNRZ\

• ]D SRPRF GU]HZD yVHPNRZHJR EU\á\ OXE

czwórkowego (figury); np. dla 0≤x≤4 & 0≤y≤4& 0≤z≤4: (0,0,0,0,(0,0,0,0,0,0,1,0),0,1,0).

• :LGRF]QRü FLDQ SRZLHU]FKQLH ]DVáRQLWH

• DOJRU\WP\ RSHUXMFH QD SU]HVWU]HQL GDQ\FK

• analiza zwrotów wektorów normalnych dla wieORFLDQX Z\SXNáHJR

• NRQWUROD XSRU]GNRZDQLD ZLHU]FKRáNyZ GOD ZLHORFLDQX Z\SXNáHJR

• algorytm Ricciego;• algorytm Appela;

• DOJRU\WP\ RSHUXMFH QD SU]HVWU]HQL REUD]X

• DOJRU\WP GOD SRZLHU]FKQL ]DGDQHM IXQNFM GZyFK ]PLHQQ\FK

• DOJRU\WP ] EXIRUHP JáERNRFL

• DOJRU\WP SU]HJOGDQLD OLQLDPL SR]LRP\PL

5\V 3U]HJOGDQLH U]XWyZ FLDQ OLQLDPL

poziomymi.

• DOJRU\WP ] X*\FLHP GU]HZD F]ZyUNRZHJR ÄG]LHO L ]Z\FL*DM´

a) b) c) d)5\V 0R*OLZH SRáR*HQLD U]XWX FLDQ\ Z]JOGHP SURVWRNWQHJR NDGUX

x y

z

a) b) c)

5\V 3U]HVáDQLDQLH

FLDQ QLH MHVW

UHODFM SU]HFKR

GQL D E DQL

DQW\V\PHWU\F]Q

(c).

Page 30: Grafika Komputerowa(1)

59

(OLPLQDFMD SRZLHU]FKQL ]DVáRQLW\FK ] X*\FLHP GU]HZD F]ZyUNRZHJR

a) b) c) d)5\V 0R*OLZH SRáR*HQLD SURVWRNWQHJR NDGUX Z]JOGHP U]XWX FLDQ\

• =DáR*HQLD

• FLDQ\ SRVRUWRZDQH RG QDMEOL*V]HM GR QDMGDOV]HM Z WDEOLF\ face:

const n ^ PDNV\PDOQD OLF]ED FLDQ `

type SRO\JRQV ^ RSLV NV]WDáWX FLDQ\ `

type faces = array [1..n] of record colour:integer; polygon:polygons end;var background LQWHJHU ^ NRORU WáD `

var face: faces;

• 7\S Z\OLF]HQLRZ\ PR*OLZH SRáR*HQLD NDGUX Z]JOGHP U]XWX FLDQ\

type location = (outside a, inside b, other c,d);

• FunkcMD VSUDZG]DMFD SRáR*HQLH NDGUX Z]JOGHP U]XWX FLDQ\

function Position(x1,y1,x2,y2: integer; var polygon: polygons): location;

• 3URFHGXUD Z\SHáQLDMFD NDGU GDQ\P NRORUHP

procedure Rectangle(x1, y1, x2, y2, colour: integer);

• 3URFHGXUD HOLPLQDFML SRZLHU]FKQL ]DVáRQLW\FK

procedure HiddenFace(x1, y1, x2, y2, first, last: integer; var face: faces);var x, y, i: integer;begin

if first < 1 then first := 1; if last > n then last := n;for i := first to last do

case Position(x1, y1, x2, y2, face[i].polygon) ofoutside: begin nic nie rób end;inside: begin kadr w kolorze iWHM FLDQ\ `

Rectangle(x1, y1, x2, y2, face[i].colour);exit procedure

end;other: begin ^ GDOV]\ SRG]LDá `

x := (x1+x2) div 2; y := (y1+y2) div 2;HiddenFace(x1, y1, x, y, i, last, face);HiddenFace(x1, y+1, x, y2, i, last, face);HiddenFace(x+1, y1, x2, y, i, last, face);HiddenFace(x+1, y+1, x2, y2, i, last, face);exit procedure

endend; case

Rectangle(x1, y1, x2, y2, background)end; procedure

60

Wyznaczanie cieni Rys. Wyznaczanie cieni.

• dwukrotnerozstrzyganieproblemu]DVáDQLDQLD

0RGHORZDQLH RZLHWOHQLD

• (UyGáD ZLDWáD SXQNWRZH OLQLRZH SRZLHU]FKQLRZH

• odbicia: Io QDW*HQLH RZLHWOHQLD >O[@

Rys. Zjawisko odbicia.n - wersor normalny do powierzchnil - wersor kierunku padania promieniz - wersor kierunku odbicia zwierciadlanegoe ZHUVRU NLHUXQNX SRáR*HQLD REVHUZDWRUD

• rozproszone: kr*Io*FRV3 kr*Io*(n°l)• zwierciadlane: kz*Io*cosm. kz*Io*(z°e)m m∈[1,200]

• WáR RZLHWOHQLRZH kt*Io• FDáNRZLWH QDW*HQLH ZLDWáD RGELMDQHJR

I = (kt + kr*(n°l) + kz*(z°e)m) * Io,Eo ZLDWáRü *UyGáD ZLDWáD >FG@r RGOHJáRü RG (UyGáD ZLDWáD

&LHQLRZDQLH SRZLHU]FKQL EU\á ZLHORFLHQQ\FK

• brak cieniowania VWDáD LQWHQV\ZQRü RZLHWOHQLD FLDQ\HIHNW 0DFKD VNRNL RZLHWOHQLD QD NUDZG]LDFK

• metoda Gourauda LQWHUSRODFMD ZDUWRFL QDW*HQLD ZLDWáD RGELWHJR• Z ZLHU]FKRáNDFK ZLHORFLDQX ZHUVRU QRUPDOQ\ MHVW UHGQL

DU\WPHW\F]Q ZHUVRUyZ QRUPDOQ\FK FLDQ ]DZLHUDMF\FK ZLHU]FKRáHN

• QD NUDZG]LDFK OLQLRZD LQWHUSRODFMD QDW*HQLD QD SRGVWDZLH MHJR

ZDUWRFL Z ZLHU]FKRáNDFK EGF\FK NUDFDPL GDQHM NUDZG]L

• ZHZQWU] FLDQ\ OLQLRZD LQWHUSRODFMD QDW*HQLD QD SRGVWDZLH MHJR

ZDUWRFL Z QDMEOL*V]\FK ] ND*GHM VWURQ\ SXQNWDFK NUDZG]L OH*F\FK QD

tej samej linii poziomej co dany punkt.• metoda Phonga - interpolacja wersorów normalnych;

• Z ZLHU]FKRáNDFK ZLHORFLDQX ZHUVRU QRUPDOQ\ MHVW UHGQL

DU\WPHW\F]Q ZHUVRUyZ QRUPDOQ\FK FLDQ ]DZLHUDMF\FK ZLHU]FKRáHN

• QD NUDZG]LDFK OLQLRZD LQWHUSRODFMD ZHUVRUyZ QRUPDOQ\Fh naSRGVWDZLH W\FK*H Z ZLHU]FKRáNDFK EGF\FK NUDFDPL GDQHM NUDZG]L

• ZHZQWU] FLDQ\ OLQLRZD LQWHUSRODFMD ZHUVRUyZ QRUPDOQ\FK QD

SRGVWDZLH W\FK*H Z QDMEOL*V]\FK ] ND*GHM VWURQ\ SXQNWDFK NUDZG]L

OH*F\FK QD WHM VDPHM OLQLL SR]LRPHM FR GDQ\ SXQNW

• OHG]HQLH SURPLHQL RGWZRU]HQLH GURJL ZV]\VWNLFK SURPLHQL ZLHWOQ\FK

SDGDMF\FK QD GDQ\ SLNVHO

ekran

(UyGáRZLDWáD

e

zn

l

α ϕ ϕ

gdzie 2o

or

EI =

Page 31: Grafika Komputerowa(1)

61

Modelowanie krzywych i powierzchni

Modelowanie krzywych:

• krzywe Béziera:pi - punkty kontrolne.

• ZáDVQRFL NU]\ZHM

• NUDFH Z SXQNWDFK p0, pn: p0,n(0) = p0, p0,n(1) = pn.• styczna w punkcie p0 do odcinka p0p1: p'0,n(0) = n*(p1-p0).• styczna w punkcie pn do odcinka pn-1pn: p'0,n(1) = n*(pn-pn-1).• mieFL VL Z XZ\SXNOHQLX SXQNWyZ NRQWUROQ\FK

• VSHáQLD ]DOH*QRü p0,n(t) = (1-t)*p0,n-1(t) + t*p1,n(t).

).(f)(b ,1..0dla )(f)(f)(b

,..1dla , ,..0dla 0

,..1dla )1(1

)(f ,1)(f

,..0dla )(b)(f ,0

)(f)(

,..0dla )1()(b ,0

)(b)(

:)(f Fergusonai )(bteina iany Berns wielom

,,1,,,

100

***,0,

,,*,,0

**,*,,0

,,

ttnittt

ninii

k

nin

ik

ktikik

k

k

ntt

nin

iktt

n

itt

niintiti

nt

n

itt

tt

nnnnininin

iiiki

inn

kniniinn

iniinn

inin

=−=−=

=−====

=

==

+−

−−

==

==

==

=

=−−

==

=

+

∑∑

ppqpqqp

qp

pp

• wyznaczanie punktów krzywej:• algorytm de Casteljau:

for i := 0 to n do ri := pi;for j := 1 to n do

for i := 0 to n-j do ri := ri + t * (ri+1 - ri);p0,n(t) := r0.

• algorytm Hornera: (t < 0,5)

l := 1; k := 1;c := t / (1-t); s := pn;for i := 1 to n do

begin l := l*(1-t); k := k*(n-i+1)/i; s := c * s + k * pn-i end;p0,n(t) := l * s.

• algorytm Hornera: (t > 0,5)

l := 1; k := 1;c := (1-t) / t; s := p0;for i := 1 to n do

begin l := l*t; k := k*(n-i+1)/i; s := c * s + k * pi end;p0,n(t) := l * s.

]1,0[dla 0

)1()( ***,0 ∈=

−−

= ∑ t

n

i

intiti

nt in pp ,

p0,n(t) = (1-t)*p0,n-1(t) + t*p1,n(t)

∑=

−=n

i

i

t

t

i

nntt in

0 1)1()( ***,0 pp

∑=

= −

n

i

i

t

t

i

nntt inn

0

1)( ***,0 pp

62

• NU]\ZH VNOHMDQH NU]\ZH JLWH DQJ splines)

• funkcja sklejana IXQNFMD JLWD VWRSQLD p MHVW WR IXQNFMD SRNU\ZDMFD

VL SU]HG]LDáDPL ] Uy*Q\PL ZLHORPLDQDPL VWRSQLD p, przy czym funkcjata, jak i jej p SLHUZV]\FK SRFKRGQ\FK V FLJáH

• funkcje B-sklejane m≤n, t0≤ t1≤...≤ tm≤...≤ tn≤ tn+1≤...≤ tn+m+1

mk

kmnitik

itikt

tikttikitikt

itttik

mniitittititt

ti

..0

..0 ),(1,1n

11

1)(,1n)(,n

..0 ],1,[dla 0

],1,[dla 1)(,0n

**=

=+−

+−++

−+++−−+

−=

+=

+∉+∈

=

−+

• funkcje B-sklejane nm,i (i=0..n)VWDQRZL ED] GOD IXQNFML

sklejanych stopnia mRNUHORQ\FK Z SU]HG]LDOH

[tm, tn+1] i „sklejanych” dlaZDUWRFL SDUDPHWUyZ tm+1,.., tn:

• ZáDVQRFL

• RJUDQLF]RQ\ L ]ZDUW\ QRQLN

• ZDUWRFL QLHXMHPQH

• unormowanie:

• krzywe sklejanekrzywe opisane parametrycznie funkcjami sklejanymi, przy czymÄVNOHMHQLD´ ZLHORPLDQyZ QDVWSXM GOD W\FK VDP\FK ZDUWRFL SDUDPHWUX

• krzywe B-sklejane: q pp

( ) n ( )[ , ],

, *t tt t t

m i ii

nm n

i=

=

+∑0

1, - punkty kontrolne.

• zmiana punktu pi RGNV]WDáFD NU]\Z ORNDOQLH W\ONR GOD t∈[ti, ti+m+1].

• wyznaczanie punktów krzywej:• algorytm de Boora-Coxa dla t∈(tk, tk+1):

for i := 0 to m do ri := pk-m+i;for j := 1 to m do

for i := 0 to m-j do ri := ri + (t-ti+j)/(ti+m+1-ti+j) * (ri+1 - ri);q(t) := r0.

q( ) n ( ).

n ( ) [ , ],

n ( ) ,

n ( ) [ , ].

* ,

,

,

,

t a t

t t t t

t t

t t t t

i m ii

n

m i i i m

m i

m ii

n

m n

=

= ∉

= ∈

=

+ +

=+

0

1

01

0

0

1

dla

dla dowolnego

dla

q p p( ) n ( ) n ( ) ( , ), * , *t t t t t tm i ii

n

m i ii k m

k

k k= = ∈= = −

+∑ ∑0

1 dla