LebiedAo Jacek Grafika Komputerowa (2)


GRAFIKA, PRZETWARZANIE I ROZPOZNAWANIE OBRAZÓW

-DFHN /HELHG(

Przetwarzanie obrazów

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

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

Obraz





Katedra Technik Programowania


Rys. 6FKHPDW LOXVWUXMF\

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

Grafika

Rozpoznawanie obrazów

Z]DMHPQH ]DOH*QRFL

PL G]\ JUDILN

przetwarzaniem

Opis

obrazów i

rozpoznawaniem

obrazów.





GRAFIKA KOMPUTEROWA


ó .RPXQLNDFMD ] F]ĄRZLHNLHP

ó Obrazowanie schematów

ó 3UH]HQWRZDQLH ]HVWDZLH





GRAFIKA KOMPUTEROWA


ó 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

LITERATURA:

PRZETWARZANIE OBRAZÓW

1. R. A. Earnshaw (ed.): Fundamental Algorithms for Computer

ó Dyskretyzacja obrazów

Graphics. Springer, Berlin 1985.

ó Polepszanie jakoFL REUD]yZ

2. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes, R. L. Phillips:

ó Urealnianie obrazów

Wprowadzenie do grafiki komputerowej. WNT, Warszawa 1995.

ó Rekonstrukcja obrazów

3. J. D. Foley, A. van Dam, S. K. Feiner, J. F. Hughes: Computer Graphics:

ó Kompresja obrazów

Principles and Practice, Second Edition. Addison-Wesley, Reading 1990.

ó :\RGU EQLDQLH RELHNWyZ

4. G. Hégron: Synthèse d’image: algorithmes élémentaires. Dunod

ó 8SUDV]F]DQLH NV]WDĄWyZ

informatique, Paris 1985.

5. M. Jankowski: Elementy grafiki komputerowej. WNT, Warszawa 1990.

ROZPOZNAWANIE OBRAZÓW

6. T. Pavlidis: Grafika i przetwarzanie obrazów. WNT, Warszawa 1987.

ó Opis obiektów

7. J. Zabrodzki (red.): Grafika komputerowa, metody i narz dzia. WNT,

ó Klasyfikacja obiektów

Warszawa 1994.

ó Porównywanie obrazów

Gdask 2000

ó Analiza struktury

2

BARWA (KOLOR)

SPOSOBY PREZENTACJI OBRAZÓW W GRAFICE KOMPUTEROWEJ:

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

ó





GRAFIKA RASTROWA


3ĄDV]F]\]QD REUD]X MHVW SRG]LHORQD QD SURVWRNWQH HOHPHQW\ W]Z SLNVHOH

ó

Dwa rodzaje receptorów w ludzkim oku:

Tworzenie obrazu polega na wyznaczeniu kolorów poszczególnych pikseli

ó

SU FLNL UHDJXM MX* SU]\ QLVNLP SR]LRPLH RZLHWOHQLD EUDN ZUD*H

i naniesieniu tych kolorów w odpowiednich miejscach poleceniem write(c).

barwnych - widzenie skotopowe (nocne);

SU]\NĄDG\ XU]G]H GUXNDUND LJĄRZD VNDQHU

ó

czopki UHDJXM GRSLHUR SU]\ Z\*V]\P SR]LRPLH RZLHWOHQLD ZUD*HQLH

barwy - widzenie fotopowe (dzienne).

Sposoby reprezentacji obrazów:

ó

tablice (mapy bitowe)

type Image = array [0..mx,0..my] of Color

ó

Teoria Younga - Helmholtza Z\MDQLDMFD PHFKDQL]P SRZVWDZDQLD

ó

drzewa czwórkowe

ZUD*HQLD EDUZ\ =DNĄDGD RQD Z\VW SRZDQLH Z F]RSNDFK WU]HFK VXEVWDQFML

ó

drzewa binarne

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

Kompresja:

ó

QLHELHVN F]XĄRź β(),

ó

metody bez utraty informacji:

ó

]LHORQ F]XĄRź ł(),

ó

PHWRG\ NRGyZ ]PLHQQHM GĄXJRFL +XIIPDQ

ó

SRPDUDF]RZRF]HUZRQ F]XĄRź ρ().

ó

metody arytmetyczne

ó

PHWRG\ VĄRZQLNRZH /HPSHO=LY:HOFK /=:

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

ó

bezstratne metody kompresji danych graficznych,

VXEVWDQFML 6XPD SREXG]H GHWHUPLQXMH RGELHUDQ MDVQRź

QS NRGRZDQLH GĄXJRFL VHNZHQFML DQJ run length encoding RLE)

ó

PHWRG\ ] XWUDW LQIRUPDFML

ó

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]H

ó

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

WU]HFK VXEVWDQFML ZLDWĄRF]XĄ\FK Z F]RSNDFK

ó

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

ó

metody fraktalne

ó

Modele syntezy barw:

Formy danych obrazowych:

ó

model RGB ang. red + green + blue - czerwony + zielony + niebieski,

ó

obrazy kolorowe

type Color = record red, green, blue: integer end

synteza addytywna, stosowany w monitorach kolorowych;

ó

obrazy szare (wielopoziomowe)

type Color = integer

ó

modele CMY i CMYK ang. cyan + magenta + yellow (+ black) -

ó

REUD]\ F]DUQRELDĄH GZXSR]LRPRZH

type Color = Boolean

]LHORQRQLHELHVNL NDUPD]\QRZ\ *yĄW\ F]DUQ\

synteza subtraktywna, stosowane w poligrafii;

ó





GRAFIKA WEKTOROWA


2EUD] VNĄDGD VL ] WDNLFK RELHNWyZ MDN RGFLQHN OXE SXQNW

ó

modele YUV, YIQ i YCbCr - luminancja + dwie chrominancje,

VWRVRZDQH Z WHOHZL]ML NRORURZHM ]JRGQH ] WHOHZL]M F]DUQRELDĄ

Tworzenie obrazu polega na narysowaniu poszczególnych obiektów

VNĄDGRZ\FK SROHFHQLDPL plot(x,y,c), vector(x 1 ,y 1 ,x 2 ,y 2 ,c).

ó

modele HSV i HLS ang. hue + saturation + value ( lightness) -

SU]\NĄDG\ XU]G]H SORWHU WDEOHW

RGFLH QDV\FHQLH ZDUWRź MDVQRź RGFLH DQJ hue Z\UD*DQ\ NWHP

hue:

red

yellow

green

cyan

blue

magenta

Sposoby reprezentacji obrazów:

NW



60°

120°

180°

240°

300°

ó

zbiór linii

type Image = list of Line

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

ó

model CIE XYZ (franc. Commission Internationale de l'Eclairage),

Formy danych obrazowych:

PRGHO WHRUHW\F]Q\ DEVWUDNF\MQ\ XNĄDG EDUZ RGQLHVLHQLD ; < =

ó

REUD]\ VNĄDGDMFH VL ] OLQLL FLJĄ\FK

type Line = record x,y:integer; c:Color; chain: list of 0 .. 7 end

ó

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

ó

REUD]\ VNĄDGDMFH VL ] RGFLQNyZ

ó

model TekHVC - model teoretyczny opracowany w firmie Tektronix,

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

RGOHJĄRFL JHRPHWU\F]QH SURSRUFMRQDOQH GR Uy*QLF ZUD*H EDUZQ\FK

3

4





Metody kompresji danych graficznych


ó





Metody falkowe


:\NRU]\VW\ZDQH WX V GZD ILOWU\ MHGQRZ\PLDURZH ILOWU GROQRprzepustowy L

ó

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

i lustrzany do niego filtr górnoprzepustowy H.

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

+



|

+



|

+



|

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

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ów

ó

XWZRU]RQHJR FLJX L ]DNRGRZDQLX LFK PHWRG EH] XWUDW\ LQIRUPDFML





Metody transformat


H


2:1

Î +

i+1

Ś 3RG]LDĄ REUD]X QD EORNL Um m o rozmiarze m m (dla JPEG: m=8).



H

2:1

Ś Wykonanie zadanej transformacji T na poszczególnych blokach U



mm:

Î

L

2:1

i+1

Vm m= TUm m (dla JPEG: DCT).

Ii

Ś

|

Dokonanie kwantyzacji K wyników transformacji Vm m:

Î

H

2:1

i+1

Wm m= KVm m (dla JPEG: wi, j = [ vi, j / qi, j ], gdzie wi, j, vi, j, qi, j V

L

2:1

elementami macierzy Wm m, Vm m i Qm m, przy czym Qm m jest wiersze

L

2:1

Ii+1

]DGDQ PDFLHU] NZDQW\]DFML

kolumny

ó





Metody fraktalne


Ś Linearyzacja skwantowanych wyników transformacji Wm m (dla JPEG:

metoda ZIGZAG).

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

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

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

JPEG: metoda Huffmana).

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

Rys. KomprHVMD PHWRG WUDQVIRUPDW

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

VL PLDQHP LWHUDF\MQHJR XNĄDGX IXQNFML DQJ iterated function system).

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

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

= ND*G\P IUDNWDOHP PR*QD ]DWHP VNRMDU]\ź LWHUDF\MQ\ XNĄDG IXQNFML

Ś 2GWZRU]HQLH SU]\EOL*RQ\FK Z\QLków transformacji Vm m na podstawie

ó

PHWRG\ NROD*X ,)6 DQJ iterated function system)

skwantowanych wyników transformacji Wm m (dla JPEG:

NRGRZDQLH SRGRELHVWZ JHRPHWU\F]Q\FK NV]WDĄWyZ

vi, j = wi, j · qi, j, gdzie vi, j, wi, j, qi, j V HOHPHQWDPL PDFLHU]\ Vm m,

ó

PHWRG\ SDF]ĄRUNX 3,)6 DQJ partitioned iterated function system)

Wm m i Qm m, przy czym Qm m MHVW ]DVWRVRZDQ SRGF]DV NRPSUHVML

PDFLHU] NZDQW\]DFML

NRGRZDQLH SRGRELHVWZ Z G]LHG]LQLH NRORUyZ

Ś Wykonanie zadanej transformacji odwrotnej T-1 na poszczególnych

SU]\EOL*RQ\FK Z\QLNDFK WUDQVIRUPDFML Vm m: Um m= T-1 Vm m (dla JPEG: odwrotna DCT).

a)

b)

5\V 'HNRPSUHVMD PHWRG WUDQVIRUPDW

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

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

16

11

10

16

24

40

51

61

17

18

24

47

66

99

99

99

12

12

14

19

26

58

60

55

18

21

26

66

99

99

99

99

x' = 0.2· x – 0.26· y + 0

14

13

16

24

40

57

69

56

24

26

56

99

99

99

99

99

14

17

22

29

51

87

80

62

47

69

99

99

99

99

99

99

y' = 0.23· x + 0.22· y + 1.6

18

22

37

56

68

109 103

77

99

99

99

99

99

99

99

99

24

35

55

64

81

104 113

92

99

99

99

99

99

99

99

99

x' = – 0.15· x + 0.28· y + 0

49

64

78

87

103 121 120 101

99

99

99

99

99

99

99

99

y' = 0.26· x + 0.24· y + 0.44

72

92

95

98

112 100 103

99

99

99

99

99

99

99

99

99

Rys. Macierze kwantyzacji Q 88

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

dla luminancji i dla chrominancji.

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

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

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

5

6

Dyskretyzacja obrazów rzeczywistych





GEOMETRIA DYSKRETNA


QVVLDG EVVLDG QVVLDG

ó

Próbkowanie - wybór dyskretnej siatki (rastra) do przedstawienia obrazu.

piksela

piksela

piksela

ó

=DOH*QRź HIHNWyZ SUyENRZDQLD RG SRĄR*HQLD VLDWNL SUyENRZDQLD

P

P





P


ó

=PLDQD NV]WDĄWX REV]DUX SR SUyENRZDQLX

EVVLDG

EVVLDG

:DUXQHN ]JRGQRFL ]H VWDĄ ą GOD REV]DUX SRG]ELRUX SĄDV]F]\]Q\ "Ś

piksela

piksel P

piksela

i kwadratowej siatki próbkowania (rastra) o boku h:

P





P


Ł

5\V 6VLHG]L SLNVHOD

EVVLDG QVVLDG



P.

QVVLDG

k(Q , r



Fr

,





1


) ⊂ P ∈ k(Q r





1


)Łś

ŁŹ

Ł

piksela

piksela

piksela

∃ r > h

ą ∀P ∈Fr

"Ś ŁŹ

&

Ł ,

P

P





P


ŁŹ

Ł

Ł∃k(Q , r

2

) ⊂ "Ś′ P ∈Frk(Q , r

2



gdzie

'HILQLFMH VVLHG]WZD

ó

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

Fr "Ś - brzeg obszaru "Ś,

Fr "Ś = "Ś ∩ "Ś′ ,

wspólny bok.

"Ś GRPNQL FLH REV]DUX "Ś,

"Ś = "Ś ∪ Fr "Ś,

ó

1LHEH]SRUHGQLPL VVLDGDPL QVVLDGDPL V GZD SLNVHOH VW\NDMFH VL

"Ś′ GRSHĄQLHQLH REV]DUX "Ś,

"Ś′ = {P ∉ }

"Ś ,

]H VRE W\ONR QDUR*QLNDPL

ó

6VLDGDPL ]ZLHP\ ]DUyZQR EVVLDGyZ MDN L QVVLDGyZ

k( ,

Q r) NRĄR R URGNX Z SXQNFLH Q i o promieniu r.

Definicje linii:

Stwierdzenie 1:

ó

%GURJ MHVW FLJ SLNVHOL P1, P2, ..., P n WDNL *H ∀ k∈{1, 2, .., n-1} piksele

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

P k i P k+1 V EVVLDGDPL

ó

'URJ QGURJ MHVW FLJ SLNVHOL P

VSHĄQLDM ZDUXQHN ]JRGQRFL ]H VWDĄ

1, P2, ..., P n WDNL *H ∀ k∈{1, 2, .., n-1}

ą = 2 , wówczas próbkowanie

2

piksele P k i P k+1 V VVLDGDPL

ó

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

]DFKRZD WRSRORJL NV]WDĄW REV]DUX

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

ó

'URJ ]DPNQL W MHVW GURJD Z NWyUHM SLHUZV]\ SLNVHO FLJX VWDQRZLFHJR

Stwierdzenie 2:

GURJ MHVW VVLDGHP RVWDWQLHJR SLNVHOD WHJR FLJX

-HOL REV]DU "Ś

ó

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

i kwadratowa siatka próbkowania (raster) o boku h

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

VSHĄQLDM ZDUXQHN ]JRGQRFL ]H VWDĄ ą = 10 , wówczas próbkowanie

2

Definicje konturu:

]DFKRZD WRSRORJL NV]WDĄW ZQ WU]D REV]DUX D NRQWXU E G]LH VL VNĄDGDź

ó

B-konturem danego zbioru pikseli nazywamy zbiór wszystkich pikseli

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

] NU]\Z\FK ]DPNQL W\FK

QDOH*FHJR GR WHJR ]ELRUX

ó

Konturem (n-konturem) danego zbioru pikseli nazywamy zbiór

ZV]\VWNLFK SLNVHOL QDOH*F\FK GR WHJR ]ELRUX L PDMF\FK SU]\QDMPQLHM

ó

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

MHGQHJR EVVLDGD QLH QDOH*FHJR GR WHJR ]ELRUX

Z\PDJDQD MDNRź

dobra

UHGQLD

OLF]ED SR]LRPyZ MDVQRFL

256

64

'HILQLFMH VSyMQRFL

obrazy szare

8 b/piksel

6 b/piksel

ó

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

obrazy kolorowe

24 b/piksel

18 b/piksel

ó

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

: Z\QLNX NZDQWRZDQLD REUD]X PRJ SRMDZLź VL QLHSR*GDQH NUDZ G]LH

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

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

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

7

8

Krzywe dyskretne





Odcinek dyskretny


ó

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

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

'HILQLFMD GĄXJRFL NU]\ZHM

ó

,QQH VSRW\NDQH Z OLWHUDWXU]H RNUHOHQLD NU]\ZHM G\VNUH

ó

'ĄXJRFL NU]\ZHM QD]\ZDź E G]LHP\ SRPQLHMV]RQ R MHGHQ

tnej:

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

ó ]ELyU E GF\ MHGQRF]HQLH VZRLP NRQWXUHP

ó ]ELyU E GF\ GURJ SURVW

ó ]ELyU Z NWyU\P LVWQLHMH W\ONR MHGQD GURJD PL G]\ GRZROQ SDU SLNVHOL

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

a)

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

d)

VWDQRZLFHJR NU]\Z Z\VW SXM MDN QDMEDUG]LHM UyZQRPLHUQLH

5\V 'ZD Uy*QH RGFLQNL

b)



ĄF]FH WH VDPH GZD SXQNW\

6WZLHUG]HQLD R F] FL ZVSyOQHM GZyFK RGFLQNyZ

c)



ó

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

(0, 1, 2, ...).

Rys.

ó

&] ź ZVSyOQD RGFLQNyZ PR*H QLH E\ź VSyMQD

3U]\NĄDG\ UR]ELH*QRFL SU]\M WHM WX GHILQLFML NU]\ZHM ] LQQ\PL RNUHOHQLDPL

a) ]ELyU E GF\ VZRLP NRQWXUHP D QLH E GF\ NU]\Z

ó

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

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

w tym drugim odcinku.

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);

a)

b)

c)

E

d)

A

e)

ą

d) NU]\ZD QLH E GFD VZRLP NRQWXUHP FHQWUDOQ\ SLNVHO DQL GURJ SURVW Z

E

E

A

E

ą

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

A

E

A

E

A

E

A E

ą

A

E

A

E

A

E

A E

A E

Metody rysowania krzywych dyskretnych:

A E

A E

ą

ą

ą

ó

numeryczne

A E

ą

ą

A E

ą

ó

podstawowe, parametryczne.

E A

E A

E

A

ą

A

ó Z\QLNDM EH]SRUHGQLR ]H Z]RUyZ DQDOLW\F]QHJR y

E A

E

A

E

A

ą

A

= f( x) lub paramet-

rycznych x

E

A

E

A

A

E A

= x( t), y = y( t) wykorzystywanych w geometrii euklidesowej,

ó QDMF] FLHM Z\PDJDM REOLF]H ]PLHQQRSU]HFLQNRZ\FK

E

A

A

A

ą

ó VWRVRZDQH ]ZĄDV]F]D GOD "Z\UDILQRZDQ\FKŃU]\Z\FK QS %p]LHUD

A

A

A

E A

A

A

A

E A

ó

warunkowe

A

A

A

E

A

ó

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

A

A

A

A

ó Z\QLNDM EH]SRUHGQLR ] UyZQDQLD XZLNĄDQHJR F( x, y) = 0

stosowanego do opisu krzywej w geometrii euklidesowej,

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

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

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

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

ó

strukturalne

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

ó

ĄDFXFKRZH ]H ]PLHQQ GĄXJRFL VHULL DQJ run length slice).

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

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

G ZVSyOQD F] ź NU]\*XMF\FK VL RGFLQNyZ A i E nie jest spójna;

ó NRU]\VWDM MHG\QLH ] REOLF]H FDĄNRZLWROLF]ERZ\FK

e) odcinek E R NRFDFK OH*F\FK QD RGFLQNX A QLH ]DZLHUD VL Z QLP Z FDĄRFL

ó ]QDQH MHG\QLH GOD RGFLQNyZ L HZHQWXDOQLH RNU JyZ

9

10

Algorytmy rysowania odcinków:





Algorytm podstawowy


ó

numeryczne

ó

UyZQDQLH SURVWHM QD SĄDV]F]\(QLH

y = m * x + b

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

m ZVSyĄF]\QQLN NLHUXQNRZ\

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

b - wyraz wolny

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

ó

dwa przypadki:

ó

podstawowy

| | > 1

m

m =1

ó

Uy*QLFRZ\ DQJ DDA - Digital Differential Analyser)

ą

ó

warunkowe

| | < 1

m

| | < 1

m

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

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

5\V .W QDFK\OHQLD ą rysowanego

RGFLQND Z ]DOH*QRFL RG

ó

Bresenhama

ZVSyĄF]\QQLND NLHUXQNRZHJR m.

ó

SXQNWX URGNRZHJR DQJ midpoint)

| | > 1

m

m = -1

ó

porównawczy Jordana

ó

F]WHURNURNRZ\ Z RJyOQRFL ZLHlokrokowy) Gilla

ó

| m| > 1

zamiast równania y = m * x + b

ó

strukturalne

PR*HP\ UR]SDWU\ZDź UyZQDQLH x = m'

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

* y + b' ,

1

gdzie m' =

, b' = ł b , przy czym wówczas | m' | ń 1,

ó

Metzgera-Bronsa

m

m

ó

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

ZL F SU]\SDGHN WHQ VSURZDG]D VL GR GUXJLHJR SU]\SDGNX

y

y

ó

| m| ń 1

x

e

s

e x s, m =

ł , b = y s ł m* x s.

x e ł x

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

s

(ang. antialiasing):

ó

numeryczne – nie omawiane tutaj

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

ó

warunkowe

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

ó

z uprRV]F]RQ\P Z\JĄDG]DQLHP

dla | dx| Ą | dy| (czyli |m| ń 1):

ó

Wu

m := dy/dx

^]DĄ `

ó

VWUXNWXUDOQH QLH QDGDM VL

b := y- m* x;

inc := sgn( dx);

while x xe do

begin

Oznaczenia: ( x s , y s SRF]WHN RGFLQND

x e , y e) - koniec odcinka.

plot( x, y);

x := x+ inc;

y := round( m* x+ b)

end;

plot( xe, ye)

11

12

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

π

ó

=DĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

4

ó

dla | m|ń ]PLDQD ZVSyĄU] GQHM x o ą1 ł ]PLDQD ZVSyĄU] GQHM y o ą m.

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

ó

dla | m _! ]PLDQD ZVSyĄU] GQHM y o ą1 ł ]PLDQD ZVSyĄU] GQHM x o ą 1 .

VVLDGHP SRSU]HGQLHJR Z NLHUXQNX ł albo Î.

m

Rys. Kryterium wyboru

kolejnego piksela dla

d

odcinek

2

UR]ZD*DQHJR SU]\SDGNX

idealny

ó

d 1> d 2 ł rysowany

ą y m

=

d

górny piksel kandydat,

Rys. Dla | m|ń1 Zmiana

1

ó

d

ZVSyĄU] GQHM

1< d 2 ł rysowany

x o 1

dolny piksel kandydat,

ą x=1

SRZRGXMH ]PLDQ

ó

d

ZVSyĄU] GQHM

1= d 2 ł rysowany

y o m

ostatnio

dwa

dowolny z pikseli

narysowany

piksele

piksel

kandydaci

kandydatów.

ó

3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyĄU] GQH xi, yi.

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

:yZF]DV ZVSyĄU] GQH NROHMQHJR SLNVHOD Z\QLRV

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

przy wyborze dowolnego z pikseli kandydatów,

dla | dx| Ą | dy| (czyli |m| ń 1):

y

Łą i +1 przy wyborze górnego piksela kandydata,

z := y;

yi +1:= Ł y

Łł i

przy wyborze dolnego piksela kandydata.

inc := sgn( dx);

zinc := dy/| dx _

^]DĄ `

ó

Wynik porównania d

while x xe do

1> d 2 decyduje o wyborze kolejnego piksela

begin

do rysowania:

d 1 = y- yi = m*( xi+1)+ b- yi.

plot( x, y);

d 2 = ( yi+1)- y = ( yi+1)- m*( xi+1)- b.

x := x+ inc;

z := z+ zinc;

ó

=DPLDVW QLHUyZQRFL d 1> d 2 PR*QD UR]ZD*Dź ]QDN Uy*QLF\ d 1- d 2.

y := round( z)

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

end;

π

ó

3RQLHZD* U\VRZDQ\ RGFLQHN QDFK\ORQ\ MHVW GR RVL 0X SRG NWHP ą ∈ [0, ]

plot( xe, ye)

4

ZL F ą x = x e- x s ! VWG VJQ d 1- d 2) = sgn(ą x*( d 1- d 2)).

ó

Oznaczenie:

pi = ą x*( d 1- d 2) =

= 2*ą x* m*( xi+1)+2*ą x* b-2*ą x* yi-ą x =

b = y s- m* x s

= 2*ą x* m*( x

ą

i+1)+2*ą x* y s-2*ą x* m* x s-2*ą x* yi-ą x =

y = ą x* m

= 2*ą y*( xi+1)+2*ą x* y s-2*ą y* x s-2*ą x* yi-ą x.

:DUWRź pi jest zawsze ZDUWRFL FDĄNRZLW.

13

14

ó

d 1> d 2 " d 1- d 2>0 " pi>0 ł

wybór górnego piksela kandydata,

$OJRU\WP SXQNWX URGNRZHJR DQJ midpoint)

d

π

1< d 2 " d 1- d 2<0 " pi<0 ł

wybór dolnego piksela kandydata,

ó

=DĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

d 1= d 2 " d 1- d 2=0 " pi=0 ł

wybór dowolnego piksela kandydata,

4

w algorytmie przyj WR Z\EyU JyUQHJR

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

VVLDGHP SRSU]HGQLHJR Z NLHUXQNX ł albo Î.

ó

3RF]WNRZD ZDUWRź pi:

p 0 = 2*ą y*( x 0+1)+2*ą x* y s-2*ą y* x s-2*ą x* y 0-ą x =

x 0= x s, y 0= y s

= 2*ą y* x s+2*ą y+2*ą x* y s-2*ą y* x s-2*ą x* y s-ą x =

Rys. Kryterium wyboru kolejnego

odcinek

SLNVHOD GOD UR]ZD*DQHJR

= 2*ą y-ą x.

idealny

przypadku:

o wyborze kolejnego piksela

ó

Modyfikacja wartoFL pi:

GHF\GXMH ]QDN ZDUWRFL

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

xi+1- xi = 1

funkcji F( x, y)= a* x+ b* y+ c

= 2

Z SXQNFLH URGNRZ\P

*ą y-2*ą x*( yi+1- yi) =

yi+1- yi ∈ {0,1}

=

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

ostatnio

dwa

2

SRPL G]\ SLNVHODPL

* (

Łą

ą y ł ą x) JG\ p Ą 0 (

narysowany

piksele

i

yi +1 ł y = 1),

i

Ł

piksel

kandydaci

kandydatami.

2 * ą y

JG\ p < 0 (

Łł

i

yi +1 ł y = 0).

i

ó

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,

parametry procedury: x, y, xe, ye:integer; x := x

Łą +

s, y := y s, xe := x e, ye := y e.

y

1

przy wyborze górnego piksela kandydata,

y

i

:

Ł

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

1

y

Łł i

przy wyborze dolnego piksela kandydata.

dla dx Ą dy Ą 0:

p := 2* dy- dx;

ó

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

pinc := 2* dy;

ł c * ( y ł y )

V

H

ł c * ( x ł x )

H

V

pdec := 2*( dy- dx);

Dla dwóch punktów prostej: a =

, b =

.

x * y

H

V ł x * y

x * y

H

V ł x * y

while x xe do

V H

V H

begin

3U]\MPXMF c = x e* y s - x s* y e RWU]\PXMH VL a = y e - y s, b = -( x e - x s).

plot( x, y);

:DUWRFL a, b, c PR*QD ZL F WDN GREUDź E\ E\Ą\ FDĄNRZLWH.

x := x+1;

if p < 0 then p := p+ pinc

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

ó

3RQLHZD* SRF]WHN RGFLQND x s , y s) i jego koniec ( x e , y e OH* QD SURVWHM

end;

F( x, y ZL F

plot( xe, ye)

F( x 0, y 0) = F( x s, y s) = 0

oraz

F( x e, y e) = 0.

1

1

ó

Oznaczenie:

fi := [F( xi+1, yi+ )] = [ a*( xi+1) + b*( yi+ ) + c] =

2

2

b

b

= a* xi + b* yi + c + a + [ ] = F( xi, yi) + a + [ ].

2

2

:DUWRź fi jest zawsze ZDUWRFL FDĄNRZLW.

15

16

1

Algorytm porównawczy Jordana

ó

F( xi+1, yi+ ) > 0 ł fi Ą 0 ł wybór górnego piksela kandydata, 2

π

ó

ZaĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

1

2

F( xi+1, yi+ ) < 0 ł fi < 0 ł wybór dolnego piksela kandydata, 2

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

1

VVLDGHP SRSU]HGQLHJR Z NLHUXQNX Ź, ł albo Î.

F( xi+1, yi+ ) = 0 ł wybór dowolnego piksela kandydata,

2

przyj WR Z\EyU JyUQHJR JG\* ZWHG\ fi = 0.

odcinek

ó

3RF]WNRZD ZDUWRź f

idealny

i:

b

f 0 = F( x 0, y 0) + a + [ ] =

x 0= x s, y 0= y s

2

Rys. Kryterium wyboru

b

kolejnego piksela dla

= F( x s, y s) + a + [ ] =

F( x 0, y 0) = F( x s, y s) = 0

UR]ZD*DQHJR SU]\SDGNX

2

b

ostatnio

trzy

rysowany jest ten piksel,

= a + [

] .

narysowany

piksele

NWyUHJR URGHN OH*\

2

piksel

kandydaci

QDMEOL*HM RGFLQND LGHDOQHJR

ó

0RG\ILNDFMD ZDUWRFL f

ó

3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyĄU] GQH x

i:

i, yi.

:yZF]DV ZVSyĄU] GQH NROHMQHJR SLNVHOD PRJ Z\QLHź

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

= a

1.

x

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

xi+1- xi = 1

i+1:= xi +1

przy wyborze prawego piksela kandydata,

= a + b

y

*( yi+1- yi) =

yi+1- yi ∈ {0,1}

i+1:= yi

a

Łą b JG\ f

2.

x

i Ą 0 ( yi

y

+1 ł i = 1),

i+1:= xi

przy wyborze górnego piksela kandydata,

= Ł

y

a

JG\ f

Łł

i+1:= yi +1

i < 0 ( yi

y

+1 ł i = 0).

3.

xi+1:= xi +1

przy wyborze prawego górnego piksela kandydata.

yi+1:= yi +1

ó

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

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

ł c * ( y ł y )

V

H

ł c * ( x ł x )

H

V

Dla dwóch punktów prostej: a =

, b =

.

zmienne procedury: f, df, dx, dy:integer;

dx := xe- x; dy := ye- y;

x * y

H

V ł x * y

V H

x * y

H

V ł x * y

V H

dla dx Ą dy Ą 0:

PrzyjmujF c = - ( x e* y s - x s* y e RWU]\PXMH VL b = x e - x s, a = -( y e - y s).

df := dy- dx;

f := df+( dx div 2);

{ f := dy-(( dx+1) div 2);}

:DUWRFL a, b, c PR*QD ZL F WDN GREUDź E\ E\Ą\ FDĄNRZLWH.

while x xe do

begin

plot( x, y);

ó

Oznaczenia:

f := F( xi, yi),

F( x 0, y 0) = F( x s, y s) = 0,

x := x+1;

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

if f < 0 then f := f+ dy

f

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

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

end;

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

plot( xe, ye)

17

18

ó

| f 1|<| f 2| & | f 1|<| f 3| ł

wybór prawego piksela kandydata,

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

| f 2|<| f 1| & | f 2|<| f 3| ł

wybór górnego piksela kandydata,

| f 3|<| f 1| & | f 3|<| f 2| ł

wybór prawego górnego piksela kandydata,

ó

=DPLDVW MHGQHJR SLNVHOD Z\]QDF]DP\ RG UD]X ZL FHM QS F]WHU\

| f 1|<| f 2| & | f 1|=| f 3| ł

wybór prawego lub prawego górnego piksela,

1

ó

=DĄR*HQLH RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ (0, arctg ].

| f 2|<| f 1| & | f 2|=| f 3| ł

wybór górnego lub prawego górnego piksela,

4

Z DOJRU\WPLH SU]\M WR Z\EyU SUDZHJR JyUQHJR

'OD WDNLHJR NWD QDFK\OHQLD ą NROHMQH F]ZyUNL SLNVHOL PRJ SU]\MPRZDź

XZ]JO GQLDMF Z]DMHPQH VVLHG]WZR MDN L SRĄR*HQLH Z]JO GHP SLNVHOD

ó

3RQLHZD* f 2 Ą f 3 Ą f 1 ZL F

SRSU]HG]DMFHJR MHGQ ] SL FLX IRUP

| f 1|<| f 2| & | f 1|<| f 3| " | f 1|<| f 3| ł

wybór prawego piksela kandydata,

| f 2|<| f 1| & | f 2|<| f 3| " | f 2|<| f 3| ł

wybór górnego piksela kandydata,

Z SR]RVWDĄ\FK SU]\SDGNDFK Z\EyU SUDZHJR JyUQHJR SLNVHOD NDQG\GDWD

0 0 0 0

0 0 0 1

0 0 1 0

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

zmienne procedury: f 1, f 2, f 3, dx, dy:integer; dx := xe- x; dy := ye- y; 0 1 0 0

1 0 0 0

dla dx Ą 0 & dy Ą 0:

f 1 := - dy;

ó

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

while ( x xe) or ( y ye) do

F]ZyUNL SLNVHOL QDVW SXMFH ZDUXQNL

begin

0000

0001

0010

0100





1000


plot( x, y);

p

f 3 := f 1+ dx;

f 2 := f 3+ dy;

i<0

pi<0

pi<0

pi<0

piĄ0

if |f 1| < | f 3| then begin x := x+1; f 1 := f 1- dy end pi+2ą y<0

pi+2ą y<0

pi+2ą y<0

pi+2ą yĄ0

pi+2ą y-2ą x<0

else if |f 2| < | f 3| then begin y := y+1; f 1 := f 2- dy end pi+4ą y<0

pi+4ą y<0

pi+4ą yĄ0

pi+4ą y-2ą x<0 pi+4ą y-2ą x<0

else begin x := x+1; y := y+1; f 1 := f 3- dy end pi+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

end;

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

plot( xe, ye)

0000

0001

0010

0100





1000


ó

3RQLHZD*

p

f

i <

- 6ą y

ń p

2 Ą f 3 Ą f 1 ZL F

i <

- 4ą y

ń pi < - 2ą y ń pi <

0

ń pi

| f 1|<| f 3| " - f 1< f 3 ł wybór prawego piksela kandydata,

ó

$QDOL]XMF GOD SRZ\*V]\FK F]ZyUHN SLNVHOL VSRVyE PRG\ILNDFML ZDUWRFL pi

| f 2|<| f 3| " f 2<- f 3 ł wybór górnego piksela kandydata, Z DOJRU\WPLH %UHVHQKDPD PR*QD ]DXZD*\ź *H

Z SR]RVWDĄ\FK SU]\SDGNDFK Z\EyU SUDZHJR JyUQHJR SLNVHOD NDQG\GDWD

8 * y

ą

JG\ p

Łą

i < ł6 * y

ą

W]Q F]ZyUND

pi

p

+4 ł i = Ł8* y

Łł ą ł 2 * x

ą

JG\ pi Ą ł6 * y

ą

SR]RVWDĄ H F]ZyUNL

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

zmienne procedury: f 1, f 2, f 3, dx, dy:integer; dx := xe- x; dy := ye- y;

ó

'RGDWNRZH SU]\VSLHV]HQLH DOJRU\WPX PR*QD X]\VNDź XZ]JO GQLDMF

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

dla dx Ą 0 & dy Ą 0:

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

f 1 := - dy;

while ( x xe) or ( y ye) do

0000

0001

0010

0100





1000


begin


0000

0000

0000

0000

0000

plot( x, y);

1000

0001

0001

0010

0100

f 3 := f 1+ dx;

f 2 := f 3+ dy;

0100

0010

0100

1000

if f 3 < - f 1 then begin y := y+1; f 1 := f 3 end; 0010

0001

0010

if - f 3 < f 2 then begin x := x+1; f 1 := f 1- dy end 0001

0001

end;

plot( xe, ye)

19

20

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

Algorytm strukturalny Metzgera-Bronsa

zmienne procedury: p, pinc, pdec, dx, dy, m2, m4, m6, xe2:integer; dla dx Ą 4* dy Ą 0:

dx := xe- x;

dy := ye- y;

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

GRZROQHM NU]\ZHM PR*H E\ź

p := 2* dy- dx;

pinc := 8* dy;

pdec := 8* dy-2* dx;

3

2

1

m2 := -2

kodowany jako cyfra ósemkowa

* dy;

m4 := -4* dy;

m6 := -6* dy;

xe2 := xe-2;

R]QDF]DMFD QXPHU VVLDGD

while x < xe2 do

{rysowanie ( dx+1) div 4 czwórek}

begin

jakim jest ten piksel dla

4

0

if p < m6 then

{0000}

poprzedzajacego go piksela.

2GFLQHN G\VNUHWQ\ MDN L ND*G

begin

plot( x, y); plot( x+1, y);

NU]\Z PR*QD ]DWHP RSLVDź

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

5

6

7

SU]\ SRPRF\ FLJX F\IU

p := p+ pinc

end

ósemkowych zwanego kodem

ĄDFXFKRZ\P

else

begin

3

if p < m2 then

1

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

if p < m4 then

{0001}

1

2

0170213

begin

plot( x, y); plot( x+1, y);

ł 0

7 0

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

end

else

{0010}

ó

3RVWXODW\ )UHHPDQD RGQRQLH NRGX ĄDFXFKRZHJR RSLVXMFHJR RGFLQHN

begin

plot( x, y); plot( x+1, y);

ó

: NRG]LH ĄDFXFKRZ\P PRJ Z\VW SRZDź FR QDMZ\*HM GZLH F\IU\

plot( x+2, y); y := y+1; plot( x+3, y) RGSRZLDGDMFH VVLHGQLP NLHUXQNRP

end

ó

7\ONR MHGQD ] F\IU Z\VW SXMF\FK Z NRG]LH ĄDFXFKRZ\P PR*H

else if p < 0 then

{0100}

VVLDGRZDź VDPD ]H VRE

begin

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

ó

6XNFHV\ZQH UR]PLHV]F]HQLH F\IU Z NRG]LH ĄDFXFKRZ\P SRZLQQR E\ź

end

WDN MHGQRURGQH MDN W\ONR MHVW WR PR*OLZH

else

{1000}

π

ó

=DĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

begin

plot( x, y); y := y+1; plot( x+1, y); 4

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

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

end;

VVLDGHP SRSU]HGQLHJR Z NLHUXQNX ł albo Î : NRG]LH ĄDFXFKRZ\P

p := p+ pdec

PRJ ZL F Z\VW SRZDź MHG\QLH F\IU\ L

end;

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

x := x+4

ZL F Z NRG]LH ĄDFXFKRZ\P SRZLQQR VL ]QDOH(ź GRNĄDGQLH

end;

ą y jedynek i ą x-ą y zer (ą y = y e- y s, ą x = x e- x s).

if x ń xe then

{rysowanie ( dx+1) mod 4 pikseli}

begin

if x < xe then

ó

Oznaczenia:

begin

if x ń xe2 then

u Łą

u Łą

u Łą

u Łą

begin

plot( x, y);

x := x+1;

h ( u)

1

= Ł

( u) = u ł Ł

( u) = u ł Ł

( u) = Ł

ŁŁŻ2ŁŁ , K2

ŁŁŻ2ŁŁ lub K1

ŁŁŻ2ŁŁ , K2

ŁŁŻ2ŁŁ .

if p Ą 0 then y := y+1

end;

ó

Podstawienie wartoFL SRF]WNRZ\FK

i := 0,

plot( x, y)

a

end;

0 := ą y,

A 0 := "1",

b

plot( xe, ye)

0 := ą x-ą y,

B 0 := "0".

end

21

22

ó

1DOH*\ ]DWHP SU]HPLHV]Dź ai ĄDFXFKyZ Ai z bi ĄDFXFKDPL Bi.

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

ó

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

ci := max( ai, bi),

ci= ai ł Ci := Ai, Di := Bi,

dla dx Ą dy Ą 0:

dy := ye- y;

di := min( ai, bi),

ci ai ł Ci := Bi, Di := Ai,

a := dy; b := dx- dy; A := "1"; B := "0"; ci Ą di.

w := false; {true}

c

while a 0 do

ó

1D MHGHQ ĄDFXFK D

i

i SU]\SDGD UHGQLR ri =

ĄDFXFKyZ Ci ( riĄ1).

d

begin

i

while a < b do

d

ó

r

Ł K ( )

K ( ) Łś

i FDĄNRZLWH ł

NRG ĄDFXFKRZ\ RGFLQND

i

ŁŹ C 1 ir

C

ir

.

begin

i

i

D

i

Ł

Ł

Ł

if w then A := A+ B else A := B+ A; w := not w;

ó

-HOL r

b := b- a

i QLH MHVW ZDUWRFL FDĄNRZLW WR QDOH*\ SU]HPLHV]Dź ]H VRE

end;

a

h

r

h

r

i+1 := ci mod di

ĄDFXFKyZ

Ai

Ci

i

DiCi 2 i

+ =

+

+

1

1

1

1

:

([ ]

)

([ ]

) i

repeat

b

h ([ r ])

h ([ r ])

i+1 := di - ( ci mod di

ĄDFXFKyZ

Bi : C

1

i 1

i DiCi 2 i

+ =

.

if w then B := A+ B else B := B+ A; w := not w;

1DOH*\ ZL F SRZWyU]\ź SRZ\*V]H NURNL GOD i := i+1.

a := a- b

until a < b

end;

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

for i := 1 to b do

for j := 1 to length( B) do

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

dla dx Ą dy Ą 0:

dy := ye- y;

plot( x, y);

a := dy; b := dx- dy; A := "1"; B := "0"; x := x+1; if B[ j] = '1' then y := y+1

while a 0 do

end;

begin

plot( xe, ye)

w := false; {true}

if 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) do

begin

plot( x, y);

x := x+1; if B[ j] = '1' then y := y+1

end;

plot( xe, ye)

23

24

$OJRU\WP VWUXNWXUDOQ\ ]H ]PLHQQ GĄXJRFL VHULL (ang. run length parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

slice)

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

1

ó

=DĄR*HQLH RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ϕ ∈ (0, arctg ].

dla dx Ą 2* dy > 0:

dy := ye- y;

2

a := dy; b := dx- dy; l := a;

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

a2 := a+ a; ba2M := b mod a2; ba2D := b div a2; VVLDGHP SRSU]HGQLHJR Z NLHUXQNX ł albo Î : NRG]LH ĄDFXFKRZ\P

plot( x, y);

PRJ ZL F Z\VW SRZDź MHG\QLH F\IU\ L 3RQDGWR ND*GD MHG\QND E G]LH Z

for i := 1 to a do

W\P NRG]LH ĄDFXFKRZ\P RWRF]RQD ]HUDPL JG\* ]HU MHVW ZL FHM

begin

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

for j := 1 to ba2D do begin x := x+1; plot( x, y) end; ZL F Z NRG]LH ĄDFXFKRZ\P SRZLQQR VL ]QDOH(ź GRNĄDGQLH

l := l+ ba2M;

β = ą y jedynek i ą = ą x-ą y zer (ą y = y

if l Ą a2 then begin l := l- a2; x := x+1; plot( x, y) end; e- y s, ą x = x e- x s).

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

β

for j := 1 to ba2D do begin x := x+1; plot( x, y) end;

ó

.RG ĄDFXFKRZ\ RGFLQND

0 2 i 1

ł

1 0 2 i

Ź ą

ą ,

l := l+ ba2M;

i 1

=



β

if l Ą a2 then begin l := l- a2; x := x+1; plot( x, y) end gdzie

ęą =

n =

j

ą,

A

A ... A

Ź =

i

1

n ,

A

AA



... A

end

j =1

i =1

n

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

ą = ą div (2β) lub ą +1 = ą div (2β)+1, przy czym

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.





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

zmienne procedury: a, b, a2, baD, baM2, ba2M, ba2D, l, i, j, dx, dy:integer; W ]DSHZQLD QDVW SXMF\ Z]yU LWHUDF\MQ\

dla dx Ą 2* dy > 0:

dx := xe- x; dy := ye- y;

j ł1

j ł1

ą

Ł ą

=

Ł

a := dy; b := dx- dy; l := a; round

j

lub ą =

j ł 2 ę

+

div (2β).

j

ą

β ą k β

2

ł ę

j

β

ą k

ŁŁŹ

Łś

=

ŁŁŹ

Łś

=

a2 := a+ a; ba2M := b mod a2; ba2D := b div a2; 1

ŁŁ

1

ŁŁ

k

k

baD := ba2D+ ba2D; baM2 := ba2M+ ba2M;

ó

2VWDWHF]QLH NRG ĄDFXFKRZ\ RGFLQND G\VNUHWQHJR MHVW QDVW SXMF\

if ba2M > a

β

β

then begin baD := baD+1; baM2 := baM2- a2 end; 0 2 i 1

ł

1 0 2 i

Ź ą

ą ,

gdzie



A

A ... A

Ź =

n =

plot( x, y);

i

1

n ,

A

AA



... A ,

i 1

=

i =1

n

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

Łą ą div (2β)





dla

if l Ą a2 then begin l := l- a2; x := x+1; plot( x, y) end; j + ą mod (2β) < 2β,

]D ą j = Ł

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

Łł ą div (2β) +1

dla j + ą mod (2β) Ą 2β,

for i := 2 to a do



begin

j = (ą( jł1) +β) mod (2β),

for j := 1 to baD do begin x := x+1; plot( x, y) end; czyli 1 = β,

l := l+ baM2;

Łą j + ą mod (2β)





dla j + ą mod (2β) < 2β,

if l Ą a2 then begin l := l- a2; x := x+1; plot( x, y) end; j+1 = ŁŁł

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

j + ą mod (2β) ł 2β

dla j + ą mod (2β) Ą 2β,

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 25

26

ś= EDWRź” odcinków dyskretnych (ang. aliasing)

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

ó

bezwagowe próbkowanie powierzchni

Rys. Bezwagowe próbkowanie powierzchni odpowiada

SURVWRSDGĄRFLHQQHM IXQNFML ZDJRZHM

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

Metody usuwania ś] EDWRFL” odcinków

ó

]ZL NV]HQLH UR]G]LHOF]RFL

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 2GFLQHN G\VNUHWQ\ Z ]ZL NV]RQHM UR]G]LHOF]RFL

ó

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

5\V 6WR*NRZD IXQNFMD ZDJRZD

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 E G]LH RQ SRNU\ZDĄ

W\ONR IUDJPHQW\ SLNVHOL -DVQRź W\FK SLNVHOL SRZLQQD ZL F ]DOH*Hź RG

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

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

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

L ZDJD VWR*NRZD QD GROH

27

28

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

π

π

ó

=DĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

ó

=DĄR*HQLH U\VRZDQ\ RGFLQHN QDFK\ORQ\ GR RVL 0X SRG NWHP ą ∈ [0, ].

4

4

Piksele rysowane parami w pionie.

Piksele rysowane parami w pionie.

ó

=DĄR*HQLH m GRVW SQ\FK SR]LRPyZ MDVQRFL

ó

3U]\MPLMP\ *H GROQ\ ] RVWDWQLR QDU\VRZDQ\FK SLNVHOL PD ZVSyĄU] GQH xi, yi.

xi

Rys. Kryterium wyboru kolejnych

:yZF]DV ZVSyĄU] GQH GROQHJR SLNVHOD NROHMQHM SDU\ Z\QLRV

pikseli:

xi+1:= xi +1

ó

k>0 ł kolejne dwa piksele

yi

Łą +

odcinek

y

1

dla [ a·( i+1)] > [ a· i], gdzie a = tgą, k

rysowane w tych samych

i

i

idealny

y

1:

Ł

wierszach (

+ =

y

i

i, yi-1),

y

Łł i

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

ó

k<0 ł kolejne dwa piksele

rysowane w wierszach o

ó

,QWHQV\ZQRź JyUQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR a·( i+1)-[ a·( i+1)], SR]LRP Z\*HM yi+1, yi),

LQWHQV\ZQRź GROQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR a·( i+1)+[ a·( i+1)].

ó

k=0 ł kolejny piksel (tylko

ó

=DĄR*HQLH SURFHGXUD SORW x, y, c, c QDGDMH SXQNWRZL R ZVSyĄU] GQ\FK

ostatnio

trzy piksele

jeden) rysowany

max

narysowane

kandydaci

w górnym wierszu ( y

x, y LQWHQV\ZQRź Z]JO GQ c / c

ZDUWRFL FDĄNRZLWH

i),

max (gdzie c, cmax

piksele

(dwie pary)

FR ZL FHM c

MHVW SRPQLHMV]RQ R SRW J OLF]E\

max

ó

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

ó

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

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

xi+1:= xi +1

y

Łą i +1 dla k<0,

ó

=DĄR*HQLH IXQNFMD RYHUIORZ d ]ZUDFD ZDUWRź true tylko wtedy,

yi +1:= Ł

gdy poprzednia operacja na zmiennej d ]DNRF]\ĄD VL SU]HSHĄQLHQLHP

y

Łł i

dla kĄ0.

ó

,QWHQV\ZQRź JyUQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR k,

LQWHQV\ZQRź GROQHJR SLNVHOD MHVW ZSURVW SURSRUFMRQDOQD GR

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

s, y := y s, xe := x e, ye := y e.

VWDĄH SURFHGXU\ n {liczba bitów dla typu integer},

ó

=DĄR*HQLH SURFHGXUD SORW x, y, c, c QDGDMH SXQNWRZL R ZVSyĄU] GQ\FK

max

nm { n- m>0, gdzie 2 m MHVW OLF]E SR]LRPyZ V]DURFL}, x, y LQWHQV\ZQRź Z]JO GQ c / c

ZDUWRFL FDĄNRZLWH

max (gdzie c, cmax

em {2 m-1};

ó

ZamiDVW ZDUWRFL XĄDPNRZHM k OHSLHM MHVW UR]ZD*Dź ZDUWRź FDĄNRZLW k*ą x.

zmienne procedury: dx, dy, d, dinc:integer;

dx := xe- x; dy := ye- y;

parametry procedury: x, y, xe, ye:integer; x := x s, y := y s, xe := x e, ye := y e.

dla dx Ą dy Ą 0:

d := 0;

zmienne procedury: kdx, dx, dy:integer;

dx := xe- x; dy := ye- y;

dinc := (( dy shl n)+( dx shr 1)) div dx;

dla dx Ą dy Ą 0:

while x xe do

kdx := 0;

begin

while x xe do

plot( x, y, em - ( d shr nm) , em);

begin

if d 0 then plot( x, y+1, d shr nm, em); plot( x, y, dx- kdx, dx);

x := x+1; d := d+ dinc {mod 2 n};

if kdx 0 then plot( x, y-1, kdx, dx);

if overflow( d) then y := y+1

x := x+1;

end;

kdx := kdx- dy;

plot( xe, ye, em, em)

if kdx < 0 then begin y := y+1; kdx := kdx+ dx end end;

plot( xe, ye, 1, 1)

29

30

XN RNU JX HOLSV\

Oktanty (ósemki)

3

2

dla orientacji

orientacja

orientacja

dodatniej

ujemna

dodatnia

5\V 3RG]LDĄ RNU JX QD RNWDQW\ yVHPNL

4

1

5\V 'ZLH RULHQWDFMH SU]\ U\VRZDQLX RNU JX

=D]QDF]RQD VWU]DĄNDPL SU]\QDOH*QRź

5

8

(orientacja ujemna - zgodnie z ruchem

GR RNWDQWX SyĄSURVWHM UR]JUDQLF]DMFHM

dla orientacji

wskazówek zegara, orientacja dodatnia -

]DOH*\ RG RULHQWDFML U\VRZDQLD

ujemnej

6

7

przeciwnie do ruchu wskazówek zegara).

=DĄR*HQLH ( x c, y c) = (0,0)

$OJRU\WP\ U\VRZDQLD ĄXNyZ RNU JyZ HOLSV:

ó

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

ó

zmiennoprzecinkowe

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

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

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

else Octant := 2

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

else if y > - x then Octant := 3

else Octant := 4

ó

podstawowy

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

ó

parametryczny

else Octant := 6

else if y < - x then Octant := 7

ó

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

else if y 0 then Octant := 8

ó

warunkowe

else if x 0 then Octant := 1

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

else Octant := 0

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

Funkcja StartOctant( x s, y s, x e, y e) wykorzystuje ten algorytm do wyznaczenia

ó

Bresenhama

RNWDQWyZ SLNVHOD SRF]WNRZHJR x s, y s L NRFRZHJR x e, y e). Funkcja ta

ó

SXQNWX URGNRZHJR DQJ midpoint)

]ZUDFD QXPHU RNWDQWX SLNVHOD SRF]WNRZHJR ĄXNX ,QLFMDOL]XMH RQD SRQDGWR

pewne zmienne globalne dla potrzeb funkcji Octant.

ó

porównawczy Jordana

ó

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

E

5\V XN RNU JX R URGNX Z SXQNFLH &

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

S

UR]SRF]\QDMF\ VL Z SXQNFLH 6

ĄXNX RNU JX R SURPLHQLX r > 1) rysowanym przy orientacji dodatniej:

NRF]F\ VL QD SyĄSURVWHM &(

wyznaczonej przez punkt E,

case Octant of 1: if x > y

then Octant := 1 else Octant := 2;

C

rysowany przy orientacji dodatniej.

2: if x > 0

then Octant := 2 else Octant := 3;

Uwaga: 3RGDQH QL*HM DOJRU\WP\

3: if y > - x then Octant := 3 else Octant := 4; U\VXM ĄXNL ZJ RULHQWDFML GRGDWQLHM

4: if y > 0

then Octant := 4 else Octant := 5;

5: if x < y

then Octant := 5 else Octant := 6;

Oznaczenia: ( x s , y s SRF]WHN ĄXNX

( x e , y e NRQLHF ĄXNX

6: if x < 0

then Octant := 6 else Octant := 7;

( x c , y c URGHN RNU JX

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

then Octant := 8 else Octant := 1 end

=DĄR*HQLH

:VSyĄF]\QQLN NV]WDĄWX SLNVHOD DQJ

Funkcja Octant( x, y) wykorzystuje ten algorytm do wyznaczenia oktantu aspect ratio) wynosi 1.

piksel

v

piksela ( x, y). Funkcja ta zwraca numer oktantu tego piksela lub zero, gdy 5\V :VSyĄF]\QQLN NV]WDĄWX SLNVHOD UyZQ\ MHVW u .

RVLJQL W\ ]RVWDĄ NRQLHF ĄXNX :\NRU]\VWXMH RQD SRQDGWR SHZQH ]PLHQQH

v

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

u

ó

:DUXQHN VWZLHUG]DMF\ RVLJQL FLH NRFD ĄXNX GOD RULHQWDFML GRGDWQLHM

Uwaga: 2NUJ R URGNX x c , y c) i promieniu r PR*QD RWU]\PDź ] RNU JX R

URGNX L SURPLHQLX

:DUXQHN WHQ QDOH*\ WHVWRZDź MHG\QLH Z RNWDQFLH SLNVHOD NRFRZHJR ĄXNX

r VWRVXMF SU]HVXQL FLH R ZHNWRU x c , y c).

y* x e > y e* x ł RVLJQL WR NRQLHF ĄXNX

31

32

Algorytm podstawowy





Algorytm parametryczny


ó

Ogólna zasada:

ó

RównDQLH SDUDPHWU\F]QH RNU JX R URGNX x

3U]\ U\VRZDQLX NU]\ZHM SROHJDMF\P QD Z\]QDF]DQLX ZVSyĄU] GQ\FK

c, y c) = (0,0) i promieniu r:

x = r

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

*cosϕ,

y = r

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

*sinϕ,

ϕ ∈ [0, 2*π)

]PLHQLDQ R SRZLQQD E\ź ZVSyĄU] GQD GOD NWyUHM SU]\URVW\ V ZL NV]H

ó

=DĄR*HQLH NROHMQH SLNVHOH Z\]QDF]DQH V SRSU]H] ]PLDQ SDUDPHWUX ϕ o

VWDĄ ZDUWRź ąϕ = const.

ó

5yZQDQLH RNU JX R rodku ( x c, y c) = (0,0) i promieniu r:

x 2 + y 2 = r 2

ó

-H*HOL SLNVHO xi, yi PD ZVSyĄU] GQH

xi = r*cosϕ i,

y

3

2

5\V 3RG]LDĄ RNU JX QD RNWDQW\

i = r*sinϕ i,

WR SU]\ RULHQWDFML GRGDWQLHM QDVW SXMF\ SR QLP SLNVHO x

Dla orientacji dodatniej i dla oktantów:

i+1, yi+1) ma

ZVSyĄU] GQH

4

1

ó

1, 8: y ]ZL NV]DQH R x:= [ r 2 ł y 2 + 1],

x

2

i+1 = r*cosϕ i+1 = r*cos(ϕ i+ąϕ) =

5

8

= r*cosϕ i*cosąϕ - r*sinϕ i*sinąϕ =

ó

2, 3: x zmniejszane o 1, y:= [ r 2 ł x 2 + 1],

2

= xi*cosąϕ - yi*sinąϕ,

6

7

ó

4, 5: y zmniejszane o 1,

y

x:= [

ł r 2 ł y 2 + 1],

i+1 = r*sinϕ i+1 = r*sin(ϕ i+ąϕ) =

2

= r*cosϕ i*sinąϕ + r*sinϕ i*cosąϕ =

ó

[ ]ZL NV]DQH R y:= [

ł r 2 ł x 2 + 1].

= xi*sinąϕ + yi*cosąϕ,

2

5\V :DUWRź ąϕ SRZLQQD SRZRGRZDź ]PLDQ

ó

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

r

ZDUWRFL ZVSyĄU] GQ\FK QLH ZL FHM QL* R

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

ąϕ

ąϕ ń1

1

r

:DUWRź ąϕ

]DSHZQLD ]PLDQ ZDUWRFL

(np. 200

ń

* ! 'ODWHJR WH* IXQNFMD SRGQRV]FD GR

r

NZDGUDWX SRZLQQD E\ź ]EXGRZDQD QDVW SXMFR

r

ZVSyĄU] GQ\FK QLH ZL FHM QL* R

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

1

*longint( u) end

1DOH*\ ]DWHP SU]\Mź ąϕ = .

r

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

zmienne procedury: c, s, u, v, z:real;

xe := x e- x c, ye := y e- y c,

zmienne procedury: rr:longint;

xe := x e- x c, ye := y e- y c,

dla wszystkich oktantów:

xc := x c, yc := y c.

dla oktantów nr 1 i 8:

xc := x c, yc := y c.

if StartOctant( x, y, xe, ye) 0 then

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

begin

begin

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

v := x; z := y;

repeat

repeat

plot( x+ xc, y+ yc);

plot( x+ xc, y+ yc);

y := y+1;

u := v* c- z* s; z := v* s+ z* c; v := u; x := round(sqrt( rr-sqr( y)))

x := round( v); y := round( z)

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

until Octant( x, y) = 0

end

end

33

34

Algorytm Honga





Algorytm Bresenhama


1


ó

Dla algorytmu parametrycznego: xi+1 = xi*cosąϕ - yi*sinąϕ, ąϕ ń r

ó

=DĄR*HQLH U\VRZDQ\ ĄXN RNU JX ] RNWDQWX QU

yi+1 = xi*sinąϕ + yi*cosąϕ.

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

ó

Oznaczenie:

poprzedniego w kierunku Ź albo ę.

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

2

1

1

ó

2 k-1 ń r < 2 k & 2- k < ń 2- k+1 Z\JRGQLH ]DWHP SU]\Mź ąϕ =2- k < .

Rys. Kryterium wyboru

r

r

d

dwa

1

kolejnego piksela dla

ó

3RQLHZD* NW ąϕ MHVW PDĄ\ ZL F IXQNFMH WU\JRQRPHWU\F]QH WHJR NWD

piksele

kandydaci

UR]ZD*DQHJR SU]\SDGNX

Z\VW SXMFH Z SRZ\*V]\FK Z]RUDFK PR*QD GRź GREU]H SU]\EOL*\ź

d 2

ó

d

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

1> d 2 ł rysowany

lewy piksel kandydat,

n

1

( 1) x 2 n

*

n

1

( 1) x 2 n

*

1

ostatnio

ó

d

cos x = 1ł

x 2 +..+ ł

+... sin x = x ł x 3+..+ ł

+ +...

narysowany

1< d 2 ł rysowany

2!

(2 * n)!

3!

(2 * n + 1)!

piksel

prawy piksel kandydat,

1

ó

d 1= d 2 ł rysowany

ó

3U]\MPXMF SU]\EOL*HQLH FRV x ≈ 1- * x 2, sin x ≈ x L XZ]JO GQLDMF ąϕ=2- k,

dowolny z pikseli

2

RWU]\PXMH VL QDVW SXMFH Z]RU\

ĄXN LGHDOQ\

kandydatów

1

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

ó

3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyĄU] GQH x

1

i, yi.

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

:yZF]DV ZVSyĄU] GQH NROHMQHJR SLNVHOD Z\QLRV

2

x

Łą ł1 przy wyborze lewego piksela kandydata,

i

ó

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

x

:

Ł

i + =

1

x

=DĄR*HQLH

przy wyborze prawego piksela kandydata.

shr, shl - operacje przesuwania arytmetycznego w prawo i lewo.

Łł i

yi+1:= yi +1

przy wyborze dowolnego z pikseli kandydatów,

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

zmienne procedury: k, n:integer; u, v, z:longint; xe := x

ó

Wynik porównania d

e- x c, ye := y e- y c,

1> d 2 decyduje o wyborze kolejnego piksela

2

2

dla wszystkich oktantów:

xc := x

do rysowania: d

x

(

1 2

=

ł

ł

+ ) , d = r ł ( y +1 2

)

ł ( ł1).

c, yc := y c.

1

i

r

yi

2

i

xi

if StartOctant( x, y, xe, ye) 0 then

ó

d

ł

2 ł ( +1 2

)

>

2 ł ( +1 2

)

ł ( ł1)

begin

1> d 2

" xi

r

yi

r

yi

xi

u := sqr( x) + sqr( y); k := 0;

" 2 x ł1 > 2

2 ł

+1 2

*

*

(

)

i

r

yi

while u 0 do begin u := u shr 2; k := k+1 end; (...)2 ( xi > 0)

" (2

{ k := trunc(log2(sqrt(sqr( x)+sqr( y))))+1;}

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

n := 2

2

* k+1; v := x; z := y; v := v shl n; z := z shl n;

" 4* xi -4* xi+1 > 4*( r 2-( yi+1)2)

OLF]E\ FDĄNRZLWH

repeat

" 4 2-4

plot( x+ xc, y+ yc);

* xi

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

/ 2

u := v- x-( z shr k); z := z- y+( v shr k); v := u;

" 2 2

* xi -2* xi+1 > 2*( r 2-( yi+1)2)

x := v shr n; y := z shr n

" x 2 2

i + xi -2* xi+1 > 2*( r 2-( yi+1)2)

until Octant( x, y) = 0

end

" x 2

i +( xi-1)2 > 2*( r 2-( yi+1)2)

" x 2

i +( yi+1)2- r 2 > r 2-( xi-1)2-( yi+1)2

F( x, y) = x 2+ y 2- r 2

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

35

36

ó

Oznaczenie:

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

$OJRU\WP SXQNWX URGNRZHJR DQJ midpoint)

:DUWRź pi jest zawsze ZDUWRFL FDĄNRZLW.

ó

=DĄR*HQLH U\VRZDQ\ ĄXN RNU JX ] RNWDQWX QU

ó

d 1> d 2 " pi>0 ł wybór lewego piksela kandydata,

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

d 1< d 2 " pi<0 ł wybór prawego piksela kandydata, poprzedniego w kierunku Ź albo ę.

d 1= d 2 " pi=0 ł wybór dowolnego piksela kandydata,

w algorytmie SU]\M WR Z\EyU OHZHJR

Rys. Kryterium wyboru

ten przypadek nigdy nie zajdzie.

dwa

kolejnego piksela dla

piksele

ó

3RF]WNRZD ZDUWRź pi:

kandydaci

UR]ZD*DQHJR SU]\SDGNX

p

o wyborze kolejnego

0 = F( x 0, y 0+1)+F( x 0-1, y 0+1) =

x 0= x s, y 0= y s

piksela decyduje znak

= F( x s, y s+1)+F( x s-1, y s+1) =

ostatnio

ZDUWRFL IXQNFML

narysowany

= x 2

s +( y s+1)2- r 2+( x s-1)2+( y s+1)2- r 2 =

piksel

F( x, y)= x 2+ y 2- r 2

Z SXQNFLH URGNRZ\P

= x 2

2

2

2

s + y s +2* y s+1- r 2+ x s -2* x s+1+ y s +2* y s+1- r 2 =

x 2+ y 2- r 2=0

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

= 4* y s-2* x s+3.

ĄXN LGHDOQ\

SRPL G]\ SLNVHODPL

kandydatami.

ó

0RG\ILNDFMD ZDUWRFL pi:

ó

PrzyjmiMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyĄU] GQH x

p

i, yi.

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

:yZF]DV ZVSyĄU] GQH NROHMQHJR SLNVHOD Z\QLRV

= x

2

i+1 +( yi+1+1)2- r 2+( xi+1-1)2+( yi+1+1)2- r 2+

x

Łą ł1 przy wyborze lewego piksela kandydata,

- x 2

i -( yi+1)2+ r 2-( xi-1)2-( yi+1)2+ r 2 =

x

i

:

Ł

i + =

1

x

przy wyborze prawego piksela kandydata.

= x

2

2

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

Łł i

Łą

y

x 2

2

i+1:= yi +1

przy wyborze dowolnego z pikseli kandydatów,

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

Ł

= Ł

= 4* yi+6 dla wyboru prawego piksela,

ó

Oznaczenie:

ŁłŁ

1

1

1

1

( x

2

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

f

2

2

i := F( xi- , yi+1)- = ( xi- )2 +( yi+1)2 - r 2 - = xi - xi + yi +2* yi +1 - r 2.

2

4

2

4

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

1

1

ó

Uwaga: :DUWRź fi := F( xi- , yi+1) -

MHVW ]DZV]H ZDUWRFL FDĄNRZLW

2

4

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

zmienne procedury: p:integer;

xe := x e- x c, ye := y e- y c,

ó

Kryterium wyboru kolejnego piksela:

dla oktantu nr 1:

xc := x c, yc := y c.

1

ó

F( xi- , yi+1)>0 " fi Ą 0 ł rysowany lewy piksel kandydat, if StartOctant( x, y, xe, ye) = 1 then

2

1

begin

ó

F( xi- , yi+1)<0 " fi < 0 ł rysowany prawy piksel kandydat, p := 4

2

* y-2* x+3;

1

repeat

ó

F( xi- , yi+1)=0 ł rysowany dowolny z pikseli kandydatów -

plot( x+ xc, y+ yc);

2

if p < 0 then p := p+4

ten przypadek nigdy nie zajdzie.

* y+6

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

until Octant( x, y) 1

end

37

38

ó

PoczWNRZD ZDUWRź f

2

2

2

Algorytm porównawczy Jordana

i:



x V +



y

V ł r





= 0



ó

ZaĄR*HQLH U\VRZDQ\ ĄXN RNU JX ] RNWDQWX QU OXE

1

1

f

2

2

0 := F( x 0, y 0)- = F( x s, y s)- = x s - x s + y s +2* y s +1 - r 2 = 2* y s - x s +1.

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

4

4

poprzedniego w kierunku Ź, ę albo ć.

ó

0RG\ILNDFMD ZDUWRFL fi:

1

1

1

1

Rys. Kryterium wyboru

fi+1- fi := F( xi+1- , yi+1+1) - - F( xi- , yi+1) + =

trzy

2

4

2

4

kolejnego piksela dla

piksele

kandydaci

UR]ZD*DQHJR SU]\SDGNX

= x

2

2

2

2

i+1 - xi+1 + yi+1 +2* yi+1 +1 - r 2 - xi + xi - yi -2* yi -1 + r 2 =

rysowany jest ten piksel,

GOD NWyUHJR ZDUWRź

= x

2

2

2

2

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

ostatnio

EH]Z]JO GQD ] ZDUWRFL

narysowany

funkcji F( x, y)= x 2+ y 2- r 2

= ( x

piksel

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

Z URGNX WHJR SLNVHOD MHVW

najmniejsza.

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

yi+1 = yi+1

ĄXN LGHDOQ\

Łą

2 * yi + 3

JG\ Z\EUDQR SUDZ\ SLNVHO

x

=

i+1 = xi

Ł

ó

3U]\MPLMP\ *H RVWDWQLR QDU\VRZDQ\ SLNVHO PD ZVSyĄU] GQH xi, yi.

2 * yi ł 2 * xi +

Łł

5

JG\ Z\EUDQR OHZ\ SLNVHO

xi+1 = xi-1

:yZF]DV ZVSyĄU] GQH NROHMQHJR SLNVHOD PRJ Z\QLHź

2 * y

1

JG\ Z\EUDQR SUDZ\ SLNVHO

= Łą

i+1 +

Ł

1.

xi+1:= xi - 1

przy wyborze lewego piksela kandydata,

Łł2 * yi+1 ł 2 * xi+1 +1 JG\ Z\EUDQR OHZ\ SLNVHO

yi+1:= yi

2.

xi+1:= xi

przy wyborze górnego piksela kandydata,

yi+1:= yi +1

3.

xi+1:= xi - 1

przy wyborze lewego górnego piksela kandydata.

yi+1:= yi +1

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

zmienne procedury: f:integer;

xe := x e- x c, ye := y e- y c,

ó

Oznaczenia:

f := F( xi, yi),

F( x 0, y 0) = F( x s, y s) = 0,

dla oktantu nr 1:

xc := x c, yc := y c.

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

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

f

begin

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

f := 2* y- x+1;

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

repeat

plot( x+ xc, y+ yc);

ó

| f 1|<| f 2| & | f 1|<| f 3| ł wybór lewego piksela kandydata, y := y+1;

| f 2|<| f 1| & | f 2|<| f 3| ł wybór górnego piksela kandydata, if f < 0 then f := f+2* y+1

| f 3|<| f 1| & | f 3|<| f 2| ł wybór lewego górnego piksela kandydata, else begin x := x-1; f := f+2*( y- x)+1 end

| f 1|<| f 2| & | f 1|=| f 3| ł wybór lewego lub lewego górnego piksela, until Octant( x, y) 1

| f 2|<| f 1| & | f 2|=| f 3| ł wybór górnego lub lewego górnego piksela, end

w alJRU\WPLH SU]\M WR Z\EyU OHZHJR JyUQHJR

39

40

ó

3RQLHZD* f 2 Ą f 3 Ą f 1 ZL F

2NUJ

| f 1|<| f 2| & | f 1|<| f 3| " | f 1|<| f 3| ł

wybór lewego piksela kandydata,

3

2

| f

ó

$E\ QDU\VRZDź SHĄHQ RNUJ R URGNX x

2|<| f 1| & | f 2|<| f 3| " | f 2|<| f 3| ł

wybór górnego piksela kandydata,

c, y c) i

Z SR]RVWDĄ\FK SU]\SDGNDFK Z\EyU OHZHJR JyUQHJR SLNVHOD NDQG\GDWD

promieniu r Z\VWDUF]\ GRNRQDź REOLF]H MHG\QLH GOD

4

1

jednego oktantu (np. nr 1). Otrzymane dla tego

RNWDQWX ZVSyĄU] GQH x, y SR]ZDODM Z\]QDF]\ź

5

8

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

SLNVHOH RNU JX ]H ZV]\VWNLFK RPLX RNWDQWyZ ( x, y),

6

7

zmienne procedury: f 1, f 2, f 3:integer;

xe := x

( y, x), (- y, x), (- x, y), (- x,- y), (- y,- x), ( y,- x), ( x,- y).

e- x c, ye := y e- y c,

dla oktantu nr 1 lub 2:

xc := x c, yc := y c.





Elipsa


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

begin

3

2

ó

$E\ QDU\VRZDź SHĄQ HOLSV R URGNX x c, y c) i

f 1 := -2* x+1;

SyĄRVLDFK p i q Z\VWDUF]\ GRNRQDź REOLF]H GOD

4

1

repeat

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

plot( x+ xc, y+ yc);

L 2WU]\PDQH GOD WHM źZLDUWNL ZVSyĄU] GQH x, 5

8

f 3 := f 1+2* y+1;

f 2 := f 3+2* x-1;

y SR]ZDODM Z\]QDF]\ź SLNVHOH HOLSV\ ]H

if |f 1| < | f 3| then begin x := x-1; f 1 := f 1-2* x+1 end ZV]\VWNLFK źZLDUWHN

6

7

( x, y), (- x, y), (- x,- y), ( x,- y).

else if |f 2| < | f 3| then begin y := y+1; f 1 := f 2-2* x+1 end else begin x := x-1; y := y+1; f 1 := f 3-2* x+1 end until not (Octant( x, y) in [1, 2])

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

end

procedure Ellipse( xc, yc, p, q: integer);

ó

3RQLHZD* f

var x, y: integer; pp, qq, pp 2, qq 2, f, fx, fy: longint; 2 Ą f 3 Ą f 1 ZL F

begin

| f 1|<| f 3| " - f 1< f 3 ł wybór lewego piksela kandydata, x := p;

y := 0;

| f 2|<| f 3| " f 2<- f 3 ł wybór górnego piksela kandydata, Z SR]RVWDĄ\FK SU]\SDGNDFK Z\EyU OHZHJR JyUQHJR SLNVHOD NDQG\GDWD

pp := p* p;

qq := q* q;

pp 2 := 2* pp;

qq 2 := 2* qq;

f := pp - p* qq + qq div 4;

fx := qq 2* p;

fy := 0;

parametry procedury: x, y, xe, ye, xc, yc:integer; x := x s- x c, y := y s- y c,

while fx > fy do

{oktant nr 1 (oraz nr 4, 5, 8)}

begin

zmienne procedury: f 1, f 2, f 3:integer;

xe := x e- x c, ye := y e- y c,

plot( x+ xc, y+ yc);

plot(- x+ xc, y+ yc);

dla oktantu nr 1 lub 2:

xc := x c, yc := y c.

plot(- x+ xc, - y+ yc); plot( x+ xc, - y+ yc); if StartOctant( x, y, xe, ye) in [1, 2] then

y := y+1;

fy := fy+ pp 2;

begin

if f < 0 then f := f+ fy+ pp

f 1 := -2

else begin x := x-1; fx := fx- qq 2; f := f- fx+ fy+ pp end

* x+1;

repeat

end;

plot( x+ xc, y+ yc);

f := f - ( fx+ fy) div 2 + qq - pp - ( qq- pp) div 4; f 3 := f 1+2

repeat

{oktant nr 2 (oraz nr 3, 6, 7)}

* y+1;

f 2 := f 3+2* x-1;

if f 3 < - f 1 then begin y := y+1; f 1 := f 3 end; plot( x+ xc, y+ yc);

plot(- x+ xc, y+ yc);

if - f 3 < f 2 then begin x := x-1; f 1 := f 1-2

plot(- x+ xc, - y+ yc); plot( x+ xc, - y+ yc);

* x+1 end

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

x := x-1;

fx := fx- qq 2;

end

if f > 0 then f := f- fx+ qq

else begin y := y+1; fy := fy+ pp 2; f := f- fx+ fy+ qq end until x < 0

end

41

42

Znajdowanie konturu

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

ó

Konturem danego zbioru pikseli nazywamy zbiór wszystkich pikseli

procedure AllContourTracing;

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

var x, y: coordinate;

QDOH*FHJR GR WHJR ]ELRUX

begin

for x:= minx to maxx do

for y:= miny to maxy do

if pixel[ x, y]ŹHPSW\ then

if ( 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;

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

pikseli i jego kontur.

ó

Znajdowanie wszystkich konturów dowolnego zbioru pikseli:

procedure neighbour(var nx, ny:coordinate; x, y:coordinate; s:direction); procedura AllContourTracing.

begin

:\V]XNDQLH VSRUyG ZV]\VWNLFK SLNVHOL ]ELRUX W\FK NWyUH PDM

case s of

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

0: begin nx:= x+1; ny:= y

end;

1: begin nx:= x+1; ny:= y–1 end;

ó

Znajdowanie pojedynczego konturu spójnego podzbioru zbioru pikseli:

2: begin nx:= x;

ny:= y–1 end;

procedura ContourTracing.

3: begin nx:= x–1; ny:= y–1 end;

6WRSQLRZH Z\V]XNLZDQLH SRF]ZV]\ RG ZVND]DQHJR SLNVHOD SLNVHOL

4: begin nx:= x–1; ny:= y

end;

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

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

7

6

5

end

end;

piksel piksel

spoza

4

konturu

5\V .ROHMQRź SU]HJOGDQLD VVLDGyZ SLNVHOD

zbioru

NRQWXUX Z FHOX ]QDOH]LHQLD QDVW SQHJR

1

2

3

piksela konturu.

43

44

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

:\SHĄQLDQLH NRQWXUX

procedure ContourTracing( bx, by:coordinate; bs:direction);

ó

0HWRG\ Z\SHĄQLDQLD NRQWXUX

var x, y, nx, ny: coordinate;

ó

0HWRGD Z\SHĄQLDQLD NRQWXUX ] NRQWURO SDU]\VWRFL -

s: direction;

Z\SHĄQLDQLH ZV]\VWNLFK NRQWXUyZ SURFHGXUD $OO&RQWRXU)LOOLQJ

begin

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

3U]HJOGDQLH ZV]\VWNLFK SLNVHOL REUD]X NROHMQ\PL OLQLDmi poziomymi.

:\NU\FLH QLHSDU]\VWHM OLF]E\ SU]HFL ź NRQWXUX ] ]DGDQ OLQL SR]LRP

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

QD OHZR RG GDQHJR SLNVHOD R]QDF]D *H QDOH*\ RQ GR ZQ WU]D ]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 `

5\V 3U]\NĄDGRZ\

s:= bs;

kontur. Fragmenty

repeat

konturu styczne do

bs:= ( bs+7) mod 8;

linii poziomych nie

if bs= s then

SRZLQQ\ E\ź

begin

traktowane jako

pixel[ bx, by]:=contour;

SU]HFL FLD NRQWXUX ]

exit ^ QLH PD VVLDGyZ QDOH*F\FK GR ]ELRUX ]ELyU MHGQRSXQNWRZ\ `

liniami poziomymi.

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; $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

{ znajdowanie konturu }

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

x:= bx; y:= by;

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

repeat

konturu styczny do linii poziomej.

pixel[ x, y]:=contour;

repeat

s:= ( s+1) mod 8;

neighbour( nx, ny, x, y, s)

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

until pixel[ nx, ny]ŹHPSW\

dla którego

x:= nx; y:= ny;

procedura

if odd( s) then s:= ( s+5) mod 8 else s:= ( s+6) mod 8

AllContourFilling

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

]DV\JQDOL]XMH EĄG

end;

'RSLHUR XVXQL FLH

z tego konturu

pikseli oznaczonych

NU]\*\NDPL

XPR*OLZL

SUDZLGĄRZH Z\NR

nanie tej procedury.

45

46

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

ó

0HWRGD Z\SHĄQLDQLD NRQWXUX SU]H] VSyMQRź (przez sianie) -

Z\SHĄQLDQLH ]DGDQHJR NRQWXUX SURFHGXU\ )LOO L &RQWRXU)LOOLQJ

procedure AllContourFilling;

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

var x, y: coordinate; above, below: integer; oddintsect: Boolean; W]Z ]LDUQD NROHMQ\FK EVVLDGyZ D* GR RVLJQL FLD NRQWXUX

begin

for y:= miny to maxy do

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

begin

begin

oddintsect:=false;

if pixel[ x, y] = empty then

x:= minx;

begin

while x" maxx do

pixel[ x, y] := interior;

if pixel[ x, y]ŹFRQWRXU

Fill( x+1, y); Fill( x, y-1); Fill( x-1, y); Fill( x, y+1) then

end

begin

end

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

x:= x+1

end

5\V :\SHĄQLHQLH

else

SU]\NĄDGRZHJR NRQ

begin

118

WXUX Z\ZRĄDQLHP

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

4

3

2

then above:=1 else above:=0;

10

6

5

4

procedury Fill( x, y)

ELDĄH OLF]E\

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

9 6 7 5 0 0 1 1

R]QDF]DM NROHMQRź

then below:=1 else below:=0;

repeat

8 6

2 2 3 3

czarne cyfry - poziom

if ( pixel[ x+1, y-1]=contour) and ( pixel[ x, y-1]ŹFRQWRXU

rekurencji).

then above:= above+1;

if ( pixel[ x+1, y+1]=contour) and ( pixel[ x, y+1]ŹFRQWRXU

x

then below:= below+1;

x:= x+1;

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

until ( pixel[ x, y]ŹFRQWRXU or ( x• maxx);

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

if odd( above) and odd( below) then oddintsect:= not oddintsect; UHNXUHQFML SURZDG]F Z SUDNW\FH GR SU]HSHĄQLHQLD VWRVX

if odd( above) Ź RGG below) then HUURU ^ EĄ GQD V\WXDFMD `

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

end

end

end;

5\V :\SHĄQLHQLH

SU]\NĄDGRZHJR NRQ

9 1

WXUX Z\ZRĄDQLHP

5 1 6 1 7 1 8 1

procedury

ContourFilling( x, y)

y

0 0 1 0 2 0 3 0

ELDĄH OLF]E\

R]QDF]DM NROHMQRź

4 1

100 110

czarne cyfry - poziom

rekurencji).

x

47

48

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

FLHQLDQLH NV]WDĄWyZ

procedure ContourFilling( x, y: coordinate);

ó

1D SĄDV]F]\(QLH HXNOLGHVRZHM

procedure filling( x, y: coordinate; dy: integer);

var ax, ay, bx, by: coordinate; afind, bfind: Boolean;

Definicja:

begin

ó

Szkieletem Sk"Ś zbioru "Ś QD]\ZDP\ ]ELyU SXQNWyZ R QDVW SXMFHM

if pixel[ x, y]=empty then

ZĄDVQRFL

repeat

Ł

A B

Łś

ŁŹ∃ ∈Fr "Ś

Ł

ax:= x; ay:= y+ dy;





A


P ∈Sk "Ś " P ∈"Ś





AP


ŁŹ

= BP

Ł

bx:= x; by:= y- dy;





B


∃ ∈Fr "Ś

ŁŁŹ



Ł

C ∈Fr "Ś CP Ą AP

while pixel[ ax, ay]=empty do ax:= ax-1;

Ł

if axŹ x then ax:= ax+1;

ó

1D SĄDV]F]\(QLH G\VNUHWQHM

while pixel[ bx, by]=empty do bx:= bx-1;

if bxŹ x then bx:= bx+1;

Definicja:

afind:= pixel[ ax, ay]=empty;

ó

Piksel konturu nazywamy powtarzalnym JG\ VSHĄQLD RQ SU]\QDMPQLHM

bfind:= pixel[ bx, by]=empty;

jeden z trzech warunków:

pixel[ x, y]:=interior;

1. Z\VW SXMH FR QDMPQLHM GZXNURWQLH Z GURJDFK RSLVXMF\FK NRQWXU

x:= x+1;

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

while pixel[ x, y]=empty do

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

begin pixel[ x, y]:=interior;

Z FLJX SLNVHOL VWDQRZLF\P GURJ RSLVXMF NRQWXU

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

Definicja:

then

begin if afind

ó

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

then filling( ax, ay, dy)

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

else afind:=true;

ó

Szkieletem jest zatem zbiór otrzymany w wyniku wykonania algorytmu:

ax:= x

repeat ]QDOH]LHQLH NRQWXUX L XVXQL FLH ]H ]ELRUX W\FK SLNVHOL NRQWXUX

end;

NWyUH QLH V SLNVHODPL SRZWDU]DOQ\PL

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

until

QLH XVXQL WR *DGQHJR SLNVHOD

then

begin if bfind

then filling( bx, by,- dy)

ó

:DUXQNL Z\VW SXMFH Z GHILQLFML SLNVHOL SRZWDU]DOQ\FK NRQWXUX PR*QD

else bfind:=true;

RSLVDź Z]RUFDPL VVLHG]WZ

bx:= x

end;

A A A

A A A

5\V :]RUFH RGSRZLDGDMFH

A A C

x:= x+1

X

A X

pierwszemu () i trzeciemu*)

X K

end;

B B B

A

B

(ą) warunkowi.

B B C

if afind and bfind then filling( ax, ay, dy); 0° 90°

0° 90° 180° 270°

JG\ QLH V VSHĄQLRQH SR]RVWDĄH ZDUXQNL

0° 90° 180° 270°

if bfind

then begin x:= bx; y:= by; dy:=- dy end

ó X - piksel powtarzalny konturu;

K - piksel konturu;

else begin x:= ax; y:= ay end

until not ( afind or bfind)

ó A, B, C - grupa pikVHOL R]QDF]RQ\FK W VDP OLWHU PD W ZĄDVQRź L* FR

end;

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

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

begin

if pixel[ x, y]ŹHPSW\ then exit;

ó

%DGDQLH SRZWDU]DOQRFL Z\Paga zatem jedynie sprawdzenia

repeat x:= x-1 until pixel[ x, y]ŹHPSW\

QDMEOL*V]HJR VVLHG]WZD SLNVHOD NRQWXUX

x:= x+1;

filling( x, y,1)

ó

3RGHMFLH ZJ GHILQLFML DOJRU\WP FLHQLDQLD SURFHGXUD 'HI7KLQQLQJ

end;

ó

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

49

50

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

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

procedure Thinning;

procedure DefThinning;

^ FLHQLDQLH QD SRGVWDZLH GHILQLFML V]NLHOHWX `

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

begin

repeat

repeat

finish:=true; s:=0;

finish:=true;

repeat

AllContourTracing;

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

begin

begin neighbour( nx, ny, x, y, s);

e:=0; i:=0; m:=0;

if pixel[ nx, ny]=empty then

for s:=0 to 7 do

{ konstrukcja wzorców }

begin pattern:=false;

begin

r:=( s+2) mod 8;

e:= e shl 1; i:= i shl 1; m:= m shl 1; repeat

neighbour( nx, ny, x, y, s);

neighbour( nx, ny, x, y, r);

if pixel[ nx, ny]=empty

if pixel[ nx, ny]=empty then

then e:= e or 1

begin first:=false; second:=false;

else

begin i:= i or 1;

q:=( s+1) mod 8;

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

repeat

end

neighbour( nx, ny, x, y, q);

end;

{Ë NRQWUROD ZDUXQNX SRZWDU]DOQRFL Źf pixel[ nx, ny]ŹHPSW\ then first:=true; pattern:=( i= m) or {È NRQWUROD ZDUXQNX SRZWDU]DOQRFL `

q:=( q+1) mod 8

((( i and $70)Ź and (( i and $07)Ź and (( e and $88)=$88)) or until ( q= r) or first;

((( i and $1C)Ź and (( i and $C1)Ź and (( e and $22)=$22)) or q:=( r+1) mod 8;

((( i and $01)Ź and (( i and $7C)Ź and (( e and $82)=$82)) or repeat

((( i and $40)Ź and (( i and $1F)Ź and (( e and $A0)=$A0)) or neighbour( nx, ny, x, y, q);

((( i and $10)Ź and (( i and $C7)Ź and (( e and $28)=$28)) or if pixel[ nx, ny]ŹHPSW\ then second:=true;

((( i and $04)Ź and (( i and $F1)Ź and (( e and $0A)=$0A)) or q:=( q+1) mod 8

{È NRQWUROD ZDUXQNX SRZWDU]DOQRFL ąntil ( q= s) or second; ((( i and $41)Ź and (( m and $80)Ź and (( e and $08)Ź and pattern:= first and second

((( e and $41)=0) or ((( i and $30)Ź and (( i and $06)Ź or end;

((( i and $05)Ź and (( m and $02)Ź and (( e and $20)Ź and r:=( r+2) mod 8

((( e and $05)=0) or ((( i and $C0)Ź and (( i and $18)Ź or until ( r= s) or pattern;

((( i and $14)Ź and (( m and $08)Ź and (( e and $80)Ź and if pattern then pixel[ x, y]:=skeleton

((( e and $14)=0) or ((( i and $03)Ź and (( i and $60)Ź or else pixel[ x, y]:=contour

((( i and $50)Ź and (( m and $20)Ź and (( e and $02)Ź and end

((( e and $50)=0) or ((( i and $0C)Ź and (( i and $81)Ź

end;

if pattern then pixel[ x, y]:=skeleton else finish:=false for y:= miny to maxy do for x:= minx to maxx do end;

if pixel[ x, y]=contour then

for y:= miny to maxy do for x:= minx to maxx do begin pixel[ x, y]:=empty;

if pixel[ x, y]=contour then pixel[ x, y]:=empty finish:=false

else if not finish and ( pixel[ x, y]=skeleton) then pixel[ x, y]:=interior end;

until finish;

s:=( s+2) mod 8

for y:= miny to maxy do for x:= minx to maxx do until s=0

if pixel[ x, y]=interior then pixel[ x, y]:=skeleton until finish

end;

end;

51

52

12

12

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





Filtracja


12


13

123

konturu z zaznaczonymi

ó

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

2

2

pikselami powtarzalnymi.

2

3 3

1



VVLDGyZ QD QRZ ZDUWRź F]\OL NRORU SLNVHOD

&\IU\ ZVND]XM ZDUXQHN

1

2

ó

)LOWU\ GROQRSU]HSXVWRZH ą XVXZDQLH V]F]HJyĄyZ UR]P\ZDQLH REUD]X

2

3

definicji, z którego wynika

H

I

H

I

H

I

H

I

12

23

SRZWDU]DOQRź SLNVHOD NRQWXUX

G 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 G

2

- piksel figury

G 1 1 1 G

G 1 1 1 G

G 1 2 1 G

G 1 1 1 G

J

K

J

K

J

K

J

K

- piksel konturu

ó

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

H

I

H

I

- piksel powtarzalny konturu

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

1 1 1

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

J

K

J

K

1 2 2 1

FLHQLHQLD V]NLHOHW MDNR ]ELyU

H

I

H

I

1 2 3 3 2 1

G -1 -1 -1 G

G -1 0 1 G

otrzymany w wyniku cyklicznego

1 2 3 2 3 2 1

ó maska Prewitta

G 0 0 0 G

G -1 0 1 G

1 2 2 1 2 3 2 1

odrzucania punktów konturu nie

G 1 1 1 G

G -1 0 1 G

1 2 2 1

1 2 2 1

E GF\FK SXQNWDPL SRZWDU]DO

J

K

J

K

1 2 1

1 2 2 1

nymi (wg definicji szkieletu) –

H

I

H

I

H

I

1 2 2 1

1 2 2 1

procedura DefThinning. Cyfry

G -1 -2 -1 G

G -1 0 1 G

G -2 -1 0 G

1 2 2 1

1 2 1

ZVND]XM HWDS\ SRGF]DV NWyU\FK

ó maska Sobela

G 0 0 0 G

G -2 0 2 G

G -1 0 1 G

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

GDQ\ SLNVHO QDOH*\ GR NRQWXUX

G 1 2 1 G

G -1 0 1 G

G 0 1 2 G

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

J

K

J

K

J

K

1 2 2 1 1 1 1 1 1 1 2 2 1

- piksele figury

H

I

H

I

H

I

1 2 2 1

1 2 1

1 2 2 1

1 2 2 1

- piksele szkieletu

G -1 -1 1 G

G -1 1 1 G

G -5 -5 3 G

1 1 1

1 1 1

ó wykrywanie

G -1 -2 1 G

G -1 -2 1 G

G -5 0 3 G

QDUR*QLNyZ

G 1 1 1 G

G -1 1 1 G

G 3 3 3 G

J

K

J

K

J

K

3 4 1

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

H

I

H

I

H

I

3 5 4 1

FLHQLHQLD V]NLHOHW MDNR ]ELyU

G 0 -1 0 G

G -1 -1 -1 G

G 1 -2 1 G

3 4 7 5 4 1

ó laplasjan

G -1 4 -1 G

G -1 8 -1 G

G -2 4 -2 G

otrzymany w wyniku wykonania

3 4 6 6 6 5 1

DOJRU\WPX NODV\F]QHJR FLHQLDQLD

G 0 -1 0 G

G -1 -1 -1 G

G 1 -2 1 G

3 5 2 2 3 5 4 1

J

K

J

K

J

K

3 4 2 1

2 3 5 1

D ZL F QLH ZJ GHILQLFML V]NLHOHWX

ó

Filtry nieliniowe

3 5 1

3 5 4 1

– procedura Thinning. Cyfry

ó NRPELQRZDQH Z\NU\ZDMFH NUDZ G]LH

3 4 5 1

2 3 5 1

ZVND]XM NROHMQRź DQDOL]\

(np. pierwiastek sumy kwadratów pionowej i poziomej maski Prewitta)

3 7 5 1

3 5 1

pikseli jako konturu.

ó medianowy, maksymalny, minimalny

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

ó operacje logiczne

3 7 6 6 6 6 6 6 6 6 6 5 1

ó adaptacyjne

3 5 2 2 2 2 2 2 2 2 3 5 1

- piksele figury

3 4 5 1

3 5 1

3 5 2 1

2 3 4 1

- piksele szkieletu

3U]HNV]WDĄFHQLD PRUIRORJLF]QH

2 2 1

2 2 1

ó

(UR]MD ą RGU]XFHQLH SLNVHOL ]ELRUX VVLDGXMF\FK ] SLNVHODPL spoza zbioru.

ó

'\ODWDFMD ą GRGDQLH SLNVHOL VSR]D ]ELRUX VVLDGXMDF\FK ] SLNVHODPL ]ELRUX

53

54

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

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

ó

8NĄDG\ ZVSyĄU] GQ\FK

ó

8NĄDG\ ZVSyĄU] GQ\FK

ó

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

ó

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

Y

x

Z

Z

x r

= cos

*

ϕ

X

ϕ

x r

= cos

*

ϕ

z

z

y r

= sin

*

ϕ

y r

= sin

r

*

ϕ

y

y

x R

= cos sin

*

ϕ *

Ś

r

Ś

y R

= sin sin

*

ϕ *

Ś

Ś

R

R

ϕ

z R

= cos

y

*

Ś

x

X

Y

X

x

Y

r

ϕ

5\V 3UDZRVNU WQ\ L OHZRVNU WQ\ GZXZ\PLDURZ\ XNĄDG ZVSyĄU] GQ\FK

ϕ

r

x

y

Ł x'Łą

Ł xŁą

ó

3RGVWDZRZH SU]HNV]WDĄFHQLD OLQLRZH Z SU]HVWU]HQL

X

Y

p' =



, p =

ŁŻ Ł

ŁŻ Ł

5\V 3UDZRVNU WQ\ L OHZRVNU WQ\ WUyMZ\PLDURZ\ XNĄDG ZVSyĄU] GQ\FK

dwuwymiarowej:

Ł y'Ł

Ł yŁ

ó

SU]HVXQL FLH WUDQVODFMD R ZHNWRU

ó

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

b:

p' = I * p + b

Ł1 0Łą

gdzie I =

ó

SU]HVXQL FLH WUDQVODFMD R ZHNWRU b:

p' = I

ŁŻ

Ł

* p + b

Ł0 1Ł

Ł1 0 0Łą

Ł x'Łą

Ł xŁą

ŁŻ

Ł

ŁŻ Ł

ŁŻ Ł

ó

REUyW ZRNyĄ SXQNWX q R NW 3

p' = D

gdzie I = 0 1 0

p' = y' p



,

= y

* p + (I - D) * q

ŁŻ

Ł

ŁŻ Ł

ŁŻ Ł

Łcosϕ ł sinϕŁą

ŁŻŁ0 0 1ŁŁ

ŁŻŁ z'ŁŁ

ŁŻŁ zŁŁ

gdzie D = ŁŻ

Ł

Łsinϕ cosϕ Ł

ó

REUyW ZRNyĄ SXQNWX q:

p' = D * p + (I - D) * q

ó

MHGQRNĄDGQRź R VNDOL k Z]JO GHP SXQNWX q: p' = k

Ł d

d

d

xx

xy

xz Łą

* I * p + (1 - k) * q

ŁŻ

Ł

ó

V\PHWULD URGNRZD Z]JO GHP SXQNWX q:

p' = -I

gdzie D = d

d

d

przy czym: d FRV . ,

* p + 2 * q

ŁŻ yx

yy

yz Ł

uv

uv

ŁŻ d

d

d Ł

. NW SRPL G]\ REUD]HP RVL u L RVL v

ó

V\PHWULD RVLRZD Z]JO GHP SURVWHM q , q :

p' = G

Ł

uv

zx

zy

zz Ł

1

2

* p + h

1

Ł( x

x )

( y

y )

2 ( x

x ) ( y

y )

2 ł

2

1

ł 2 ł

2

*

1

2 ł

*

1

2 ł

1 Łą

G =

,

ó

MHGQRNĄDGQRź R VNDOL k Z]JO GHP SXQNWX q: p' = k * I * p + (1 - k) * q 2

2 ŁŻ

2

2 Ł

( x

x )

( y

y )

2 ( x

x ) ( y

y )

( y

y )

( x

x )

2 ł

1

+ 2 ł 1 Ł * 2 ł

*

1

2 ł

1

2 ł

1

ł 2 ł 1 Ł

ó

U]XW RUWRJRQDOQ\ QD SĄDV]F]\]Q z= a:

p' = F * p + h

2 * ( x * y

x

y )

( y

y )

x

x

Ł1 0 0Łą

Ł0Łą

Ł x 0 Łą

2

1 ł

*

1

2

Łł 2 ł 1 Łą

Ł 1 Łą

Ł 2 Łą

h =

czym

przy



,





q


, q

;

1 =

2 =

2

2 ŁŻ

Ł

ŁŻ Ł

ŁŻ Ł

ŁŻ

Ł

ŁŻ Ł

ŁŻ Ł

( x

x )

( y

y )

x

x

y

y

gdzie F = 0 1 0

, h = 0

q = y

2 ł

1

+ 2 ł 1 Ł 2 ł 1 Ł

Ł 1Ł

Ł 2 Ł

ŁŻ

Ł

ŁŻ Ł

ŁŻ 0 Ł

Łł1

Łą

0

Ł2 * aŁą

Ł1 0 Łą

Ł 0 Łą

ŁŻŁ0 0 0ŁŁ

ŁŻŁ aŁŁ

ŁŻŁ z 0 ŁŁ

dla osi x= a: G =



, h =

ŁŻ

Ł

ŁŻ

Ł ; dla osi y= b: G =



, h =

ŁŻ

Ł

ŁŻ

Ł

Ł 0 1Ł

Ł 0 Ł

Ł0 ł Ł

1

Ł2 * bŁ

ó

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

ó

rzut perspektywiczny z punktu q

z

a

0 ł

QD SĄDV]F]\]Q

Ł

Łś

z= a:

p' = F *

* (p ł q) + q + h

ŁŹŁŹ

ŁŁ

Ł z

z

0 ł

Ł

55

56

3RĄR*HQLH RELHNWyZ JHRPHWU\F]Q\FK Z]JO GHP VLHELH

z

Obrazy trójwymiarowe

ó

F ij( x, y) := ( yi- yj)* x - ( xi- xj)* y + xi* yj - xj* yi, P k := ( xk, yk).

ó

5HSUH]HQWDFMD RELHNWyZ JUDILF]Q\FK EU\Ą L ILJXU

ó

UyZQDQLH SURVWHM SU]HFKRG]FHM SU]H] SXQNW\ P

ó

DQDOLW\F]QD UyZQRFL QLHUyZQRFL QS ń xń2 &

1, P2: F12( x, y) = 0.

0ń yń2 & 0ń zń2 ∨ 0ń xń1 & 0ń yń1 & 2ń zń3.

ó

GOD SXQNWyZ SR SUDZHM VWURQLH SURVWHM SDWU]F ] SXQNWX P

x

y

1 Z VWURQ SXQNWX

ó

szkieletowD EU\ĄD ZLHORFLDQ ILJXUD ZLHORNW





P


QS ZLHU]FKRĄNL $ % &

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

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),

ó

UyZQDQLH SURVWHM SURVWRSDGĄHM SU]HFKRG]FHM SU]H] SXQNW P0:

. / 0 1 FLDQ\ $'&% &',+ %&+*

( x 1- x 2)* x + ( y 1- y 2)* y - ( x 1- x 2)* x 0 - ( y 1- y 2)* y 0 = 0.

EFGHIJ, EJNM, EMLF, KLMN, ABGFLK, AKNJID.

ó

konstruktywna (ang. constructive solid geometry) (obiekty elementarne +

ó

dwa odcinki P1P2 i P3P4 SU]HFLQDM VL "

RSHUDFMH VNĄDGDQLD QS SU]HVNDORZDQ\ R MHGQRNĄDGQRź V]HFLDQ

sgn(F12( x 3, y 3)) sgn(F12( x 4, y 4)) & sgn(F34( x 1, y 1)) sgn(F34( x 2, y 2)).

jednostkowy (tzn. 0ń xń1 & 0ń yń1 & 0ń zń1) ∪ SU]HVXQL W\ WUDQVODFMD

R ZHNWRU V]HFLDQ MHGQRVWNRZ\

ó

SRĄR*HQLH SXQNWX Q = ( x, y Z]JO GHP ZLHORNWD

ó

]D SRPRF GU]HZD yVHPNRZHJR EU\Ą\ OXE

ó

SURVWRNW R ERNDFK UyZQROHJĄ\FK GR RVL x

czwórkowego (figury); np. dla 0ń xń4 & 0ń yń4

minń xń xmax & yminń yń ymax.

& 0ń zń4: (0,0,0,0,(0,0,0,0,0,0,1,0),0,1,0).

ó

ZLHORNW Z\SXNĄ\ R ZLHU]FKRĄNDFK XSRU]GNRZDQ\FK ]JRGQLH ] UXFKHP

wskazówek zegara P1, P2,... P n: ∀ i∈{1,2,.. n} F i( i mod n + 1)( x, y) < 0.

ó

:LGRF]QRź FLDQ SRZLHU]FKQLH ]DVĄRQL WH

ó

ZLHORNW GRZROQ\ R ZLHU]FKRĄNDFK XSRU]GNRZanych zgodnie z ruchem

5\V 3U]HVĄDQLDQLH

wskazówek zegara P1, P2,... P n:

FLDQ QLH MHVW

ó

SRG]LDĄ QD ZLHORNW\ Z\SXNĄH

UHODFM SU]HFKR

ó

NRQWUROD SDU]\VWRFL OLF]E\ SU]HFL ź GRZROQHM SyĄSURVWHM Z\FKRG]FHM

GQL D E DQL

z punktu Q ] ERNDPL ZLHORNWD

DQW\V\PHWU\F]Q

ó

REOLF]HQLH VXP\ NWyZ σ := ę i=1.. n P iQP( i mod n + 1) (σ = 360°

(c).

a)

b)

c)

" Q QDOH*\ GR ZLHORNWD σ = 0° " Q QLH QDOH*\ GR ZLHORNWD

ó

DOJRU\WP\ RSHUXMFH QD SU]HVWU]HQL GDQ\FK

ó

SRĄR*HQLH RGFLQND Q

ó

analiza zwrotów wektorów normalnych dla wieORFLDQX Z\SXNĄHJR

1Q2 Z]JO GHP ZLHORNWD

ó

NRQWUROD XSRU]GNRZDQLD ZLHU]FKRĄNyZ GOD ZLHORFLDQX Z\SXNĄHJR

ó

SURVWRNW R ERNDFK UyZQROHJĄ\FK GR RVL

ó

algorytm Ricciego;

ó

algorytm Appela;

ó

ZLHORNW Z\SXNĄ\ FR QDMZ\*HM GZD SU]HFL FLD ] ERNDPL ZLHORNWD

ó

DOJRU\WP\ RSHUXMFH QD SU]HVWU]HQL REUD]X

ó

SRĄR*HQLH ZLHORNWD Z]JO GHP LQQHJR ZLHORNWD F] ź ZVSyOQD

ó

DOJRU\WP GOD SRZLHU]FKQL ]DGDQHM IXQNFM GZyFK ]PLHQQ\FK

ó

DOJRU\WP ] EXIRUHP JĄ ERNRFL

Definicja:

ó

DOJRU\WP SU]HJOGDQLD OLQLDPL SR]LRP\PL

ó

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 = y

5\V 3U]HJOGDQLH U]XWyZ FLDQ OLQLDPL

p, x < xp) przetnie l.

poziomymi.

Definicja:

ó

Odcinek a SU]HVĄDQLD odcinek b MHOL FR QDMPQLHM MHGHQ ] SXQNWyZ RGFLQND

ó

DOJRU\WP ] X*\FLHP GU]HZD F]ZyUNRZHJR "G]LHO L ]Z\FL *DM´

a SU]HVĄDQLD RGFLQHN b L RED RGFLQNL VL QLH SU]HFLQDM

b





a


y


l


y


Rys. Ilustracja





P


definicji


a)

b)

c)

d)

P'





c


SU]HVĄDQLDQLD

5\V 0R*OLZH SRĄR*HQLD U]XWX FLDQ\ Z]JO GHP SURVWRNWQHJR NDGUX

x

x

57

58

(OLPLQDFMD SRZLHU]FKQL ]DVĄRQL W\FK ] X*\FLHP GU]HZD F]ZyUNRZHJR





Wyznaczanie cieni


Rys. Wyznaczanie cieni.

ó

dwukrotne

rozstrzyganie

(UyGĄR

a)

b)

c)

d)

problemu

ZLDWĄD

5\V 0R*OLZH SRĄR*HQLD SURVWRNWQHJR NDGUX Z]JO GHP U]XWX FLDQ\

]DVĄDQLDQLD

ekran

ó

=DĄR*HQLD

0RGHORZDQLH RZLHWOHQLD

ó

FLDQ\ SRVRUWRZDQH RG QDMEOL*V]HM GR QDMGDOV]HM Z WDEOLF\ face:

ó

(UyGĄD ZLDWĄD SXQNWRZH OLQLRZH SRZLHU]FKQLRZH

const n ^ PDNV\PDOQD OLF]ED FLDQ `

type SRO\JRQV ^ RSLV NV]WDĄWX FLDQ\ `

ó

odbicia:

I

n

o QDW *HQLH RZLHWOHQLD >O[@

z

l

type faces = array [1.. n] of record colour:integer; polygon:polygons end; Rys. Zjawisko odbicia.

var background LQWHJHU ^ NRORU WĄD `

n - wersor normalny do powierzchni

var face: faces;

e

l - wersor kierunku padania promieni

ą ϕ ϕ

ó

7\S Z\OLF]HQLRZ\ PR*OLZH SRĄR*HQLD NDGUX Z]JO GHP U]XWX FLDQ\

z - wersor kierunku odbicia zwierciadlanego

e ZHUVRU NLHUXQNX SRĄR*HQLD REVHUZDWRUD

type location = (outside {a}, inside {b}, other {c,d});

ó

rozproszone:

kr* I o*FRV3 kr* I o*( n° l)

ó

FunkcMD VSUDZG]DMFD SRĄR*HQLH NDGUX Z]JO GHP U]XWX FLDQ\

ó

zwierciadlane:

kz* I o*cos m. kz* I o*( z° e) m m∈[1,200]

function Position( x 1, y 1, x 2, y 2: integer; var polygon: polygons): location;

ó

WĄR RZLHWOHQLRZH

kt* I o

ó

3URFHGXUD Z\SHĄQLDMFD NDGU GDQ\P NRORUHP

ó

FDĄNRZLWH QDW *HQLH ZLDWĄD RGELMDQHJR

procedure Rectangle( x 1, y 1, x 2, y 2, colour: integer); E

I = ( k

o

t + kr*( n° l) + kz*( z° e) m) * I o, gdzie I o = 2

ó

3URFHGXUD HOLPLQDFML SRZLHU]FKQL ]DVĄRQL W\FK

E o ZLDWĄRź *UyGĄD ZLDWĄD >FG@

r

r RGOHJĄRź RG (UyGĄD ZLDWĄD

procedure HiddenFace( x 1, y 1, x 2, y 2, first, last: integer; var face: faces); var x, y, i: integer;

&LHQLRZDQLH SRZLHU]FKQL EU\Ą ZLHORFLHQQ\FK

begin

ó

brak cieniowania VWDĄD LQWHQV\ZQRź RZLHWOHQLD FLDQ\

if first < 1 then first := 1; if last > n then last := n; HIHNW 0DFKD VNRNL RZLHWOHQLD QD NUDZ G]LDFK

for i := first to last do

ó

metoda Gourauda LQWHUSRODFMD ZDUWRFL QDW *HQLD ZLDWĄD RGELWHJR

case Position( x 1, y 1, x 2, y 2, face[ i]. polygon) of

ó

Z ZLHU]FKRĄNDFK ZLHORFLDQX ZHUVRU QRUPDOQ\ MHVW UHGQL

outside: begin { nic nie rób } end;

DU\WPHW\F]Q ZHUVRUyZ QRUPDOQ\FK FLDQ ]DZLHUDMF\FK ZLHU]FKRĄHN

inside:

begin { kadr w kolorze iWHM FLDQ\ `

ó

QD NUDZ G]LDFK OLQLRZD LQWHUSRODFMD QDW *HQLD QD SRGVWDZLH MHJR

Rectangle( x 1, y 1, x 2, y 2, face[ i]. colour); ZDUWRFL Z ZLHU]FKRĄNDFK E GF\FK NUDFDPL GDQHM NUDZ G]L

exit {procedure}

ó

ZHZQWU] FLDQ\ OLQLRZD LQWHUSRODFMD QDW *HQLD QD SRGVWDZLH MHJR

end;

ZDUWRFL Z QDMEOL*V]\FK ] ND*GHM VWURQ\ SXQNWDFK NUDZ G]L OH*F\FK QD

other:

begin ^ GDOV]\ SRG]LDĄ `

tej samej linii poziomej co dany punkt.

x := ( x 1+ x 2) div 2; y := ( y 1+ y 2) div 2;

ó

metoda Phonga - interpolacja wersorów normalnych;

HiddenFace( x 1, y 1, x, y, i, last, face);

ó

Z ZLHU]FKRĄNDFK ZLHORFLDQX ZHUVRU QRUPDOQ\ MHVW UHGQL

HiddenFace( x 1, y+1, x, y 2, i, last, face); DU\WPHW\F]Q ZHUVRUyZ QRUPDOQ\FK FLDQ ]DZLHUDMF\FK ZLHU]FKRĄHN

HiddenFace( x+1, y 1, x 2, y, i, last, face);

ó

QD NUDZ G]LDFK OLQLRZD LQWHUSRODFMD ZHUVRUyZ QRUPDOQ\Fh na

HiddenFace( x+1, y+1, x 2, y 2, i, last, face); SRGVWDZLH W\FK*H Z ZLHU]FKRĄNDFK E GF\FK NUDFDPL GDQHM NUDZ G]L

exit {procedure}

ó

ZHZQWU] FLDQ\ OLQLRZD LQWHUSRODFMD ZHUVRUyZ QRUPDOQ\FK QD

end

SRGVWDZLH W\FK*H Z QDMEOL*V]\FK ] ND*GHM VWURQ\ SXQNWDFK NUDZ G]L

end; {case}

OH*F\FK QD WHM VDPHM OLQLL SR]LRPHM FR GDQ\ SXQNW

Rectangle( x 1, y 1, x 2, y 2, background)

ó

OHG]HQLH SURPLHQL RGWZRU]HQLH GURJL ZV]\VWNLFK SURPLHQL ZLHWOQ\FK

end; {procedure}

SDGDMF\FK QD GDQ\ SLNVHO

59

60

Modelowanie krzywych i powierzchni

ó

NU]\ZH VNOHMDQH NU]\ZH JL WH DQJ splines)

Modelowanie krzywych:

ó

funkcja sklejana IXQNFMD JL WD VWRSQLD p MHVW WR IXQNFMD SRNU\ZDMFD

n Ł nŁś

VL SU]HG]LDĄDPL ] Uy*Q\PL ZLHORPLDQDPL VWRSQLD p, przy czym funkcja

ó

i



krzywe Béziera:

i





p


( t)

n

=

* t * 1

(

ę

ł t)

* p

dla



t

i

∈[ ]

1

,

0

,

0

ŁŹŁŹ ŁŁ

,

ta, jak i jej p SLHUZV]\FK SRFKRGQ\FK V FLJĄH





p


i


i - punkty kontrolne.

i=0 Ł Ł

ó

ZĄDVQRFL NU]\ZHM

ó

funkcje B-sklejane mń n, t ń t ń...ń t ń...ń t ń t

ń...ń t

ó

NUDFH Z SXQNWDFK

0

1

m

n

n+1

n+ m+1

p0, p n:

p0, n(0) = p0, p0, n(1) = p n.

1

Łą

t

dla ∈ [ ,

],

ó

+

styczna w punkcie p

i

t

i

t

1

0 do odcinka p0p1:

p'0, n(0) = n*(p1-p0).

n

( t) =

i



Ł

= ..

0 n + m

,

0 i

ó

styczna w punkcie p

0

t

dla ∉ [ ,

Łł

i

t

i

t

],

1

+

n do odcinka p n-1p n: p'0, n(1) = n*(p n-p n-1).

ó

mieFL VL Z XZ\SXNOHQLX SXQNWyZ NRQWUROQ\FK

t ł

t + + ł t

i = ..

0 n + m ł k

i

t

k i 1

ó

VSHĄQLD ]DOH*QRź p

n

( t) =

* n

( t)

ł

+

* n

( t

k, i

k

,

1 i

k ł ,

1 i



),

1

+

0, n( t) = (1- t)*p0, n-1( t) + t*p1, n( t).

t + ł

t + + ł

k = ..

0 m

k

i

t

i

k

1

i

t

i

1

+

wielom

ó

iany Bernsteina b

( t Fergusona

i



)

f



( t) :

n, i

n, i

ó

funkcje B-sklejane n

n

n

Ł

m, i ( i=0.. n)

n Łś

ł

VWDQRZL ED] GOD IXQNFML

q( t ) =

a * n

( t ).

ę





p


( t) =

b

( t)

i

n i

* p

b



,

( t)

ę

=

* t * 1

( ł t)

dla



i = 0.. n,

i

m, i

0, n

n, i

i

n, i

ŁŹŁŹ ŁŁ

i

sklejanych stopnia m

i =0

i=0

Ł Ł

RNUHORQ\FK Z SU]HG]LDOH

n

( t ) = 0 dla t [

∉ t , t

],

+ +

n

n

m, i

i

i m 1

[ t





p


( t) =

f

( t)

m, tn+1] i śsklejanych” dla

* q

f



,

( t)

ę

=

b

( t

dla



)

i

ę

= ..

0 n,

n

( t ) Ą 0 dla dowolnego t ,

0, n

n, i

i

n, i

n, k

ZDUWRFL SDUDPHWUyZ t

m, i

m+1,.., tn:

i=0

k = i

ó

ZĄDVQRFL

n

n

ę

= 1 dla ∈

Ł

n

( t )

t

[ t , t

].

n Łś Ł k ł 1Łś

m, i

m

n+1

k + i

k

ó

RJUDQLF]RQ\ L ]ZDUW\ QRQLN

f

( t) =

f



,

1

( t) =

*

* (

ę

ł )

1

* t

dla



i = 1.. n,

i =0

n,0

n, i

ŁŹŁŹ ŁŁ ŁŹŁŹ

ŁŁ

k

k

Ł Ł

ł i

ó

ZDUWRFL QLHXMHPQH

k = i

Ł

Ł

i

ó

unormowanie:

p =





q


dla




i

ę

= 0.. n

, q = p

, q = p ł p

dla



i

ł

= ..

1 n,

i

k

0

0

i

i

i 1

k =0

ó





krzywe sklejane


b


( t) = f

( t) ł f

( t

dla



)

i

+

= 0.. n ł

b



,

1

( t) = f

( t).

krzywe opisane parametrycznie funkcjami sklejanymi, przy czym

n, i

n, i

n, i 1

n, n

n, n

"VNOHMHQLDŹLHORPLDQyZ QDVW SXM GOD W\FK VDP\FK ZDUWRFL SDUDPHWUX

ó

wyznaczanie punktów krzywej:

ó

algorytm de Casteljau:

p0, n( t) = (1- t)*p0, n-1( t) + t*p1, n( t) n

for i := 0 to n do r

t

[

∈ t , t

],

i := p i;

ó

m

n+

krzywe B-sklejane

1

: q( t ) =

n

( t ) p

ę

,

for j := 1 to n do

m,

*

i

i

p - punkty kontrolne.

i 0

i

=

for i := 0 to n- j do r i := r i + t * (r i+1 - r i);

ó

zmiana punktu p i RGNV]WDĄFD NU]\Z ORNDOQLH W\ONR GOD t∈[ ti, ti+ m+1].

p0, n( t) := r0.

ó

algorytm Hornera:

ó

wyznaczanie punktów krzywej:

( t < 0,5)

n Ł n

n

Łś Ł t Łś i

l := 1; k := 1;





p


( t

ó

algorytm de Boora-Coxa dla t∈( t

n

) = 1

( ł t) *

,

0

ę ŁŹŁŹ ŁŁ*ŁŹ

Ł * p i

k, tk+1):

c := t / (1- t); s := p

Ł i Ł Ł1ł t Ł

for i := 0 to m do r

n;

i=0

i := p k- m+ i;

for i := 1 to n do

for j := 1 to m do

begin l := l

for i := 0 to m- j do r

*(1- t); k := k*( n- i+1) /i; s := c * s + k * p n- i end; i := r i + ( t- ti+ j)/( ti+ m+1- ti+ j) * (r i+1 - r i); p

q( t) := r

0, n( t) := l * s.

0.

ó

algorytm Hornera: ( t > 0,5)

n Ł n

n

Łś Ł1ł t Łś i

n

k

l := 1; k := 1;





p


( t

0 n

) = t *

,

ę ŁŹŁŹ ŁŁ*ŁŹ

Ł * p nł i

q( t ) =

n

( t ) p

ę

=

n

( t ) p dla t

ę

∈( t , t

)

m,

*

i

i

m,

*

i

i

k

k +1

c := (1- t) / t; s := p

Ł i Ł Ł t Ł

0;

i=0

i =0

i = k ł m

for i := 1 to n do

begin l := l* t; k := k*( n- i+1) /i; s := c * s + k * p i end; p0, n( t) := l * s.

61

62







Wyszukiwarka