postscript - hrvatski telekomfree-zg.t-com.hr/kpap/postcript.pdfv. Æiljak, k. pap: postscript,...

145
Vilko Æiljak Klaudio Pap PostScript

Upload: others

Post on 26-Feb-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

Vilko Æiljak • Klaudio Pap

PostScript

Page 2: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

vContents

Sadræaj:

I poglavljeprogramiranje grafike .......................................................................................................................................... 1

predgovor ................................................................................................................................. 3

PostScript ................................................................................................................................. 4

linije, pozicioniranje; moveto, lineto, stroke, showpage ....................... 6zatvorene staze, debljina linije; rlineto, closepath, setlinewidth ...... 8

popunjavanje, siva povrπina; fill, setgray ............................................................ 10

o zavrπetku linija; setlinecap ..................................................................................... 12spajanje linija; setlinejoin, setmiterlimit ............................................. 14

Isprekidane linije; setdash ............................................................................................. 17

kruæni oblici; arc ................................................................................................................ 18pomicanje ishodiπta stranice; translate ............................................................... 18

kruæni i tangentni oblici; arc, arcn, arcto ............................................................ 20

bazierova krivulja; curveto ............................................................................................ 22ponavljanja; repeat ......................................................................................................... 28

saËuvanje i obnavljanje grafiËkog stanja; gsave, grestore ................................... 30

rotacija; rotate ................................................................................................................ 30vodoravna i vertikalna transformacija; scale .................................................................. 32

viπestruko popunjavanje objekata po smjeru; eofill ................................................34

upravljanje memorijom; stack ......................................................................................... 36procedure, dupliciranje, oduzimanje; dup, neg .............................................................. 38

operacije na stacku; index ................................................................................................ 40

matematiËke operacije; add, sub, mul, div, sgrt, atan ........................... 42simetriËni kontinuitet bazierove linije ................................................................................... 44

ponavljanja s indeksom; for ............................................................................................... 46

programi mreæa ...................................................................................................................... 50procesne boje-CMYK; setcmykcolor ....................................................................... 54

RGB boje; setrgbcolor ............................................................................................. 56

HSB boje; sethsbcolor .............................................................................................. 58saturacija ................................................................................................................................ 60

prelazni tonovi ....................................................................................................................... 62

Page 3: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

vi

II poglavlje

programiranje tipografije ................................................................................................................................... 65

veliËina i definicija fonta; findfont, scalefont, setfont, show ........ 66

indeksi u polju; get ............................................................................................................. 70

prikaz ovojnice slova ili grafike; charpath ................................................................... 72spajanje grafike i staze; clip, newpath ..................................................................... 76

povrπine po stazi; strokepath ..................................................................................... 78

transformacije znakova iz fonta; makefont ................................................................... 80spacioniranje i podrezivanje; ashow ................................................................................. 82

πirina teksta i brojanje slova; stringwidth, length ............................................. 84

pozicioniranje teksta; widthshow, xyshow, awidtshow ............................... 86o kruænim ispisima tekst; kshow ....................................................................................... 88

operatori; eg, ne, gt, ge, lt, le ........................................................................ 90

logiËki operatori; and, or, xor, not ....................................................................... 91operatori polja; ....................................................................................................................... 92

operatori stringa; .................................................................................................................... 93

iskljuËivanje, poravnavanje, ureenje teksta ......................................................................... 94spajanja i insertiranja u tekstu ............................................................................................... 98

kontrola znakova (vokala) ................................................................................................... 102

Ëitanje i ispisivanje vanjskih tekstova; file, readstring, writestring,

closefile ..................................................... 104

manipulacije sa slovima unutar rijeËi .................................................................................. 106

dijeljenje rijeËi hrvatskog jezika .......................................................................................... 108prijelom teksta ..................................................................................................................... 111

III poglavlje

programiranje piksel grafike ........................................................................................................................... 117

slaganje piksla; image ..................................................................................................... 121definiranje veliËine slike sa scale komandom ............................................................... 123

definicija piksla preko inverzne transformacije .................................................................. 124

bit po pikslu i razina sivoÊe ................................................................................................. 134rezolucija ............................................................................................................................. 140

piksli u boji; colorimage ........................................................................................... 142

Page 4: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

a

programiranje grafike

PostScript

Vilko Æiljak • Klaudio Pap

I poglavlje

Page 5: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

3V. Æiljak, K. Pap: PostScript, programiranje grafike

Predgovor

Ovaj digitalni udæbenik namijenjen je uËenju programiranjaPostScript grafike, bez obzira da li se radi o studentima, uËeni-cima ili zaljubljenicima u raËunarsku grafiku i raËunarstvo.ObuhvaÊa se programiranje tipografije, boja i oblikovanjesloæenih grafiËkih rjeπenja. To je digitalni udæbenik o grafiË-kom jeziku za opis stranice koji je podloga mnogih programaod PageMakera, QuarkXPressa, FreeHanda, CorelDrawa doprograma koji su zaπtiÊeni i primjenljivi samo na raËunalimaza posebne namjene u podruËju multimedije koji ukljuËuju vi-deo, zvuk, crteæ, sliku i animaciju. Namjera nam je, a i duænostkao nastavnicima na studijima koji imaju raËunarsku grafiku,da ovaj digitalni udæbenik omoguÊi Ëitaocu ulaz u svijet tajan-stvenog PostScripta te omoguÊi rjeπavanje sloæenih grafiËkihsituacija. PostScript je dio kolegija iz raËunarske tipografije iraËunarske grafike koji se predaju na studijima: GrafiËkomfakultetu, studiju dizajna pri Arhitektonskom fakultetu, studijuposlovne informatike i studiju InformatiËkog dizajna. SliËnusmo publikaciju, ali u tiskanom obliku, napravili prije desetgodina kada smo objavili postupke dizajna PostScript fontovakoji su zbog specifiËnosti naπih znakova u to vrijeme otvaralinepotrebne diskusije: kako, gdje, s kojim pravima, da li je mo-guÊe, πto je zaπtiÊeno i mnoga druga pitanja. PostScript je ide-alni alat za sve one koji imaju volju eksperimentirati uraËunarskoj tipografiji, grafici, slici, rasterima, i bojama. Na-damo se da ovaj digitalni udæbenik bude osvjeæenje i stimula-tivni poËetak aktivnog programiranja grafike u πirem znaËenjute rijeËi. Primjere i naËin prezentacije kreirali smo onako kakosmo naπli najbolji odziv kod studenata za najlakπe razumijevanjeprogramiranja PostScripta.

Page 6: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

4

PostScript

Na poËetku æelimo prikazati kako PostScript jezik za opisstranice brzo i jednostavno prikazuje grafiku, a tek u drugomkoraku njegovu apstraktnu strukturu. Ne zahtjeva se da Ëitaocprethodno znade bilo kakvo programiranje raËunala, ali da imasklonosti prema grafiËkoj umjetnosti i tipografiji. Napravili smoprimjere sa objaπnjenjima kako program radi, πto je omoguÊilobaπ prikazano rjeπenje i na πto treba pripaziti da se ne realiziraæeljena grafika. PostScript je programski jezik kao i Basic, Pas-cal, C te ima sliËnu strukturu komandi ali ipak, namijenjen jesamo podruËju oblikovanja grafike na stranicama za tisak.PostScript ima svoj specifiËni grafiËki rjeËnik koji je nastaorazvojem raËunarske tipografije, fotosloga, i raËunarske repro-fotografije.

Da bi se odredio grafiËki oblik slova ili slike koristi se koman-dni jezik kojim se odreuje "staza" ili put te "operator" i "operan-di" (parametri). Operatori, a mi Êemo ih nazivati "komande"pisane su kurentnim i verzalnim slovima na engleskom jeziku(na pr. image, show, fill) ili kraticama (na primjer: arc,def, div) izvedenim iz engleske rijeËi. VeÊina komandi jesastavljena od nekoliko engleskih rijeËi ili kratica ali tako da sete rijeËi i kratice piπu kompaktno kao jedna tipografska rijeË(na pr. setlinewidth, rlineto). Parametri, ili operandisu najËeπÊe numeriËke veliËine pisane ispred komandi, aodreuju naËin djelovanje komande kao na primjer: gdjekomanda poËinje, zavrπava, koliko traje, kako se prikazuje, kakodjeluje. U pisanju se jednakovrijedno koriste razmak izmeurijeËi, tabulator ili kôd za novi redak, kao razdjelna oznaka izme-u parametara i komandi. Niz komandi moæe se kontinuiranopisati u istom retku. Upotreba tabulatora i "cariage return" (cr)kôda, omoguÊuje preglednije pisanje programa. Znak postotka% odreuje poËetak komentara koji sluæi programeru kao pod-sjetnik, ili za olakπavanje snalaæenja u programu i taj komentarnema utjecaja ne PostScript komande. Komentar prestaje aktivi-ranjem (cr) prelaza u novi redak.

Page 7: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

5V. Æiljak, K. Pap: PostScript, programiranje grafike

Koordinatni sustav PostScripta je zasnovan u mjernim veliËi-nama "toËka" sa X/Y kordinatama, a poËetak je u donjem lije-vom dijelu stranice. Standardna veliËina toËke (tako je i u naπimprimjerima) odreena je preko inËa. InË je podijeljen u 6 dijelovanazvanih pica (pajk - engleski cicero), a pica u 12 toËaka. TakoinË ima 72 toËke, odnosno jedna toËka je 0.353 mm. Koristilismo decimalnu podjelu pa primjeri imaju mreæu 100 x 100toËaka ili 35,3 x 35,3 mm.

Program i grafike u prvim primjerima, koje su rezultat pro-gramskih komandi i parametara prikazane su crnom bojom.Rasteri koji doËaravaju sivilo, a rezultat su programskihkomandi takoer su prikazani crnom bojom. Da bi se boljesnalazili u poloæaju grafike, dodat je preko grafike koordinatnisustav u plavoj boji. Program te mreæe objaπnjen je tek sarutinama ponavljanja i petlje. Komentar i neke numeriËkeveliËine koje su nuæne da bi se pojasnile komande docrtane sucrvenom bojom.

Svi primjeri se piπu u tekst editoru koji moæe zapisati tekst uËistoj ASCII formi, odnosno bez ikakvih tipografskih zahvata.Da bi se vidio rezultat tako pisanog PostScript programa moæese poslati prema PostScript printeru sa programom za downloadsa bilo kojeg operativnog sustavu, ili se moæe vidjeti na sustavi-ma koji podræavaju Display PostScript. Predlaæemo kao najlakπerjeπenje rad preko programa Ghostscript koji je PostScript Level2 interpreter za Mac, Windows, Unix, Amiga i Atari platforme,a sve informacije o njemu mogu se naÊi na internetu:

ftp.cs.wisc.edu/pub/ghost/aladdinhttp://www.cs.wisc.edu/~ghost/index.html

Svi primjeri su originalni i planirani s namjerom da Ëitaocπto lakπe ue u svijet PostScripta. Digitalni udæbenik imadigitalne indeks veze i digitalne veze preko sadræaja. »itaocupreporuËamo prouËavanje i Ëitanje od poËetka jer su primjerigraeni od jednostavnijih prema sloæenijima ili preko digitalnihveza do æeljenog dijela s ciljanim uËenjem.

Page 8: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

6

movetolinetostroke

showpage

NajËeπÊi poËetak PostScript stranice je moveto komanda. Ovakomanda postavlja poËetak novog puta grafike u toËki koja jeodreena parametrima pisanim ispred komande moveto.

150 50 moveto

Sama komanda nije prikazala neku toËku na ekranu veÊ je samoodredila poÊetak nekog puta. Prvi primjer oblikovat Êemo tako danacrtamo nekoliko povezanih pravaca. Duæine se povlaËe od toËkedo toËke koje su odreene sa obje koordinate: horizontalna i vertikalna.To omoguÊuje iscrtavanje istim alatom kose, vodoravne i okomitelinije. Od toËke koja je posljednja odreena, povlaËi se duæina dotoËke koja je definirana komandom lineto. ProπeÊemo se do toËakana pozicijama 200 50 pa dalje do toËaka 300 70 i 50 150.

Premda su ove komande odredile put spojivπi Ëetiri toËke, ipaknisu postale vidljive. Sama linija je bezdimenzionalna dokle joj se nepridruæi debljina. Komanda stroke omoguÊuje prikazivanje linija.Sama komanda nema parametara. Stroke iscrtava liniju prema prijepostavljenim karakteristikama za debljinu, boju, sivilo. Ako prethodnonije niπta odreeno tada Êe se iscrtati crna linija debljine jedne toËke.GrafiËka stranica πalje se na ispisni ureaj: ekran, pisaË, fotoosvjetlji-vaË, veÊ prema tome kako je ispis zamiπljen da se realizira. Komandashowpage briπe postojeÊe stanje i postavlja parametre za ispis slije-deÊe stranice.

% primjer br. 3200 400 moveto100 300 lineto200 200 lineto300 300 lineto200 400 linetostrokeshowpage

% primjer br. 1150 50 moveto200 50 lineto300 70 lineto50 150 linetostroke

% primjer br. 2200 480 moveto60 420 lineto25 260 lineto120 140 lineto280 140 lineto375 260 lineto340 420 lineto200 480 linetostroke

x y moveto

x y lineto

stroke

showpage

Page 9: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

7V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

3

Page 10: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

8

rlinetoclosepath

setlinewidth

50 250 moveto 300 0 rlineto0.5 setlinewidth stroke

50 275 moveto 300 0 rlineto0.75 setlinewidth stroke

50 300 moveto 300 0 rlineto1 setlinewidth stroke

50 325 moveto 300 0 rlineto1.25 setlinewidth stroke

50 350 moveto 300 0 rlineto1.5 setlinewidth stroke

50 375 moveto 300 0 rlineto2 setlinewidth stroke

50 400 moveto 300 0 rlineto3 setlinewidth stroke

50 425 moveto 300 0 rlineto5 setlinewidth stroke

100 100 moveto80 -40 rlineto20 100 rlineto-140 80 rlinetoclosepath2 setlinewidthstroke

250 50 moveto 0 150 rlineto6 setlinewidth stroke

275 50 moveto 0 150 rlineto7 setlinewidth stroke

300 50 moveto 0 150 rlineto8 setlinewidth stroke

325 50 moveto 0 150 rlineto9 setlinewidth stroke

350 50 moveto 0 150 rlineto10 setlinewidth strokeshowpage

Nakon πto se odredi polazna toËka, pomicanje do sljedeÊe toËkeza neku udaljenost horizontalno ili vertikalno postiæe se komandomrlineto. Ili, parametri komande rileneto odreuju za kolikoje pomak u vodoravnom ili okomitom smjeru od zadnje toËke gdjesmo se zaustavili. U primjeru je nacrtan Ëetverokutni lik koji poËinjeu toËki 100 100 te nastavlja desno za 80 toËaka i dolje za 40 toËaka,zatim u toËku: gore za 100, desno za 20 pa u treÊu toËku: gore za 80i lijevo za 140 toËaka. Viπestruko koriπtenje komande rlinetooteæava precizno raËunanje poloæaja poËetne toËke. Trebali bi sadaizraËunati koliki je pomak gore ili dolje, lijevo ili desno da doemodo poËetne toËke. Zatvaranje lika demonstriramo komandomclosepath. Komanda nema parametre veÊ potraæi polaznu toËkuu nizu prije zadnjeg pozicioniranja startne toËke, na primjer toËkanastala komandom moveto, i povuÊe liniju do nje. Ako debljinalinije nije definirana ona je debela jednu toËku kao πto smo imalilinije na preaπnjoj stranici. Æeljena debljina linije odreuje sekomandom setlinewidth. U primjerima horizontalnih linijademonstriraju se debljine linija od 0.5 do 5 toËaka, a u vertikalnimlinijama su linije debljine od 6 do deset toËaka.

x y rlineto

closepath

d setlinewidth

Page 11: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

9V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

0.5 p

0.75 p

1 p

1.25 p

1.5 p

2 p

3 p

5 p

6 p 7 p 8 p 9 p 10 p

Page 12: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

10

fillsetgray

150 300 moveto 0 200 rlineto0.2 setgray stroke

200 300 moveto 0 200 rlineto0.3 setgray stroke

250 50 moveto 0 450 rlineto0.4 setgray stroke

300 50 moveto 0 450 rlineto0.6 setgray stroke

350 50 moveto 0 450 rlineto0.7 setgray stroke

400 50 moveto 0 450 rlineto0.9 setgray stroke

1 setgray180 220 moveto 320 220 lineto320 250 lineto 180 250 linetoclosepath fillshowpage

0.5 setgray100 100 moveto80 -40 rlineto50 100 rlineto-160 80 rlinetoclosepath fill

0 setgray140 100 moveto60 40 rlineto20 140 rlineto-140 -30 rlineto fill

1 setgray140 130 moveto20 0 rlineto0 20 rlineto-100 50 rlineto fill

8 setlinewidth50 300 moveto 0 200 rlineto0 setgray stroke

100 300 moveto 0 200 rlineto0.1 setgray stroke

Komanda fill omoguÊuje popunjavanje i bojanje likova.Bojanje linija i zatvorenih povrπina, u æeljenim razinama sivog, postiæese komandom setgray. Komanda setgray postavlja vrijednostsvjetline sivog tona. Ima jedan parametar koji odreuje inverznostsive: 1 oznaËuje suprotno od prirodnog tiska, tj. potpuno svjetloodnosno bijelo. Vrijednost parametra 0.9 odreuje 90% svjetli ton avrijednost nula je isËezavanje svjetline tj. lik Êe se prikazati u crnomtonu. Linijama su demonstrirane svjetline odreene komandomsetgray.

U primjerima Ëetverokuta date su kombinacije razliËitih situacijaprekrivanja povrπina. Redosljed pisanja komandi u ovim primjerimaodreuje redosljed prekrivanja povrπina. Prva je povrπina siva, drugacrna a treÊe bijela. »etvrta povrπina napisana je na kraju programa iona kao bijela prekriva dio crne povrπine i dvije sive vertikalne linijepa ove izgledaju kao da imaju prekid. Druga i treÊa povrπina nisuzavrπile sa komandom closepath veÊ samo komandom fill.

fill

s setgray

Page 13: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

11V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

0 0.1 0.2 0.3

0.4 0.6 0.7 0.9

Page 14: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

12

setlinecap

p setlinecap

Linije se iscrtavaju komandom stroke. Njihova debljina seodreuje komandom setlinewidth. PoËetni i zavrπni oblik linije,πto postaje vaæno kod debljih linija, moæe se oblikovati komandomsetlinecap. Komanda ima jedan parametar koji moæe imativrijednosti:

0 - kvadratni rub koji zavrπava s definicijom linije,

1 - zaobljeni rub radijusa poludebljine linije i

2 - kvadratni zavrπetak ali produæen za polovicu debljine linije.

Dok se prva dva oblika koriste kod samostojeÊih linija, zadnjioblik vaæan je u oblikovanju spoja vertikalnih i vodoravnih linijakakve spojeve najËeπÊe imamo u slaganju tabliËnih linija. Uprimjerima je preko linija povuËena tanka bijela linija da bi sedemonstrirao centar linije. U programu ispisanom na ovoj straniciizostavljene su komande za crtanje tih bijelih linija. Ostali primjeripokazuju spajanje kosih i okomitih linija u razliËitim situacijama.Svaka linija koja se iscrtava sa lineto ili rlineto morala jeprije imati definiran poËetak sa moveto naredbom da bi se izbjegloautomatsko spajanje koje inaËe PostScript ima definirano po poËetku(vidi komandu setlinejoin).

%primjer br.40 setlinecap230 30 moveto 300 100 lineto300 100 moveto 400 100 linetostroke

1 setlinecap230 70 moveto 300 140 lineto300 140 moveto 400 140 linetostroke

2 setlinecap230 110 moveto 300 180 lineto300 180 moveto 400 180 linetostroke

%primjer br.50 setlinecap250 350 moveto 300 450 lineto300 450 moveto 350 350 lineto350 350 moveto 250 350 linetostroke showpage

%primjer br.120 setlinewidth 0 setlinecap50 110 moveto 130 0 rlinetostroke1 setlinecap50 150 moveto 130 0 rlinetostroke2 setlinecap50 190 moveto 130 0 rlinetostroke

%primjer br.20 setlinecap300 200 moveto 300 300 lineto300 300 moveto 400 300 linetostroke

%primjer br.32 setlinecap100 400 moveto 100 0 rlineto200 400 moveto 0 -100 rlinetostroke

Page 15: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

13V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

3

4

5

Page 16: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

14

setlinejoinsetmiterlimit

NaËin spajanja linija rjeπava se komandom setlinejoin.Komanda ima jedan parametar koji moæe poprimit 3 vrijednosti:

0 - linije se spajaju tako da se njihova slika produæuje do tvorbeπiljastog vrha.

1 - dvije linije zatvaraju se kruænim oblikom Ëiji dijametar je jednakdebljini linije i

2 - vrh spoja dviju linija je okomit na simetralu kuta spajanja, aduæina je jednaka debljini linije (tupo spajanje).

PoËetno stanje u PostScriptu za naËin spajanja je 0 tj. πiljastospajanje i zbog toga u prvom primjeru gdje se prikazuju naËini spajanjana poËetku nema komande 0 setlinejoin za πiljasti naËin jerse ona podrazumijeva.Miterlimit je maksimalni dozvoljeni omjer izmeu duæine

dijagonalne linije i debljine linije u πiljastom spoju πto ovisi o kutuspajanja. On odreuje kada Êe se πiljasto spajanje pretvoriti u tupo. Udrugom se primjeru za zadani kut spajanja tek sa parametrom 3komande setmiterlimit prekinulo formiranje πiljastog vrha.To znaËi da Êe se za kuteve za koje je dijagonala spoja tri i viπe putaveÊa od debljine linije primjeniti tupo spajanje, a za manje πiljastospajanje. Duljina dijagonalne linije se dobije iz omjera debljine linijei sinusa polovice kuta izmeu linija u spoju.%primjer br.1

20 setlinewidth200 250 moveto 100 250 lineto200 320 lineto stroke

1 setlinejoin200 150 moveto 100 150 lineto200 220 lineto stroke

2 setlinejoin200 50 moveto 100 50 lineto200 120 lineto stroke

%primjer br.20 setlinejoin250 200 moveto 350 200 lineto250 270 lineto stroke

3 setmiterlimit250 100 moveto 350 100 lineto250 170 lineto stroke

%primjer br.310 setmiterlimit200 350 moveto 220 470 lineto240 350 lineto stroke

6 setmiterlimit 20setlinewidth 0 setgray300 350 moveto 320 470 lineto340 350 lineto stroke

%primjer br.410 setmiterlimit 1 setlinecap50 480 moveto 100 380 lineto150 480 lineto stroke

showpage

p setlinejoin

p setmiterlimit

Page 17: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

15V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1 2

34

Page 18: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

16

setdash[C

1 B2...C

n Bn] p setdash

10 setlinewidth %primjer br.1[10 5 15 10] 0 setdash110 100 moveto 110 300 linetostroke[4 2 3 3] 0 setdash150 100 moveto 150 300 linetostroke[20 5 10 5] 0 setdash190 100 moveto 190 300 linetostroke2 setlinewidth %primjer br.2[5 3 2 4] 2 setdash50 50 moveto 250 50 linetostroke[6 2] 0 setdash50 60 moveto 250 60 linetostroke[8 4 4 2] 3 setdash50 80 moveto 250 80 linetostroke[8 3 4 2] 8 setdash50 90 moveto 250 90 linetostroke

8 setlinewidth %primjer br.3[20 10] 0 setdash80 320 moveto 150 480 linetostroke[20 10] 0 setdash 1 setlinecap120 320 moveto 190 480 linetostroke[15 15] 0 setdash 1 setlinecap160 320 moveto 230 480 linetostroke[10 15] 0 setdash 1 setlinecap200 320 moveto 270 480 linetostroke[5 15] 0 setdash 1 setlinecap240 320 moveto 310 480 linetostroke[0 15] 0 setdash 1 setlinecap280 320 moveto 350 480 linetostroke20 setlinewidth %primjer br.4[0 20] 0 setdash 1 setlinecap250 280 moveto 380 100 linetostroke showpage

Linija se najËeπÊe prikazuje kao puna, ali moguÊe ju je pretvoritiu crtkanu, toËkastu ili kombinaciju kraËih i duæih crtica. IzmjeniËnoiscrtavanje crnih i bijelih crtica postiæe se komandom setdash.Komandi prethodi niz brojeva u uglatoj zagradi, koji odreuju ele-mentarnu kombinaciju crne, bijele, crne i bijele crtice od kojih Êe seformirat isprekidana linija. Parametrom p se precizira skraÊenje prvelinije. Svi podaci duæina zadaju se u toËkama. Tako na primjerkomanda [5 3 2 4] 2 setdash odreuje da Êe se linija, bezobzira na debljinu, sastojati od ponavljanja dviju razliËitih crtice idviju razliËitih bjelina izmeu crtica: prva crtica duæine 5 toËaka,bjelina duljine 3 toËke, crna crtica duljine 2 toËke i bjelina od 4 toËke.Prva crtica, ali samo u prvom javljanju, skraÊena je za 2 toËke.

Primjerima se demonstriraju i druge moguÊnosti definiranja crticakao naprimjer samo jedna crtica i jedna praznina πto je najËeπÊi oblikkoriπtenja komande setdash. S komandom setlinecap moguse dobiti i ostale vrste isprekidanih linija kao npr. toËkasta. Komandase vraÊa u stanje pune linije tako da se u uglatoj zagradi ne definiraniti jedan podatak.

Page 19: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

17V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

5

3

1 4

2

Page 20: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

18

arctranslate

x y r L1 L2 arc

x y translate

Likovi: krug, kruænica, isjeËci kruga i njihovi dijelovi programirajuse komandama arc, arcn i arcto. Komande arc i arcnimaju 5 parametara: koordinate srediπta i radijus zadaju se u toËkama,a kut poËetka i kut zavrπetka luka kruga zadaju se u stupnjevima.

Prvi krug na primjeru nalazi se na poziciji x = 300, y = 100, r = 30a luk polazi od nule do 360 stupnjeva.

Drugi i treÊi krug pomaknuti su (translatirani) u novi koordinatnisustav. Komanda translate ima dva parametra: horizontalni =140 i vertikalni = 250 toËaka. Crni krug zadan je tako da mu je centaru ishodiπtu novog koordinastnog sustava. TreËi krug s radijusom 80toËaka, odmaknut je lijevo za 20 i gore za 30 toËaka od ishodiπta.Luk kruga zatvara povrπinu od nula do 270 stupnjeva sa smjeromsuprotan kazaljki na satu. Krug je popunjen bijelom bojom - najviπistupanj svjetline.

»etvrti i peti kruæni oblici pomaknuti su od prethodnog ishodiπtaza joπ 250 po x osi i 100 po y osi. Lukovi ne zatvaraju polaznu izavrπnu toËku u komandi arc veÊ se zavrπna toËka luka spaja scentrom kruga pomoÊu komande lineto a cijeli oblik se zatvarasa poËetnom toËkom komandom closepath.

Polumjesec, kao πesti lik, ima ishodiπte pomaknuto od ishodiπtaprimjera 4 i 5 za -200 i -100 toËaka. Kamanda fill spaja poËetaki kraj luka definiranog od 240 do 320 stupnjeva. Centar je u komandiodreen sa (0, 0), a stvarna pozicija zbog viπekratnog koriπtenjakomande translate je: x=140 + 180 -200 = 120, z = 250+ 150 -130 =270 (mali kruæiÊ u polukrugu treÊeg primjera).

% primjer br.1350 100 30 0 360 arc fill

% primjer br.2140 250 translate0 0 120 0 360 arc fill

% primjer br.31 setgray-20 30 70 0 270 arc fill

% primjer br.40.5 setgray

180 150 translate0 0 90 30 270 arc0 0 lineto closepath fill% primjer br.51 setgray-20 20 50 0 120 arc-20 20 lineto closepath fill

% primjer br.6-200 -130 translate0.7 setgray0 0 220 240 320 arc fillshowpage

Page 21: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

19V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

140 250

-20 30

1

2

3

4

5

6

Page 22: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

20

arcarcnarcto

Luk u arcn komandi ima smjer kretanja kazaljke na satu. Lukovipod brojem 1 koncentriËno su poslagane linije od 70 do 280 stupnjeva,izvedene komandom arc. Isti kutevi u komandi arcn prikazani suprimjerom broj 2. Primjer 2 pomaknut je lijevo prema dolje. TreÊiprimjer demonstrira zatvaranje lika omeenog s dva kruæna luka gdjeput unutarnjeg luka ide obrnuto kazaljke na satu, a vanjski luk ide ideu smjeru kazaljke na satu.

»etvrti primjer demonstrira komandu arcto. Komanda jeodreena s dvije toËke i radijusom: x1 y1 x2 y2 r arcto.Prva toËka povezuje zadnje stanje (u primjeru dato komandommoveto koja je na primjeru oznaËena kao x0 y0), druga toËka jesmjer tangente kraja luka. Za razliËite radijuse u petom primjeruilustriramo tangentne zavrπetke kruænih linija za iste polazne i zavrπnetoËke u komandi arcto.

200 30 70 90 0 arcnclosepathstrokegrestore

gsave %primjer br.40 350 moveto 2 setlinewidth100 400 0 550 40 arctostrokegrestore

gsave %primjer br.5380 220 moveto 1 setlinewidth200 250 200 450 50 arctostroke380 220 moveto200 250 200 450 100 arctostroke380 220 moveto200 250 200 450 150 arctostrokegrestore

showpage

gsave %primjer br.1300 150 translate0 0 10 70 280 arcstroke0 0 25 70 280 arcstroke0 0 40 70 280 arcstrokegrestore

gsave %primjer br.2100 100 translate0 0 10 70 280 arcnstroke0 0 25 70 280 arcnstroke0 0 40 70 280 arcnstrokegrestore

gsave %primjer br.3230 30 moveto200 30 30 0 90 arc200 100 lineto

xy r L1 L2 arcn

x1y1 x

2y2 r arcto

Page 23: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

21V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

280°

70°

280°

70°

r

5

1

2

3

4

Page 24: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

22

curveto

280 300 moveto320 330 400 200 280 100curvetostroke

0 200 translate100 230 moveto150 230 50 100 100 50curveto150 0 150 150 200 100curvetostroke

showpage

x1y1 x

2y2 x3y3 curveto

Bezierova krivulja osnova je mnogih zaobljenih linija kao naprimjer, ovojnica slovnih znakova. Bezierova krivulja je polinomtreÊeg stupnja. Definirana je s Ëetiri toËke: prva, od koje toËkepoËinje, zadnja, gdje zavrπava krivulja te dvije tangentne toËkekoje odreuju smjer napredovanja linije.

Komanda curveto koja opisuje stazu Bezierove krivulje imasamo tri para x/y toËaka. Prva Bezierova toËka se ne zadaje veÊje to ona toËka koja je zadnja ostala u upotrebi. U prvom primjerupolazna toËka je odreena komandom 280 300 moveto. Krivu-lja corveto u istom primjeru ima tri toËke s koordinatama: prvipar x1/y1 toËaka je vrh tangente od prve Bezierove toËke (320330), drugi par x2/y2 (400 200) je vrh tangente zadnje BezierovetoËke, a treÊi par x3/y3 (280 100) su koordinate zadnje BezierovetoËke.

Drugi primjer demonstrira tangentno spajanje dvije Bezierove kri-vulje. Primjer je podignut za 200 toËaka (0 200 translate).Spoj dvije krivulje je u toËki 100 50 koja je odreena kao zadnjatoËka prve krivulje. Druga krivulja u programu je napisana odmahposlije prve krivulje. Vrhovi tangenata u toj toËki su simetriËnopostavljenji. Dvije Bezierove krivulje imaju glatki tangentniprelaz.

Page 25: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

23V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

x1 y1

x2 y2

x3 y3

Page 26: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

24

%primjer br. 40 100 translate 0 setgray100 170 moveto40 150 140 250 150 200 curveto170 100 250 250 30 arcto250 250 linetostroke showpage

U treÊem primjeru, oblikovanja automobila s Bezierovimkrivuljama, koristimo viπe komandi i povezujemo nekoliko linija.Prva grupa komandi je zatvoren grafiËki oblik popunjen svjetlimrasterom datim komandom 0.7 setgray i izbijanjem: 1setgray. Druga grupa komandi su te iste Bezierove krivulje alirealizirane kao crne linije debljine 2 toËke.

U povezivanju komandi corveto i arcto treba voditi briguo tangentnim nastavcima kao i primjerima viπestrukog povezivanjakomandi curveto. »etvrti primjer demonstrira povezivanje zadnjeBezierove toËke sa kruænom linijom. Vektor tangente kruæne linijeje dvostruko duæi od vektora zadnje Bezierove toËke ali je postavljentoËno u suprotnom smjeru. Treba primjetiti da je duæina izmeu dvijekrivulje iscrtana bez da je definirana nekom programskom rutinom.

70 100 moveto %primjer br. 370 130 120 140 180 140 curveto % hauba220 200 300 185 360 120 curveto % krov370 100 350 100 340 100 curveto % pozadina340 80 300 80 300 100 curveto % kotaË140 100 lineto % pod140 80 100 80 100 100 curveto % kotaËclosepath 0.7 setgray fill

70 100 moveto70 130 120 140 180 140 curveto220 200 300 185 360 120 curveto370 100 350 100 340 100 curveto340 80 300 80 300 100 curveto140 100 lineto140 80 100 80 100 100 curvetoclosepath 0 setgray 2 setlinewidthstroke

%1. prozor180 140 moveto220 175 230 170 240 170 curveto240 140 lineto closepath%2. prozor260 170 moveto270 170 280 170 320 140 curveto260 140 lineto closepath1 setgray fill

curvetoarcto

Page 27: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

25V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

r

3

4

Page 28: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

26

-100 100 translate0.5 0.5 scale276 -6 moveto376 -6 514 129 599 221 curveto643 203 650 175 664 123 curveto672 93 681 0 750 0 curveto789 0 839 24 896 79 curveto921 104 961 144 961 150 curveto961 154 952 156 957 156 curveto960 156 955 150 877 76 curveto843 46 803 20 776 20 curveto718 20 771 179 612 238 curveto695 333 774 427 855 520 curveto871 517 887 516 906 516 curveto1027 516 1153 590 1153 660 curveto1153 687 1130 704 1098 704 curveto1004 704 911 605 849 548 curveto800 568 803 710 659 710 curveto536 710 363 584 363 451 curveto363 380 398 334 473 334 curveto611 334 679 496 679 590 curveto679 594 678 597 675 597 curveto671 597 672 590 667 570 curveto646 483 555 354 467 354 curveto401 354 375 384 375 449 curveto375 570 533 698 643 698 curveto747 698 699 570 833 526 curveto

750 448 668 342 592 243 curveto569 251 524 254 497 256 curveto333 254 193 141 193 58 curveto193 15 227 -6 276 -6 curveto%unutarnje krivulja donja579 229 moveto515 149 378 6 273 6 curveto236 6 205 22 205 61 curveto205 132 338 242 492 242 curveto512 242 557 238 579 229 curveto%unutarnje krivulja gornja871 536 moveto922 593 1013 692 1099 692 curveto1121 692 1141 684 1141 659 curveto1141 595 1014 528 916 528 curveto901 528 886 532 871 536 curveto%kvacica872 668 moveto872 668 858 668 858 668 curveto842 749 791 826 791 830 curveto791 831 792 832 793 832 curveto810 832 867 744 874 727 curveto918 773 992 832 1001 832 curveto1004 832 1005 831 1005 830 curveto1005 821 919 751 872 668 curvetostrokeshowpage

PostScript tipografija je rijeπena Bezierovim krivuljama. Ilu-striramo rukopisno slovo Æ iz fonta Shelly iz FS biblioteke. Podaciza krivulje su prepisani iz originalnog slova pomoÊu Fontographe-ra.

Ispis slova je smanjen na polovicu sa komandom 0.5 0.5scale. Pismovna linija cijele tipografske biblioteke nalazi sena visini od 0 toËaka. Slika slova Æ ima pomak u desno za 200toËaka. Smjer unutarnjih linija, suprotan je smjeru vanjskih linija.

Page 29: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

27V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

0

200

400

600

800

400 600 800 1000200

Page 30: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

28

%primjer br.2-200 50 translate6 { 0 0 moveto0 0 40 60 210 arc 0 0 lineto30 -10 translate stroke } repeat

%primjer br.3-250 0 translate20 { 0 0 moveto50 30 rlineto stroke 0 -10 translate } repeatshowpage

Grafike raene pomoÊu raËunala prepune su likova s ponavljanimoblicima. Dizajneri najËeπÊe planiraju ponavljanje crteæa po nekompravcu, krivudavom putu, kruænici, simetriji. Komande repeat ifor imaju u PostScriptu sliËna pravila kao i u drugim programskimjezicima. U dosadaπnjim primjerima imali smo ponavljanje likovaupisujuÊi podatke poloæaja, pomaka i multipliciranjem komandi. Ali,ako nam je namjera da viπestruko i precizno oblikujemo lik upravilnom pomaku tada je raËunalo idealno da samo izraËuna tekorake. Automobil ponavljamo 10 puta sa stalnim pomakom za 30vodoravnih i 35 vertikalnih toËaka. Komanda repeat poËinjebrojem planiranih ponavljanja ispred vitiËaste zagrade. Sama komandapiπe se nakon zatvorene vitiËaste zagrade. BrojaË repeat petlje sene moæe dohvatiti i iskoristiti kao varijabla unutar same petlje zarazliku od for petlje.

SliËan primjer je i sa kruænim isjeËkom koji se pomiËe za x 30, i y-10 toËaka, 6 puta. U treÊem primjeru dvadeset puta ponavljamo kosuliniju u vertikalnom smjeru odozgo prema dolje.

repeat

%primjer br.110 {180 140 moveto220 175 230 170 240 170 curveto240 140 lineto closepath260 170 moveto270 170 280 170 320 140 curveto260 140 lineto closepath stroke70 100 moveto70 130 120 140 180 140 curveto220 200 300 185 360 120 curveto370 100 350 100 340 100 curveto340 80 300 80 300 100 curveto140 100 lineto140 80 100 80 100 100 curvetoclosepath stroke30 35 translate } repeat

n proc repeat

Page 31: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

29V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

3

Page 32: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

30

gsavegrestorerotate

gsave

grestore

kut rotate

%primjer br.1gsave50 100 translate3 { 0 0 moveto100 100 100 -100 200 0 curvetostroke30 rotate } repeatgrestore

%primjer br.2gsave150 300 translate10 { -100 100 30 0 360 arcstroke-5 rotate } repeatgrestore

%primjer br.3gsave300 400 translate37 { -20 0 moveto 20 10 rlineto

40 -20 rlineto 40 20 rlineto20 -10 rlineto closepath fill5 rotate 1 setgray-20 0 moveto 20 10 rlineto40 -20 rlineto 40 20 rlineto20 -10 rlineto closepath fill5 rotate 0 setgray} repeat grestore

%primjer br.4gsave300 200 translate8 { 0 0 moveto50 50 50 -50 100 0 curvetoclosepath fill45 rotate } repeatgrestore showpage

Programiranje grafiËkog puta sa komandama kao πto su moveto,lineto, translate i rotate definira jedno grafiËko stanje.U njemu je zapamÊena i odabrana debljina linija, svjetlina, vrstaspajanja i sve ostale komande koje se brinu za naËin iscrtavanja puta.Kada se upotrebe komande stroke ili fill vrπi se iscrtavanje potim parametrima i definiranom putu. Nakon njih nestati Êe informacijao prethodno programiranom putu, a svi ostali parametri ostajusaËuvani.

Ako æelimo zapamtiti put i naËin iscrtavanja za kasniju upotrebumoæemo upotrebiti komandu gsave za spremanje tekuÊeg grafiËkogstanja i komandu grestore koja obnavlja (restaurira) zadnjespremljeno grafiËko stanje. Tako je moguÊe spremati viπe grafiËkihstanja i restaurirati ih po redoslijedu spremanja. To se izvrπava prekostacka grafiËkih stanja. Komanda gsave sprema sve parametre iputanju na vrh stacka, a grestore ih skida sa stacka i Ëini ih opetaktuelnim. Stanje koje se skinulo sa grestore viπe ne postoji nastacku pa ukoliko ga æelimo opet kasnije, moramo ga opet spremitisa gsave. Zbog toga je poæeljno iza svakog grestora izvrπiti igsave Ëime slobodno moæemo mijenjati tek obnovljeno stanje, ada se joπ uvijek moæemo vratiti na poËetno.

Komanda rotate zakreÊe koordinatni sistem po pozitivnozadanom kutu u stupnjevima u smjeru suprotnom od sata. Ako seæeli izvrπiti rotacija objekta, prvo se mora zakrenuti koordinatni sistempa tek onda izvrπiti programiranje objekta u zakrenutom sistemu.

Page 33: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

31V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

3

4

Page 34: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

32

scale

%primjer br.1gsave5 setlinewidth300 400 translategsave1 1 scale-50 -50 moveto100 0 rlineto0 100 rlineto-100 0 rlinetoclosepath strokegrestoregsave1.5 1.5 scale-50 -50 moveto100 0 rlineto0 100 rlineto-100 0 rlinetoclosepath strokegrestoregsave0.5 0.5 scale-50 -50 moveto100 0 rlineto0 100 rlineto-100 0 rlinetoclosepath strokegrestoregrestore

%primjer br.21 setlinewidthgsave150 150 translate4 { 45 rotate1 2 scale

0 0 25 0 360 arcstroke} repeatgrestore

%primjer br.31 setlinewidthgsave115 350 translate2 {12 { 0 0 moveto50 50 50 -50 100 0 curveto30 rotate} repeat-1 1 scale} repeat strokegrestore

%primjer br.44 setlinewidthgsave300 100 translate1 1 scale 0 0 moveto100 200 rlineto1 0.5 scale 0 0 moveto100 200 rlineto0.5 -0.7 scale 0 0 moveto100 200 rlineto-0.5 -0.2 scale 0 0 moveto100 200 rlineto-1.2 -1.8 scale 0 0 moveto100 200 rlinetostrokegrestoreshowpage

Proπirivanje, suæavanje, smanjivanje, poveËavanje i zrcaljenje ito proporcionalno ili neproporcionalno postiæe se komandom scale.Njezina dva parametra sx i sy su faktori s kojima se mnoæi nezavisnox i y koordinata grafiËkog koordinatnog sistema pa se dobiva suæenaili proπirena x ili y os. VraÊanje u prvobitno stanje koordinatnogsustava iza komande scale je najjednostavnije upotrebom gsavei grestore komandi. Tako imamo saËuvan referentni poËetak zadaljnje programiranje.

U prvom primjeru su kvadrati crtani istim komandama, ali sa istimfaktorima skaliranja (sx=sy). Debljina linija se takoer transformiralaovisno o faktorima. Drugi primjer crta elipse koje se dobivaju sa1 2 scale komandom koje se superponiraju u svakom krugurepeat petlje. Tako se je promjenio odnos x osi naprema y osi izpoËetne kruænice zadane komandom arc. U svakom krugu petljezarotirao se koordinatni sistem i na njemu primjenio scale i arc.

Zrcaljenje objekta se vrπi promjenom orijentacije koordinatnogsistema sa upotrebom negativnih faktora scale komande. U treÊemprimjeru se sa unutraπnjom repeat petljom s brojaËem 12 iscrtalomeusobno zakrenutih 12 krivulja, a sa vanjskom repeat petljoms brojaËem 2 se sve to joπ jednom ponovilo sa -1 1 scalekomandom. Tako je dobiveno 12 listova iscrtanih od zrcalnih Bezierkrivulja. U Ëetvrtom primjeru se prikazuje igra sa linijama upotrebomrazliËitih scale komandi.

sx sy scale

Page 35: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

33V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

2

3

4

Page 36: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

34

eofill

eofill

%primjer br.10.5 setgraygsave50 400 translate0 0 moveto80 0 rlineto0 80 rlineto-80 0 rlinetoclosepath50 30 moveto60 0 rlineto0 30 rlineto-60 0 rlinetoclosepathgsave fill grestore0 setgray strokegrestore

%primjer br.2gsave180 400 translate0 0 moveto

80 0 rlineto0 80 rlineto-80 0 rlinetoclosepath50 30 moveto0 30 rlineto60 0 rlineto0 -30 rlinetoclosepathgsave fill grestore0 setgray strokegrestore

%primjer br.3gsave310 400 translate0 0 moveto80 0 rlineto0 80 rlineto-80 0 rlinetoclosepath50 30 moveto

60 0 rlineto0 30 rlineto-60 0 rlineto closepathgsave eofill grestore0 setgraystrokegrestore

%primjer br.40.7 setgraygsave200 200 translate0 0 moveto0 0 120 0 360 arc1 -0.1 0.4 { dup scale-100 -100 moveto200 0 rlineto0 200 rlineto-200 0 rlineto closepath} for eofillgrestoreshowpage

U PostScriptu se moæe na viπe naËina definirati kako Êe se preklapatidva objekta i njihovo razliËito ponaπanje nakon naredbe fill. Ako suobje staze objekata programirane u istom smjeru onda Êe i njihov presjekimati isti setgray iznos (primjer br.1 ). U primjeru br. 2 malipravokutnik crtan je u suprotnom smjeru pa je dobivena "rupa" na mjestupresjeka.

Isti efekt se dobiva ako se crtaju oba objekta u istom smjeru, ali seumjesto komande fill upotrijebi komanda eofill (even-odd fill).Ona radi tako πto se odluka, da li Êe neki presjek biti ispunjen ili ne,donosi pomoÊu zamiπljenog polupravca od toËke iz presjeka dobeskonaËnosti i broja prelaska preko staza objekata do vanjske okoline.Ako je taj broj paran tada taj presjek nema ispune, a ako je neparan imaispunu. U primjeru br. 4 na slici mogu se prebrojati prelasci preko stazaza nekoliko preklapanja pa je razumljiv naËin njihove ispune ovisno oparnom ili neparnom broju prelaska.

Primjetimo kako je u primjerima br. 1,2 i 3 upotrebljen gsave igrestore za iscrtavanje linija pravokutnika Ëime ponovnoprogramiranje staze za komandu stroke postaje suviπno. Ta mjestasu oznaËena u programu crvenom toËkom.

Page 37: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

35V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1 2 3

1

2

3

4

5

6

7

1

2

3

4

1

2

1

2

4

321

Page 38: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

36

stack U PostScriptu postoje Ëetiri vrste stacka: stack operanada, stackrijeËnika, stack grafiËkih stanja i izvrπni stack. Stack operanada jespremnik (memorijski lanac) podataka i rezultata za skoro svePostScript komande (operatore). Stack rijeËnika uspostavlja paroveizmeu imena varijabli i procedura sa njihovim sadræajem. StackgrafiËkih stanja pamti programirani put i njegov naËin iscrtavanja.PostScript izvrπava samo ono πto je na vrhu izvrπnog stacka koji musluæi kao radni stack. On je praktiËki transparentan za programera zarazliku od ostalih.

PostScript jezik zasnovan je na stack procedurama i to najviπe zastack operanada. Interpreter dodaje novi objekt (parametre, imena)iz programa i postavlja ga na vrh stacka gurajuÊi prijaπnje vrijednostiu stacku za jedno mjesto dublje. Kada PostScript interpreter pokreneizvrπenje komande uzima se podatak sa vrha stacka i uklanja.GledajuÊi s pozicije programa tada program Ëita parametre s lijevana desno, a komanda uzima podatke s desna na lijevo.

Na primjer za 100 200 moveto imat Êemo ove situacije nastacku:

1. 100

2. 100 200 -> vrh stacka

3. ----- (prazno iza komande)

NajËeπÊi operatori (komande) za rad sa sadræajem stacka su exch,dup, pop, clear, roll, neg, index i copy.

exch zamjenjuje pozicije prva dva podatka na stackuAko je stanje na stacku: 70 20 0 300 40,nakon exch, stanje je: 70 20 0 40 300.

dup komanda duplicira podatak na vrhu stackaAko je stanje na stacku: 30 40 700,nakon dup, stanje je: 30 40 700 700.

pop komanda briπe podatak na vrhu stackaAko je stanje na stacku: 60 50 100,nakon pop, stanje je: 60 50 .

clear komanda briπe sve podatke na stackuAko je stanje na stacku: 30 90 60,nakon clear, stanje je: ----- .

n p roll komanda rotira n gornjih elemenata na stacku p putaAko je stanje na stacku: 70 20 0 300 40,

Page 39: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

37V. Æiljak, K. Pap: PostScript, programiranje grafike

nakon 4 2 roll, stanje je: 70 300 40 20 0.neg komanda mijenja predznak podatku na vrhu stacka

Ako je stanje na stacku: 0 500 30 70,nakon neg, stanje je: 0 500 30 -70.

i index komanda duplicira i-ti element na stacku i postavlja kopiju na vrh stacka, a ostalepodatke gura doljeAko je stanje na stacku: 30 70 120 50 40,komanda 3 index Êe napraviti: 30 70 120 50 40 70.

n copy komanda duplicira n podataka sa vrha stackaAko je stanje na stacku: 50 40 30 60 80,komanda 3 copy Êe napraviti: 50 40 30 60 80 30 60 80.

SlijedeÊi primjeri pokazuju stanje stacka za pojedine komande po koracima izvrπavanja:

10 20 add komanda zbrajanja

1. 10

2. 10 20 (potrebno stanje za add)3. 30 (rezultat)

30 50 sub komanda oduzimanja1. 302. 30 50(potrebno stanje za sub)3. -20 (rezultat)

30 70 80 90 0 40 curveto1. 302. 30 703. 30 70 804. 30 70 80 905. 30 70 80 90 06. 30 70 80 90 0 40 ( curveto)7. ----- (prazno iza komande)

10 -50 atan komanda koja daje kut Ëija je tangentna toËka (10, -50)1. 102. 10 -50 (potrebno stanje za atan)

3. 168.690063 (rezultat)10 5 add /x exch def definiranje varijable x koja sadræava rezultat kom. add1. 102. 10 5

3. 154. /x 155. 15 /x6. ----- (prazno iza komande def)

-20 10 mul komanda mnoæenja1. -202. -20 10 (potrebno stanje za mul)3. -200 (rezultat)

10 3 div komanda dijeljenja1. 102. 10 3 (potrebno stanje za div)3. 3.33333325 (rezultat)

10 3 idiv komanda za cijelobr. dijelj.1. 102. 10 3 (potrebno stanje za div)3. 3 (rezultat)

5 3 mod daje ostatak dijeljenja 5/31. 52. 5 3 (potrebno stanje za mod)3. 2 (rezultat)

Page 40: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

38

-mark-100-mark- 1150100-mark--mark-300-mark- 2250300-mark-300250-mark-300300250-mark- 30300300250-mark- 4300250-mark-250300-mark-0250300-mark- 52500300-mark- 6300-mark- 7-300-mark-0-300-mark--mark- 8-mark- 9-mark- 103-mark- 11-mark- 12

/s { mark pstack pop } def

/okvir {exch s dup s 0 s 3 rlineto s 4exch s 0 s exch s 5 rlineto s 6neg s 7 0 s rlineto sclosepath s 8} bind def100 s 1 150 s moveto s300 s 250 s 2 okvir s 93 s 10 setlinewidth s 11 stroke s 12

showpage

dup, negprocedure

(okvir)Procedure su skup rutina sa korisnikovim imenom a upotrebljavaju

se, pozivaju, kao i bilo koja PostScript komanda. Ilustracija proce-dure nazvane okvir pokazana je primjerom iscrtavanja pravokutnikatako da se zadaje samo dijagonalna toËka, toËka nasuprot polaznojtoËki. BuduÊi da je time dato dovoljno podataka moguÊe je rjeπenjeiscrtavanja puta od poËetne toËke preko ostalih toËaka pravokutnika.Svaki programer bi na svoj naËin rjeπio proceduru, redoslijed po-stavljanja i uzimanja vrijednosti u stacku prije izvrπenja komanderlineto ili lineto. U slijedeÊe dvije stranice data su dva rjeπenja.Na poËetku programa data je kratka procedura s imenom "s" zaispis stanja stacka i teksta "mark". Plavom bojom oznaËena su mje-sta ispisa stacka, a crvenom bojom veza programa sa ispisom toËkena lijevom dijelu stranice.

Page 41: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

39V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

Page 42: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

40

-mark-50-mark-10050-mark- moveto0350200350-mark- 2200 y0 x350-mark- 30-350-mark- 40505050-mark- 2 I50050-mark- 3 I0-50-mark- 4 I05010050-mark- 2 II100050-mark- 3 II0-50-mark- 4 II012080120-mark- 2 III800120-mark- 3 III0-120

/s { mark pstack pop } def

/okvir {1 index 0 s 2 rlineto 0 exch s 3 rlinetoneg 0 s 4 rlinetoclosepath} bind def50 s 100 s 1 moveto350 200 okvir3 setlinewidth stroke

1 setlinewidth0 300 translate50 50 moveto 50 50 okvir stroke I50 110 moveto 50 100 okvir stroke II120 120 moveto 120 80 okvir fill III200 50 moveto 30 40 okvir stroke IV300 100 moveto 70 20 okvir fill V300 140 moveto 10 60 okvir stroke VI-45 rotate300 140 moveto 10 60 okvir stroke VII

showpage

-mark- 4 III0304030-mark- 2 IV40030-mark- 3 IV0-30-mark- 4 IV0702070-mark- 2 V20070-mark- 3 V0-70-mark- 4 V0106010-mark- 2 VI60010-mark- 3 VI0-10-mark- 4 VI0106010-mark- 2 VII60010-mark- 3 VII0-10 4 VII

Index

Procedura drugog rjeπenja okvira koristi komanduindex. Tom se komandom duplicira i prebacuje nekipodatak iz sredine stacka na vrh stacka. Index komandakopira broj udaljen od vrha stacka za toliko, kolika jevrijednost (index) u prvom stacku. Taj broj stavlja na prvomjesto, a stari broj na vrhu (index) briπe se. Ilustracijeradi, ispisali smo stanje stacka za sedam okvira. Zadnjiokvir je rotiran za 45 stupnjeva. Podaci u stacku za tajokvir su u jedinicama novog - rotiranog koordinatnogsustava.

Page 43: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

41V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

140

300

45°

Page 44: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

42

clear/polumjer 50 def/siva 1 defgsave100 150 translate7 {siva 0.10 sub/siva exch defsiva setgray0 0 moveto0 0 polumjer 0 360 7 div arc0 0 linetopolumjer 10 add/polumjer exch defclosepath fill360 7 div rotate} repeatgrestore

gsave0 setgray

300 200 translate0 0 40 40 mul 80 80 mul add sqrt100 -50 atan -80 -20 atan arcn5 setlinewidthstrokegrestore showpage

MatematiËke operacije: zbrajanje, oduzimanje, mnoæenje, dijelje-nje, korjen, arkus-tanges imaju parametre sliËno kao i u drugim pro-gramskim jezicima. Zbrajanje uzima dva podatka s vrha stacka, zbrajaih, a rezultat stavlja na vrh stacka. SliËno je i sa komandama sub,mul i div. U prvom primjeru, kut za sedam isjeËaka dobiva sedijeljenjem 360/7 (360 7 div). Za svaki isjeËak smanjuje sesvjetlina: (siva - 0.1) za deset posto: siva 0.1 sub. Radijus sepoveËava za10 toËaka: polumjer 10 add. Za svih sedam isjeËakaispisana su stanja stacka sive boje (crvena toËka).

Drugi korjen se izraËunava od podatka na vrhu stacka, a rezultatse stavlja na to isto mjesto. Arkus-tangens izraËunava se na temeljudva podatka trigonometrijske kruænice kao πto je ilustrirano na drugomprimjeru. PoËetak luka je i drugom kvadrantu dat podacima:atan (100/-50) =116,5°. Kraj luka je u treÊem kvadrantu odreenpodacima: atan (-80 / -20) = 255,9°. Radijus se izraËunava iz trokutas katetama duljina 80 i 40 toËaka: sqrt (802 + 402). Prije aktiviranjacrtanja luka ispisano je stanje u stacku (crvena toËka).

addsubmuldivsqrtatan

a b add

a b sub

a b mul

a b div

a sqrt

a b atan

Page 45: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

43V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

51.43°

-20

100

-5040

89.4

1

80

-80

a

bd = 360°/7

tg a = 100/-50tg b = -80/-20r = sqrt (40 + 80 )=89.41

2 2

0.9/siva0.8/siva0.699999928/siva0.599999905/siva0.499999911/siva0.399999917/siva0.299999923/siva

255.96376116.56504889.442718500

Page 46: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

44

-mark-500100-mark-40010045050400300-mark-40040010045050400300-mark- 1240040010045050400300-mark- 280040010045050400300-mark-380040010045050400300-mark- 345080040010045050400300-mark- 4

35040010045050400300-mark- 5350/y40010045050400300-mark- 640010045050400300-mark- 71400100450

50400300-mark- 810040010045050400300-mark- 92100400

400300-mark- 1315040010045050400300-mark- 14150/x400100

420040010045050400300-mark- 125020040010045050

10045050400300-mark- 1020040010045050400300-mark- 11

A

A1

45050400300-mark- 1540010045050400300-mark- 16350 y150 x

A2

/s { mark pstack pop } def/krivulja {dup s 1 2 s 2 mul s 3 s 3 index s 4 sub s 5/y exch s 6 def s 71 s 8 index s 9 2 s 10 mul s 11 4 s 12 index s 13sub s 14/x exch s 15 def s 16 curvetox y s 17} def

100 500 s moveto300 400 50 450 100 400 s krivulja140 320 100 300 krivulja200 250 150 200 krivulja150 100 200 100 krivulja250 200 200 200 krivuljastrokeclearshowpage

SimetriËni kontinuitet Bazierove linijeSimetriËni kontinuitet Bazierove krivulje moæe se postiÊi

napredovanjem krivulje po tangenti suprotnog smjera, iste duæineudaljenosti od posljednje Bazierove toËke. Formirali smo procedurus imenom krivulja za koju se zadaju samo dvije toËke: treÊa iËetvrta Bazierova toËka. Prva tangentna toËka se izraËunava (premacrteæu) relacijama:

x1=x

0+a= x

0+(x

0-x) = 2x

0-x

y1=y

0-b = y

0 - (y-y

0) = 2x

0-y

Page 47: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

45V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

250 100

200 100

100 150

60 280

150 350

a a

b

b

x1 y1

x0 y0

x y

x2 y2

x3 y3

Iscrtavanje se obavljakomandom curveto.

IzraËunavanje koordinata x1 i y

1

obavlja se nakon uËitavanja svihvrijednosti standardno

definiranih toËaka za komanducurveto u stackovima kao πto jeto dato u A. Isto stanje Êe biti ustanjima A1 i A2. Stanje A2 je

ono netom prije iscrtavanjakrivulje. PostScript relacije

programirali smo:

x=1 index 2 mul 4 index sub

y= dup 2 mul 3 index sub

Prije poËetka procedure zakoju se zadaju samo dvije

posljednje toËke, mora bitiodreen poËetak puta (moveto) iprva toËka komande curveto. Na

kraju procedure "krivulja", uvarijablama x i y ostaju

vrijednosti prve tangentne toËkeza slijedeÊu krivulju, a te se

vrijednosti postavljaju na vrhstacka.

U ovom primjeru je dat ispisstanja stacka za prvu krivulju s

zavrπnim stanjem. Plavim icrvenim slovima i brojkama

date su pozicije u programu iispisu stacka kako bi se Ëitaocsigurnije snalazio u koracima

procedure.

Page 48: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

46

for

/s { mark pstack pop } def%primjer br.1100 60 300 s 1 { s 2 200 s 3 moveto400 500 lineto stroke } for

%primjer br. 2400 -10 0 { dup 350 s 4 moveto200 exch s 5 lineto stroke } for

showpage

-mark-30060100 1-mark-100 2-mark-200100 3-mark-160 2A-mark-200160 3A-mark-220 2B-mark-200220 3B-mark-280 2C-mark-200280 3C-mark-350400400 4E-mark-400200 5E-mark-350390390 4'-mark-390200 5'-mark-350380380 4™-mark-380200 5™-mark-

.............................

3502020 4-mark-20200 5-mark-3501010 4X-mark-10200 5X-mark-35000 4Z-mark-0200 5Z

Petlja s komandom for kontrolira brojaË petlje za koji su dategranice i korak napredovanja sliËno kao u drugim programskimjezicima, definirano kao na primjer: for ... to ... next. Komanda forima 4 parametra: poËetna vrijednost, korak poveÊanja, konaËnavrijednost i brojaË petlje te proceduru izvrπavanja komande. PoËetnavrijednost odmah postavlja brojaË (trenutna vrijednost petlje) na vrhstacka (2 2A 2B 2C). BrojaË for petlje u PostScriptu moæe imativrijednost cjelobrojnu, necjelobrojnu, pozitivnu i negativnu. BrojaËse moæe poveËavati ili smanjivati. Prije prvog poËetka for proce-dure briπu se tri podatka iz stacka (1). U prvom primjeru komandamoveto koristi vrijednost for petlje za poziciju x. Komandamoveto miËe dvije vrijednosti u stacku. PoËetkom slijedeÊeg krugapetlje na vrhu stacka postavlja se vrijednost slijedeÊeg brojaËa petlje.

Drugi primjer koristi vrijednost brojaËa petlje dva puta. Zbog togaje ta vrijednost duplicirana (4). Prije iscrtavanja linije E uvaa se xpozicija kraja linije. Za drugu grupu linija ispisane su vrijednostistacka (4 i 5) u programu za prve tri linije i za zadnje tri linije (Z).

Page 49: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

47V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

Pr. 1

Pr. 2

E

A B C

Z

Page 50: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

48

%primjer br.1350 -10 200 { /j exch def j 300 350 j sub add j 6 div 0 360 arcstroke }for

%primjer br.2400 -25 150 {50 250 moveto100 350 150 3 index 200 300 curvetostroke }for pstack clear

%primjer br.3150 150 translate0.9 -0.2 0.3 { dup dup setgray scale50 -75 moveto200 0 rlineto 0 150 rlineto -200 0 rlineto closepathfill }forshowpage

for Ako se brojaË petlje æeli viπestruko koristiti unutar petlje tadapredlaæemo da se brojaË upiπe u neku varijablu. U prvom primjeruvrijednost brojaËa je stavljena u varijablu j koja se koristi kao xkoordinata srediπta kruænice. Nadalje, u relaciji y koordinate:y=300+(350-j) te u izraËunavanju radijusa: r=j/6. U svakom krugupetlje j se smanjuje za 10 od poËetnih 350 do 200.

U drugom primjeru y koordinata druge tangentne toËke Bezierovekrivulje ima vrijednost brojaËa petlje. Postavlja se na poËetak stackau momentu kada je bila gurnuta na Ëetvrto mjesto uËitavanjemparametara 100, 350 i 150. Na kraju izvrπavanja Bezierove krivulje ustacku je ostala stara vrijednost brojaËa. Poslije svih krugova petljeostale su na stacku sve vrijednosti brojaËa. To bi se trebalo uklonitibrisanjem te vrijednosti, na primjer, poslije komande curvetododati komandu pop. Nakon kraja petlje stavili smo komandu clear.

U treÊem primjeru, vrijednost brojaËa koristi se tri puta. Jednom,da odredi svjetlinu (setgray Êe iskoristiti vrh stacka), a drugi itreÊi puta kao parametri u komandi scale. Zbog toga se vrijednostbrojaËa dva puta kopira (dup dup setgray scale).

Ispis pstack:150175200225250275300325350375400

Page 51: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

49V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1

3

2

Page 52: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

50

/mreza {1 0 0 0 setcmykcolor %Linije se iscrtavaju cijan bojomgsave %Linije koordinatnih osi2 setlinewidth 400 0 moveto 0 0 lineto 0 500 lineto strokegrestoregsave %Mreæa horizontalnih linija0.3 setlinewidth5 { 30 100 moveto 400 100 lineto stroke 0 100 translate } repeatgrestoregsave %Mreæa vertikalnih linija0.3 setlinewidth4 { 100 20 moveto 100 500 lineto stroke 100 0 translate } repeatgrestoregsave %NumeriËke vrijednosti horizontalnih linija/tekst 3 string def /FSHelvetica findfont 10 scalefont setfont100 100 500 { /y exch def 5 y 2 sub moveto y tekst cvs show } for

%NumeriËke vrijednosti vertikalnih linija90 100 400 { /x exch def x 5 moveto x 10 add tekst cvs show } forgrestore0 setgray} bind def%Prije pocetka pisanja ostalih programa treba kopirati ovu proceduru i%pozvati je sa mreza kao u slijedecem primjerumreza100 200 translate 0 0 moveto /FSHelvetica findfont 100 scalefont setfont(mreæa) show showpage

Program mreæe U dosadaπnjim primjerima na poËetku svakog programa programirana je mreæa. Tanke

horizontalne linije poËinju 30 toËaka udaljene od nultoËke. Svaki novi krug repeat petljetranslatira koordinatni sustav vertikalno za 100 toËaka. Vertikalne linije poËinju na visini 20toËaka.

Vertikalno ispisivanje brojaka za oznaËavanje vodoravnih linija rijeπen je for petljomgdje se brojaË petlje koristi za ispis slova brojaka te za izraËunavanje pozicije ispisa brojaka.Vrijednost brojaËa petlje postavlja se u varijablu y. Tekst brojaka se ispisuje: y tekst cvsgdje je u varijabli tekst odreena duæina od 3 znaka (/tekst 3 string def), akomanda cvs pretvara numeriËku vrijednost u string. Tekst se postavlja na udaljenost 5 toËaka,a pomaknut je dolje za 2 toËke od vrijednosti koju ispisuje: 5 y 2 sub moveto. Ispisteksta iz fonta FSHelvetica obavlja se procedurom: /FSHelvetica findfont 10scalefont setfont.

Brojke u podnoæju koje oznaËuju koordinate vertikalnih linija rijeπene su na drugi naËin.Podignute su za 5 toËaka od nultoËke. Vrijednost brojaËa petlje kreÊe se od 90, 190 ... do 390.Pozicija poËetka ispisa brojke u tom sluËaju jednaka je: x 5 moveto , gdje je x jednakbrojaËu petlje. Sama slika brojaka izraËunata je zbrajanjem: x 10 add. Ta vrijednostkonvertirana je na kraju u string.

Page 53: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

51V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

mreæa

Page 54: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

52

Mreæa tip2

50

200

350

U knjizi se joπ koriste tri vrste mreæa. Prikazan je ispis iprogramski kod procedura mreza2 i mreza3. Postoji iprocedura mreza4 koja se razlikuje od mreze3 samo u tome πto sene ispisuju tanke vodoravne linije. Naredbe za proceduru mreza4nisu prikazane u knjizi.

/mreza2 {1 0 0 0 setcmykcolorgsave %Linije koordinatnih osi2 setlinewidth 400 0 moveto 0 0 lineto 0 500 lineto strokegrestore

%Mreæa horizontalnih linijagsave0.3 setlinewidth 30 50 moveto 400 50 lineto stroke 0 50 translate2 { 30 150 moveto 400 150 lineto stroke 0 150 translate } repeatgrestore

%NumeriËke vrijednosti horizontalnih linijagsave/tekst 3 string def /FSHelvetica findfont 10 scalefont setfont50 150 350 { /y exch def 5 y 2 sub moveto y tekst cvs show } forgrestore0 setgray} bind defmreza2showpage

Page 55: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

53V. Æiljak, K. Pap: PostScript, programiranje grafike

Mreæa tip3

20

40

60

80

100

120

140

160

180

200

220

240

260

280

300

320

340

360

380

400

420

440

460

480

500

/mreza3 {1 0 0 0 setcmykcolorgsave %Linije koordinatnih osi2 setlinewidth 400 0 moveto 0 0 lineto 0 500 lineto strokegrestore

%Mreæa horizontalnih linijagsave0.3 setlinewidth25 { 30 20 moveto 400 20 lineto stroke 0 20 translate } repeatgrestore

%NumeriËke vrijednosti horizontalnih linijagsave/tekst 3 string def /FSHelvetica findfont 10 scalefont setfont20 20 500 { /y exch def 5 y 2 sub moveto y tekst cvs show } forgrestore0 setgray} bind defmreza3showpage

Kada u nekim primjerima u knjizi primjetite razliku u mreæipodloge od standardne procedure mreza znaËi da se radi o nekojod ovih mreæa. Tada treba programske naredbe pripadne proce-dure kopirati prije programskog primjera i pozvati sa imenom dase izvrπi njen ispis.

Page 56: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

54

%program CMYKgsave/kvadrat {translate 0 0 moveto 50 0 rlineto 0 50 rlineto-50 0 rlineto closepath} bind def/txt {-20 -20 moveto 0 setgray show } bind def/FSHelvetica findfont 24 scalefont setfont160 505 moveto1 0 0 0 setcmykcolor (C) show 0 1 0 0 setcmykcolor (M) show0 0 1 0 setcmykcolor (Y) show 0 0 0 1 setcmykcolor (K) show/FSOcb-B findfont 8 scalefont setfont25 440 kvadrat 0 1 1 0 setcmykcolor fill (0 1 1 0) txt100 0 kvadrat 1 0 1 0 setcmykcolor fill (1 0 1 0 ) txt100 0 kvadrat 1 1 0 0 setcmykcolor fill (1 1 0 0 ) txt100 0 kvadrat 0 0.3 0.94 0 setcmykcolor fill (0 0.3 0.94 0) txt-300 -100 kvadrat 0 0.18 0.43 0 setcmykcolor fill (0 0.18 0.43 0) txt100 0 kvadrat 0 0.65 0.83 0 setcmykcolor fill (0 0.65 0.83 0) txt100 0 kvadrat 0.23 0.56 0 0 setcmykcolor fill (0.23 0.56 0 0) txt100 0 kvadrat 0.15 0.38 0 0 setcmykcolor fill (0.15 0.38 0 0) txt-300 -100 kvadrat 0.43 0.34 0 0 setcmykcolor fill (0.43 0.34 0 0) txt100 0 kvadrat 0.65 0 0.18 0 setcmykcolor fill (0.65 0 0.18 0 ) txt100 0 kvadrat 0.23 0 0.23 0 setcmykcolor fill (0.23 0 0.23 0) txt100 0 kvadrat 0.11 0.11 0.72 0 setcmykcolorfill (0.11 0.11 0.72 0 ) txt-300 -100 kvadrat 0.08 0.15 0.34 0 setcmykcolorfill (0.08 0.15 0.34 0) txt100 0 kvadrat 0.06 0.36 0.11 0 setcmykcolor fill (0.06 0.36 0.11 0) txt100 0 kvadrat 0.30 0.23 0 0.11 setcmykcolor fill (0.30 0.23 0 0.11) txt100 0 kvadrat 0.56 0.15 0 0.06 setcmykcolor fill (0.56 0.15 0 0.06) txt-300 -100 kvadrat 0.27 0 0.18 0.15 setcmykcolorfill (0.27 0 0.18 0.15) txt100 0 kvadrat 0.43 0 0.27 0.06 setcmykcolor fill (0.43 0 0.27 0.06) txt100 0 kvadrat 0.18 0 0.43 0.06 setcmykcolor fill (0.18 0 0.43 0.06) txt100 0 kvadrat 0 0.38 0.90 0.15 setcmykcolor fill (0 0.38 0.90 0.15) txtgrestoreshowpage

setcmykcolor

c m y k setcmykcolor

Komanda setcmykcolor definira boju sa Ëetiri parametra:cijan(c), magenta(m), æuta(y), crna(k). Parametri se zadaju uintervalu od 0.0. do 1.0 na inverzni naËin od setgray komanda.Kada parametar iznosi 1.0 tada je pokrivenost boje 100%.

Program CMYK crta tablicu boja koristeÊi procedurekvadrat i txt da bi se prikazale pojedine boje tog tiskar-skog modela boja i pripadni iznos parametara komande.

Page 57: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

55V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

CMYK

0 1 1 0 1 0 1 0 1 1 0 0 0 0.3 0.94 0

0 0.18 0.43 0 0 0.65 0.83 0 0.23 0.56 0 0 0.15 0.38 0 0

0.43 0.34 0 0 0.65 0 0.18 0 0.23 0 0.23 0 0.11 0.11 0.72 0

0.08 0.15 0.34 0 0.06 0.36 0.11 0 0.30 0.23 0 0.11 0.56 0.15 0 0.06

0.27 0 0.18 0.15 0.43 0 0.27 0.06 0.18 0 0.43 0.06 0 0.38 0.90 0.15

Page 58: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

56

%program RGBgsave/krug {translate 0 0 moveto 0 0 25 0 360 arc} bind def/txt {-40 -40 moveto 0 setgray show } bind def/FSHelvetica findfont 24 scalefont setfont175 505 moveto1 0 0 setrgbcolor (R) show 0 1 0 setrgbcolor (G) show0 0 1 setrgbcolor (B) show/FSOcb-B findfont 8 scalefont setfont50 460 krug 1 0 0 setrgbcolor fill (1 0 0 ) txt100 0 krug 0 1 0 setrgbcolor fill (0 1 0) txt100 0 krug 0 0 1 setrgbcolor fill (0 0 1) txt100 0 krug 1 0.7 0.06 setrgbcolor fill (1 0.7 0.06) txt-300 -100 krug 1 0.82 0.57 setrgbcolor fill (1 0.82 0.57) txt100 0 krug 1 0.35 0.17 setrgbcolor fill (1 0.35 0.17) txt100 0 krug 0.77 0.44 1 setrgbcolor fill (0.77 0.44 1) txt100 0 krug 0.85 0.62 1 setrgbcolor fill (0.85 0.62 1) txt-300 -100 krug 0.57 0.66 1 setrgbcolor fill (0.57 0.66 1) txt100 0 krug 0.35 1 0.82 setrgbcolor fill (0.35 1 0.82) txt100 0 krug 0.77 1 0.77 setrgbcolor fill (0.77 1 0.77) txt100 0 krug 0.89 0.89 0.28 setrgbcolor fill (0.89 0.89 0.28) txt-300 -100 krug 0.92 0.85 0.66 setrgbcolorfill (0.92 0.85 0.66) txt100 0 krug 0.94 0.64 0.89 setrgbcolor fill (0.94 0.64 0.89) txt100 0 krug 0.59 0.66 0.89 setrgbcolor fill (0.59 0.66 0.89) txt100 0 krug 0.38 0.79 0.94 setrgbcolor fill (0.38 0.79 0.94) txt-300 -100 krug 0.58 0.85 0.67 setrgbcolorfill (0.58 0.85 0.67) txt100 0 krug 0.51 0.94 0.67 setrgbcolor fill (0.51 0.94 0.67) txt100 0 krug 0.76 0.94 0.51 setrgbcolor fill (0.76 0.94 0.51) txt100 0 krug 0.85 0.47 0 setrgbcolor fill (0.85 0.47 0) txtgrestoreshowpage

setrgbcolorsethsbcolor

r g b setrgbcolor

h s b sethsbcolor

Komanda setrgbcolor definira boju sa tri parametra:crvena(r), zelena(g), plava(b). Oni se zadaju u intervalu od 0.0 do1.0. Iznos 1.0 predstavlja pokrivenost od 100% te boje. Poπto setisak izvrπio Ëetverobojnim digitalnim tiskom konverzija iz RGB uCMYK sustav boja se dogaa automatski u RIP-u u momentu slanjaprograma.

Komanda sethsbcolor definira boju sa parametrom tona(hue), zasiÊenosti (saturation) i svjetline (brightness). Da bi sepredstavio HSB model boja isprogramirana su na slijedeÊojprogramskoj stranici Ëetiri kolorna kruga. Svaki od njih imadrugu svjetlinu (B), svi zajedno istu zasiÊenost (S=1), a unutarkruga mijenja se ton boje (H).

Page 59: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

57V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

RGB

1 0 0 0 1 0 0 0 1 1 0.7 0.06

1 0.82 0.57 1 0.35 0.17 0.77 0.44 1 0.85 0.62 1

0.57 0.66 1 0.35 1 0.82 0.77 1 0.77 0.89 0.89 0.28

0.92 0.85 0.66 0.94 0.64 0.89 0.59 0.66 0.89 0.38 0.79 0.94

0.58 0.85 0.67 0.51 0.94 0.67 0.76 0.94 0.51 0.85 0.47 0

Page 60: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

58

%program HSB/FSHelvetica findfont 24 scalefont setfont/str 4 string def 1 36 div /korak exch defgsave 175 505 moveto0 1 1 sethsbcolor (H) show 0.3 1 1 sethsbcolor (S) show0.6 1 1 sethsbcolor (B) show grestoregsave /FSOcb-B findfont 7 scalefont setfont %B=1/H 0 def /S 1 def /B 1 def 100 400 translate36 { H S B sethsbcolor0 0 moveto 0 0 95 0 10 arcgsave 1 setgray 2 setlinewidth 0 0 lineto stroke grestoreclosepath fillgsave 0 setgray 70 3 moveto H 100 mul cvi 100 div str cvs show grestore10 rotate H korak add /H exch def} repeat grestore gsave 80 280 moveto (B=1) show grestoregsave /FSOcb-B findfont 7 scalefont setfont %B=0.75/H 0 def /S 1 def /B 0.75 def 300 400 translate36 { H S B sethsbcolor0 0 moveto 0 0 95 0 10 arcgsave 1 setgray 2 setlinewidth 0 0 lineto stroke grestoreclosepath fillgsave 0 setgray 70 3 moveto H 100 mul cvi 100 div str cvs show grestore10 rotate H korak add /H exch def} repeat grestore gsave 280 280 moveto (B=0.75) show grestoregsave /FSOcb-B findfont 7 scalefont setfont %B=0.5/H 0 def /S 1 def /B 0.5 def 100 150 translate36 { H S B sethsbcolor0 0 moveto0 0 95 0 10 arcgsave 1 setgray 2 setlinewidth 0 0 lineto stroke grestoreclosepath fillgsave 0 setgray 70 3 moveto H 100 mul cvi 100 div str cvs show grestore10 rotate H korak add /H exch def} repeat grestore gsave 80 30 moveto (B=0.5) show grestoregsave /FSOcb-B findfont 7 scalefont setfont %B=0.25/H 0 def /S 1 def /B 0.25 def 300 150 translate36 { H S B sethsbcolor0 0 moveto 0 0 95 0 10 arcgsave 1 setgray 2 setlinewidth 0 0 lineto stroke grestoreclosepath fillgsave 0 setgray 70 3 moveto H 100 mul cvi 100 div str cvs show grestore10 rotate H korak add /H exch def} repeat grestoregsave 280 30 moveto (B=0.25) show grestore175 260 moveto (S=1) showshowpage

Page 61: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

59V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

HSB

0.0

0.020.0

50.08

0.110

.13

0.16

0.19

0.22

0.25

0.27

0.3

0.33

0.36

0.38

0.41

0.44

0.47

0.5

0.520.55

0.58 0.61 0.63

0.66

0.69

0.72

0.75

0.77

0.8

0.83

0.86

0.88

0.91

0.94

0.97

B=1

0.0

0.020.0

50.08

0.110

.13

0.16

0.19

0.22

0.25

0.27

0.3

0.33

0.36

0.38

0.41

0.44

0.47

0.5

0.520.55

0.58 0.61 0.63

0.66

0.69

0.72

0.75

0.77

0.8

0.83

0.86

0.88

0.91

0.94

0.97

B=0.75

0.0

0.020.0

50.08

0.110

.13

0.16

0.19

0.22

0.25

0.27

0.3

0.33

0.36

0.38

0.41

0.44

0.47

0.5

0.520.55

0.58 0.61 0.63

0.66

0.69

0.72

0.75

0.77

0.8

0.83

0.86

0.88

0.91

0.94

0.97

B=0.5

0.0

0.020.0

50.08

0.110

.13

0.16

0.19

0.22

0.25

0.27

0.3

0.33

0.36

0.38

0.41

0.44

0.47

0.5

0.520.55

0.58 0.61 0.63

0.66

0.69

0.72

0.75

0.77

0.8

0.83

0.86

0.88

0.91

0.94

0.97

B=0.25

S=1

Page 62: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

60

%program HSB saturacijagsave/kvadrat {translate 0 0 moveto 50 0 rlineto 0 50 rlineto-50 0 rlineto closepath} bind def/txt {/FSHelvetica findfont 16 scalefont setfont0 55 moveto 0 setgray show } bind def/txt2 {/FSOcb-B findfont 8 scalefont setfont-20 -10 moveto 0 setgray show } bind def/FSHelvetica findfont 16 scalefont setfont150 505 moveto (SATURACIJA) show 350 505 moveto (B=0.8) show25 425 kvadrat 0.1 1 0.8 sethsbcolor fill (S=1, H=0.1) txt (0.2 0.4 1 0) txt2100 0 kvadrat 0.1 0.6 0.8 sethsbcolor fill (S=0.6) txt (0.2 0.39 0.68 0) txt2100 0 kvadrat 0.1 0.3 0.8 sethsbcolor fill (S=0.3) txt (0.2 0.29 0.44 0) txt2100 0 kvadrat 0.1 0.1 0.8 sethsbcolor fill (S=0.1) txt (0.23 0.28 0.44 0) txt2-300 -100 kvadrat 0.3 1 0.8 sethsbcolor fill (S=1, H=0.3) txt (0.84 0.20 1 0) txt2100 0 kvadrat 0.3 0.6 0.8 sethsbcolor fill (S=0.6) txt (0.58 0.20 0.68 0) txt2100 0 kvadrat 0.3 0.3 0.8 sethsbcolor fill (S=0.3) txt (0.39 0.20 0.44 0) txt2100 0 kvadrat 0.3 0.1 0.8 sethsbcolor fill (S=0.1) txt (0.26 0.20 0.28 0) txt2-300 -100 kvadrat 0.5 1 0.8 sethsbcolor fill (S=1, H=0.5) txt (1 0.20 0.20 0) txt2100 0 kvadrat 0.5 0.6 0.8 sethsbcolor fill (S=0.6) txt (0.68 0.20 0.20 0) txt2100 0 kvadrat 0.5 0.3 0.8 sethsbcolor fill (S=0.3) txt (0.44 0.20 0.20 0) txt2100 0 kvadrat 0.5 0.1 0.8 sethsbcolor fill (S=0.1) txt (0.28 0.20 0.20 0) txt2-300 -100 kvadrat 0.6 1 0.8 sethsbcolor fill (S=1, H=0.6) txt (1 0.68 0.20 0) txt2100 0 kvadrat 0.6 0.6 0.8 sethsbcolor fill (S=0.6) txt (0.68 0.49 0.20 0) txt2100 0 kvadrat 0.6 0.3 0.8 sethsbcolor fill (S=0.3) txt (0.44 0.35 0.20 0) txt2100 0 kvadrat 0.6 0.1 0.8 sethsbcolor fill (S=0.1) txt (0.28 0.25 0.20 0) txt2-300 -100 kvadrat 0.8 1 0.8 sethsbcolor fill (S=1, H=0.8) txt (0.36 1 0.20 0) txt2100 0 kvadrat 0.8 0.6 0.8 sethsbcolor fill (S=0.6) txt (0.29 0.68 0.20 0) txt2100 0 kvadrat 0.8 0.3 0.8 sethsbcolor fill (S=0.3) txt (0.25 0.44 0.20 0) txt2100 0 kvadrat 0.8 0.1 0.8 sethsbcolor fill (S=0.1) txt (0.22 0.28 0.20 0) txt2grestore showpage

U prethodnom primjeru sa HSB krugovima parametar S jeuvijek bio 1, odnosno sve boje su imale maksimalnu zasiÊenost(saturaciju). U ovom primjeru sve boje imaju istu svjetlinu (B=0.8),a svaki redak ima isti ton boje (h). Unutar svakog retka mijenja sezasiÊenost od S=1 do S=0.1.

Kao i kod RGB modela konverzija iz HSB modela u CMYKdogaa se kada se PostScript komanda sethsbcolor poπaljeprema PostScript RIP-u koji ima podeπenu konverziju za taj vanjskiCMYK ureaj. SliËno se dogaa kada πaljemo kolor komande nacrno bijeli PostScript printer pri Ëemu se vrπi konverzija uekvivalentni parametar setgray komande.

Page 63: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

61V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

SATURACIJA B=0.8

S=1, H=0.1

0.2 0.4 1 0

S=0.6

0.2 0.39 0.68 0

S=0.3

0.2 0.29 0.44 0

S=0.1

0.23 0.28 0.44 0

S=1, H=0.3

0.84 0.20 1 0

S=0.6

0.58 0.20 0.68 0

S=0.3

0.39 0.20 0.44 0

S=0.1

0.26 0.20 0.28 0

S=1, H=0.5

1 0.20 0.20 0

S=0.6

0.68 0.20 0.20 0

S=0.3

0.44 0.20 0.20 0

S=0.1

0.28 0.20 0.20 0

S=1, H=0.6

1 0.68 0.20 0

S=0.6

0.68 0.49 0.20 0

S=0.3

0.44 0.35 0.20 0

S=0.1

0.28 0.25 0.20 0

S=1, H=0.8

0.36 1 0.20 0

S=0.6

0.29 0.68 0.20 0

S=0.3

0.25 0.44 0.20 0

S=0.1

0.22 0.28 0.20 0

Page 64: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

62

%program BOJEgsave250 380 translate/boja 0 def1 1 10 {/b exch def /r {b 10 mul} def /boja {b 10 div}def0 0 r 0 360 arcboja 1 1 sethsbcolorstroke} forgrestore

gsave50 170 translate/boja 0 def1 1 10 {/b exch def /boja {b 10 div} def0 b 10 mul moveto 300 0 rlineto0 boja 0 0 setcmykcolor8 setlinewidthstroke} forgrestoregsave50 40 translate0 0.01 1{dup /C exch def 1 exch sub /Y exch def C 0 Y 0setcmykcolor0 0 moveto 300 0 rlineto stroke 0 1 translate} bind forgrestoreshowpage

Programskim mjenjanjem parametara kolor komandi moæemodizajnirati razliËite kolorne efekte. U prvom primjeru se u forpetlji sa promjenom radijusa mijenja i parametar tona boje (h)komande sethsbcolor.

U drugom primjeru se u petlji crta linija debljine 8 toËaka stime da se u svakom koraku petlje vrπi pomak prema gore ipoveÊava parametar magente u setcmykcolor komandi.

TreÊi primjer ostvaruje gradaciju od æute do cijan boje crtajuÊiu petlji liniju po liniju s pomakom od jedne toËke i ujednopromjenom njene boje u setcmykcolor komandi.

Page 65: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

63V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

Page 66: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

programiranje tipografije

PostScript

Vilko Æiljak • Klaudio Pap

II poglavlje

Page 67: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

66

findfontscalefontsetfont show

/imefonta findfont

s scalefont

font setfont

string show

0.9 1 scale30 50 moveto/FSFutura findfont 100 scalefont setfont(AR»jktbgf) show30 200 moveto/FSShellyAllegro findfont 100 scalefont setfont(AR»jktbgf) show30 350 moveto/FSTimesRom findfont 100 scalefont setfont(AR»jktbgf) showshowpage

Slovni znakovi oblikuju se unutar "Ëetverca". »etverac jepravokutnik unutar kojeg se postavljaju slika slovnog znaka injegova geometrija. Tokom pisanja teksta, kada definiramo visinuslova, mi definiramo visinu Ëetverca a ne visinu slike slova. Slikaslova, za veËinu slova, smjeπtena je unutar Ëetverca (A B C a bc..), a neki slovni znakovi djelomiËno (g j S ’ ÷ ..) ili u cjelosti(neki samostalni akcenti) izlaze iz Ëetverca. Dno Ëetverca leæi napismovnoj liniji, donji lijevi ugao Ëetverca je nulta toËka slovnogznaka. Debljinska vrijednost slova uglavnom ukljuËuje cijelu πirinuslike slova sa dodatnom bjelinom do slijedeËeg slovnog znaka.Nulta toËka pozicioniranja slijedeËeg slova u tekstu je na toËkidebljinske vrijednosti prethodnog slova.

LatiniËko pismo je Ëetverolinijsko: pismovna linija, krovverzala, krov kurenta i descender. Visina slike verzalnih slova (AB C D..) je oko 70% Ëetverca, visina kurantnih slova (a c e i m..)je do 50% Ëetverca, spuπtanje descendera u kurentnim slovima (jg..) je od 20 do 30%. ToËne veliËine za karakteristiËna slova ineke fontove ilustrirali smo programom na ovoj stranici. Dizajnerisu dodali joπ Ëetiri linije: dvije linije za krov nekih kurentnih slova(t b d f..), liniju akcenta (Æ © » ∆) i liniju spajanja kurentnih slovanekih rukopisnih fontova.

Komande:

findfont - odreuje traæenje fonta koji treba biti na raspo-laganju programu slaganja teksta

scalefont - definiranje visine Ëetverca u toËkama

setfont - postavljanje fonta aktivnim

show - prikaz fonta na postscript stranici

Komandom scale na poËetku programa i parametrima 0.9 i1 suzila su se slova na 90% osnovne πirine.

Page 68: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

67V. Æiljak, K. Pap: PostScript, programiranje tipografije

Page 69: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

68

%program FONTOVI/str1 (abcËÊdefghijklmnoprsπtuvzæABC»∆D–EFGHIJKLMNOPRS©TUVZÆ0123456789,!:.) def/str2 (abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.) def/str3 (abcËÊdefghoprsπæABC»∆D–EFGHOPRS©Æ0123456789,!:.) def/str4 (abcdefghoprsABCDEFGHOPRS0123456789,!:.) def/str5 (abcdefghijklmnopqrstuvwxyzDFGJLPQSVWXY) def/str6 (abcdefghijklmnopqrstuvwxyz{~ABCDEFGHIJKLNOSTUVWXYZ) def/str7 (abcdefghijklmnopqrstuvwxyzDIJLNOQTXZ[\];) def

30 20 moveto /FSShellyAllegro findfont 12 scalefont setfont str2 show30 40 moveto /FSFetteFraktur findfont 12 scalefont setfont str2 show30 60 moveto /FSTimesRom findfont 12 scalefont setfont str2 show30 80 moveto /FSLinoText findfont 12 scalefont setfont str2 show30 100 moveto /FSPresentScript findfont 12 scalefont setfont str3 show30 120 moveto /FSPostAntiqua findfont 12 scalefont setfont str2 show30 140 moveto /FSPeignotBold findfont 12 scalefont setfont str2 show30 160 moveto /FSIjessica-Regular findfont 12 scalefont setfont str2 show30 180 moveto /FSTekton findfont 12 scalefont setfont str2 show30 200 moveto /FSFutura findfont 12 scalefont setfont str2 show30 220 moveto /FSArhaicNormal findfont 12 scalefont setfont str6 show30 240 moveto /FSAntiqueOliveRoman findfont 12 scalefont setfont str2 show30 260 moveto /FSBodoni findfont 12 scalefont setfont str2 show30 280 moveto /FSCourier findfont 12 scalefont setfont str2 show30 300 moveto /FSGlagoljica findfont 12 scalefont setfont str7 show30 320 moveto /FSMilosav findfont 12 scalefont setfont str1 show30 340 moveto /FSMistral findfont 12 scalefont setfont str1 show30 360 moveto /FSOcr-A findfont 12 scalefont setfont str4 show30 380 moveto /FSOcb-B findfont 12 scalefont setfont str3 show30 400 moveto /FSSymbol findfont 12 scalefont setfont str5 show30 420 moveto /FSMoskva findfont 12 scalefont setfont str3 show30 440 moveto /FSOptima findfont 12 scalefont setfont str2 show30 460 moveto /FSStoneSans findfont 12 scalefont setfont str2 show30 480 moveto /FSHelvetica findfont 12 scalefont setfont str2 showshowpage

findfontscalefontsetfont show

Ovdje je prikazano 24 razliËita fonta veliËine Ëetverca od 12toËaka. Meusobno se razlikuju po debljinskim vrijednostima ipo tome πto nemaju istovrsni set znakova. Zato se moralodefinirati viπe setova znakova (stringova) koji su se æeljeliprikazati. Da bi program radio treba prije njegovog slanja naPostScript ureaj (printer, fotojedinicu...) poslati fontove saprogramom kao πto je Downloader. To je jednostavnije negopakirati fontove unutar naπeg programa jer je jedan znak u fontuPostScript program za sebe .

Page 70: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

69V. Æiljak, K. Pap: PostScript, programiranje tipografije

20

40

60

80

100

120

140

160

180

200

220

240

260

280

300

320

340

360

380

400

420

440

460

480

500

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghoprsπæABC»∆D–EFGHOPRS©Æ0123456789,!:.abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcdefghijklmnopqrstuvwxyz{~ABCDEFGHIJKLNOSTUVWXYZ

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcdefghijklmnopqrstuvwxyzDIJLNOQTXZ[];

abcËÊdefghijklmnoprsπtuvzæABC»∆D–EFGHIJKLMNOPRS©TUVZÆ0123456789,!:.

abcËÊdefghijklmnoprsπtuvzæABC»∆D–EFGHIJKLMNOPRS©TUVZÆ0123456789,!:.

abcdefghoprsABCDEFGHOPRS0123456789,!:.

abcËÊdefghoprsπæABC»∆D–EFGHOPRS©Æ0123456789,!:.

abcdefghijklmnopqrstuvwxyzDFGJLPQSVWXY

abcËÊdefghoprsπæABC»∆D–EFGHOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

abcËÊdefghijklmnoprsπæABC»∆D–EFGHIJKLMNOPRS©Æ0123456789,!:.

Page 71: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

70

%program SKALIRANJE FONTOVA/str1 (aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.) def30 480 translate0 1 14 {/j exch def 0 0 moveto/FSHelvetica findfont[5 6 7 8 9 10 12 14 18 24 32 36 48 60 72] j getscalefont setfont str1 show0 j neg 4 mul 5 neg add translate} forshowpage

scalefontget

»itljivost ovisi o pravilnom odabiru visine slova. Savjetujemorelaciju odnosa visine slova i udaljenosti gledanja pisma. Visinaslike verzala neka je tri milimetra ako Ëitamo tekst s udaljenosti30 centimetara (Ëetverac cicera je 4,51 mm = 300 mm / 133, slikaverzala: 4.51 * 0.70 = 3.15 mm). Taj grubi savjet namjerno dajemokako bi se zapamtilo da je odnos visine slike verzala i udaljenostiËitanja 1:100. Na primjer, na plakatu kojeg gledamo s udaljenosti20 metara, visina verzala A, B, C... treba biti 20 centimetra akurenta a, c, e... 10 centimetra.

SliËan savjet dajemo i za πirinu retka. Zadaje se indirektno:neka se redak sastoji od 50 slovnih znakova. U slovne znakoveubraja se i razmak izmeu rijeËi, πtoviπe, razmak izmeu rijeËi jenajËeπÊi slovni znak.

Prikazan program demonstrira moguÊnost dohvaÊanjaparametra za visinu scalefont preko polja (vektora). BrojaËfor petlje se preuzima u j varijablu (/j exch def) kojukoristimo kao indeks Ëlana polja u get naredbi. Iza svakog ispisasa show naredbom se izvrπava translatiranje ishodiπta koje seprije ulaska u petlju postavilo na (30, 480). Prelaæenje u novi redak(y okomita koordinata naredbe translate) funkcijski sepovezalo sa brojaËem petlje kako bi ispis πto bolje ispunio prostorbuduÊi da se veliËina pisma dinamiËki poveÊava prelaæenjem uslijedeÊi redak.

[a1 a2 ...] j get

Page 72: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

71V. Æiljak, K. Pap: PostScript, programiranje tipografije

20

40

60

80

100

120

140

160

180

200

220

240

260

280

300

320

340

360

380

400

420

440

460

480

500

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ0123456789,!:.

aËÊegijlnπtuvzæA»∆–EFGIJLM©TUÆ012

aËÊegijlnπtuvzæA»∆–EFGIJLM

aËÊegijlnπtuvzæA»∆–EFG

aËÊegijlnπtuvzæA»∆aËÊegijlnπtuvzæaËÊegijlnπtuv

Page 73: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

72

charpath

string sud charpath

Slova u raËunarskoj grafici, joπ od fotosloga treÊe generacije,odreena su putanjom ovojnice na razliËite naËine: pravci, dijelovikruænice. PostScript koristi Bezierovu stazu. Slovni znak najËeπÊese prikazuje kao popunjen prostor omeen unutarnjom i vanjskomovojnicom. Za to nam je dovoljna komanda show.

Slova se mogu ispisivati tipa "outline" tj. samo linijama kojeleæe na Bezierovim putanjama. Pri tome se mora zadati debljinalinije. Naredbom charpath stvaraju se ovojnice slova zadanogstringa koje Êe se prikazati tek upotrebom naredbe stroke.

Sa logiËkim sudom true ili false definira se vrsta outline kojaÊe se dobiti. To ovisi o vrsti fonta koje æelimo pretvoriti u outline.Postoje fontovi koji su definirani upravo kao outline sa PostScriptprogramom koji se popune (fill) u momentu ispisivanja, nadaljefontovi Ëiji su znakovi definirani nezatvorenim linijama ili fontovidefinirani bitmapom. Danas se upotrebljava samo prva vrsta fonta(outline font) za koju je rezultat naredbe charpath identiËan iza false i true logiËki sud pa Êemo upotrebljavati u svim primjerimafalse parametar.

U naπim primjerima ispisana su outline slova sa posve tankimlinijama i linijama koje su deblje i od nekih dijelova slova. Linijase iscrtava tako da je srediπte debljine linije na poloæaju Bezierovestaze - debljina se πiri okomito na tu stazu.

Varijabla j se u svakom krugu petlje puni sa trenutnomvrijednoπÊu brojaËa petlje i sa njom se, kao indeksom polja,dohvaÊa slijedeÊi parametar naredbe setlinewidth. Ispissvakog slijedeÊeg primjera u petlji se translatira po y koordinatiza -50.

%program OVOJNICE SLOVNIH ZNAKOVA/tekst (Informacijski dizajn) def/FSTimesRom findfont 50 scalefont setfont30 480 translate 0 0 moveto tekst show0 1 8 {/j exch def 0 50 neg movetotekst false charpath[0.3 0.5 0.8 1 1.5 2 3 5 8 10] j getsetlinewidthstroke0 50 neg translate} forshowpage

Page 74: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

73V. Æiljak, K. Pap: PostScript, programiranje tipografije

20

40

60

80

100

120

140

160

180

200

220

240

260

280

300

320

340

360

380

400

420

440

460

480

500 Informacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajnInformacijski dizajn

Page 75: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

74

charpath Viπeslojno iscrtavanje ovojnice s razliËitim debljinama,zacrnjenjem, bojama i redosljedom prikaza, omoguÊuje dizajneruveoma kompleksna rjeπenja. Charparh se moæe kombinirati salinijama bilo kojeg geometrijskog lika kao naprimjer kvadrat, krug,slobodna Bezierova linija. Treba voditi raËuna da se linija proπirujeokomito na njenu putanju jednako prema centru i prema van.

TreÊi znak je zavrπni dizajn. Prethodna dva su faze njegoveizrade. Prvi znak je prvi sloj gdje je crnom bojom otisnut outlineslova A s debljinom linije od 8 toËaka. Na taj sloj se u drugomprimjeru dodao isti outline samo sa 30% sive i debljinom 4 toËke.KonaËno treÊi primjer se dobio dodavanjem crnog sloja sispunjenim outlineom (fill) na prethodna dva sloja.

%program OVOJNICA U OVOJNICI/str (A) def/FSTimesRom findfont 250 scalefont setfont

gsave 30 300 translate%Prvo slovo0 0 moveto str false charpath 8 setlinewidth stroke

%Drugo slovo%Prvi sloj200 0 moveto str false charpath 8 setlinewidth stroke%Drugi sloj200 0 moveto str false charpath 4 setlinewidth0.7 setgray strokegrestore

gsave 100 100 translate%TreÊe slovo%Prvi sloj0 0 moveto str false charpath 8 setlinewidth stroke%Drugi sloj0 0 moveto str false charpath 4 setlinewidth0.7 setgray stroke%TreÊi sloj0 0 moveto str false charpath 0 setgray fillgrestoreshowpage

Page 76: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

75V. Æiljak, K. Pap: PostScript, programiranje tipografije

Page 77: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

76

clipnewpath

%program CLIP PATH80 100 moveto/FSTimesRom findfont 450 scalefont setfont(Æ) false charpath

180 150 moveto(P) false charpathclipnewpath %da se ne vidi outline zbog zavrsnog stroke1 setlinewidth30 30 translate90 {0 0 moveto 550 0 rlineto1 rotate} repeatstrokeshowpage

Popunjavanje zatvorenog puta nekim grafiËkim rjeπenjemrealizira se komandom clip bez obzira da li je osnova grafiËkilik ili ovojnica slova. Prema toj naredbi moæemo se odnositi kaomaski, prozoru ili izrezu za neki dizajn. Kada se iza programiranihzatvorenih staza upotrijebi naredba clip sve ono πto Êe se nadaljeprogramirati biti Êe vidljivo samo kroz stvorenu masku.

Naredba clip ne stvara iza sebe moguÊnost programiranjapoËetka nove staze kao πto rade naredbe fill i stroke veÊako se to æeli mora se iza tih naredbi upotrijebiti eksplicitnonaredba newpath. U naπem primjeru, bez naredbe newpath,vidjela bi se clip staza nakon zavrπne upotrebe naredbestroke.

Nakon πto se isprogramirala clip maska od slova P i Æ slijediprogram koji crta linije rotirane u svakom koraku repeat petljeza jedan stupanj. Repeat petlja se vrti 90 puta pa se dobije jednaËetvrtina kruga pomoÊu linija iz jednog æariπta. To je vidljivo samokroz definiranu masku.

clipnewpath

Page 78: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

77V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

ÆP

Page 79: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

78

%program CLIP STROKEPATH/FSTimesRom findfont 250 scalefont setfontgsave50 300 moveto 8 setlinewidth(©) false charpath stroke

200 300 moveto 8 setlinewidth(©) false charpathstrokepath 1 setlinewidth strokegrestore

gsave100 20 moveto 8 setlinewidth(©) false charpathstrokepathclip newpath1 setlinewidth0 0 moveto180 {0 0 moveto 400 0 lineto1.5 rotate} repeatstrokegrestoreshowpage

strokepath Komanda strokepath omoguÊuje odreivanje ovojnicelinija, tj. stazu oko linije koja ima zadanu debljinu. Ako su linijenastale komandom charpath tada komanda strokepathdaje nove povrπine oko linija koje su tako nastale. Ta se povrπinamoæe popunjavati, bojati, podlagati (komande fill i clip).Staze nastale komandom strokepath sastoje se od poligona kaoπto je prikazano na drugom primjeru iscrtavanjem tih poligona.Poligoni se sastoje od okomica na poËetnu liniju i duæina koje suparalelne sa poËetnom linijom. ©to je poËetna linija viπe zaobljenato su poligoni guπÊi i uæi. Zbog toga nije prikladno iza te naredbeupotrijebiti naredbu stroke veÊ prvenstveno fill ili clip.Nakon aktiviranja komande strokepath znatno se poveÊavapotreba za memorijom pa se predlaæe πto prije iscrtavanje takvepovrπine kako bi se oËistio stack.

strokepath

Page 80: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

79V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

Page 81: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

80

%program MAKEFONT0 150 moveto90 -10 -90 {/j exch def/FSTimesRom findfont [30 j 0 30 0 0 ] makefont setfont(–) show % x¥=30x; y¥=jx+30y} for

0 350 moveto90 -10 -90 {/j exch def/FSTimesRom findfont [35 0 j 35 0 0 ] makefont setfont(») show % x¥=35x+jy; y¥=35y} for

60 20 moveto120 -10 -120 {/j exch def/FSTimesRom findfont [20 j j 20 0 0 ] makefont setfont(©) show % x¥=20x+jy; y¥=jx+20y} forshowpage

makefont Komanda makefont transformira font u drugi font potransformacijskom polju (matrici). Transformacijsko polje definiralinearnu transformaciju koordinatnog para (x, y) u (x’,y’) na ovajnaËin:

x’=ax+cy +tx; y’= bx+dy +t

y.

Komande translate, scale, rotate i scalefontdefiniraju se preko transformacijskog polja na ovaj naËin:

10 20 translate => [1 0 0 1 10 20]x’=x+10; y’= y +20

2 4 scale => [2 0 0 4 0 0]x’=2x; y’= 4y

45 rotate => [cos(45) sin(45) -sin(45) cos(45) 0 0]x’=cos(45)x-sin(45)y; y’= sin(45)x+cos(45)y

30 scalefont=> [30 0 0 30 0 0] makefont

Transformacija fonta po transformacijskom polju izvodi se takoda se transformira koordinatni sustav Ëetverca svakog znaka u fontupo navedenim formulama, a postojeÊi koordinatni sustav ostajenetaknut. Sa makefont naredbom stvaraju se novi deformiranifontovi. PoËetak slijedeÊeg znaka definira se pomakom nakonnaredbe show.

font [a b c d tx t

y] makefont

Page 82: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

81V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

–––

–––––––––

»»»»»»»»»»»»»»»»»»»

©©©©©©©©©©

©©©©©©©©©©©©©©©

Page 83: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

82

ashow Ako æelimo vodoravno spacionirati tekst moæemo to raditi sanaredbom ashow. Parametri dx i dy su relativni pomaci po xodnosno y osi u odnosu na pismovnu liniju za svaki znak izzadanog stringa. Kada je definiran samo dx parametar, a dy je 0tada se radi o horizontalnom spacioniranju.

Naredbe j 0 (Dizajn) ashow

15 j (GrafiËki dizajn) ashow

stavile su se u for petlje Ëiji su indeksi ujedno i dx odnosno dyparametri ashow naredbe. Zajedno sa tim naredbama u petlji sevrtila naredba setcmykcolor Ëiji se parametar magenteodnosno cijana mjenjao u svakom krugu petlje sa varijablombrojac koja se mijenja sa varijablom korak.

%program ASHOW/FSTimesRom findfont 25 scalefont setfontgsave50 145 moveto1 12 div /korak exch def/brojac korak def0 5 60 {/j exch def0 brojac 0 0 setcmykcolorgsavej 0 (Dizajn) ashowgrestore0 25 rmovetobrojac korak add /brojac exch def} forgrestoregsave50 55 moveto1 4 div /korak exch def/brojac korak def0 5 20 {/j exch defbrojac 0 0 0 setcmykcolorgsave15 j (GrafiËki dizajn) ashowgrestore0 5 rmovetobrojac korak add /brojac exch def} forgrestoreshowpage

dx dy string ashow

Page 84: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

83V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

DizajnD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j nD i z a j n

G r a f i Ë k i d i z a j nG r a f i Ë k i d i z a j n

G r a f i Ë k i d i z a j n

Gr

af

ki

d

iz

aj

n

Gr

af

ki

d

iz

aj

n

Page 85: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

84

string lengthstring stringwidth

lengthstringwidth

ashow

%program STRINGWIDTH/font1 {/FSTimesRom findfont 38 scalefont setfont} def/font2 {/FSFutura findfont 45 scalefont setfont} def/font3 {/FSShellyAllegro findfont 35 scalefont setfont} def/string1 (PostScript programiranje) def/string2 (PostScript) def /string3 (programiranje) def/string4 (GrafiËki dizajn) def /string5 (GrafiËki) def/string6 (dizajn) def/w2 {string2 stringwidth pop} def /l2 {string2 length} def/w3 {string3 stringwidth pop} def /l3 {string3 length} def/w4 {string4 stringwidth pop} def /l4 {string4 length} def/w5 {string5 stringwidth pop} def /l5 {string5 length} def/w6 {string6 stringwidth pop} def /l6 {string6 length} deffont1 string1 stringwidth pop /w1 exch def20 450 moveto string1 show20 380 moveto font2 w1 w2 sub l2 1 sub div 0 string2 ashow20 300 moveto font3 w1 w3 sub l3 1 sub div 0 string3 ashow20 200 moveto font1 w1 w4 sub l4 1 sub div 0 string4 ashow20 100 moveto font2 w1 w5 sub l5 1 sub div 0 string5 ashow20 20 moveto font3 w1 w6 sub l6 1 sub div 0 string6 ashowshowpage

Ovaj program pokazuje kako se moæe proπiriti neki tekst nazadani puni format poveËavajuÊi razmak izmeu slova. Ovdje jeformat definiran sa πirinom prvog stringa (PostScriptprogramiranje) koji se dobio sa naredbom string1stringwidth. Naredba stringwidth daje zbroj πirinesvih debljinskih vrijednosti u stringu zadanog fonta odnosno jednakje relativnom pomaku tekuÊe pozicije na pismovnoj liniji koji bise dogodio nakon naredbe show. Na stacku ostaje x i y relativnipomak. Poπto se naπi znakovi niæu vodoravno, za razliku od npr.japanskih koji se niæu vertikalno, y relativni pomak trebazanemariti pa se iza svake upotrebe naredbe stringwidthupotrebljava pop naredba za skidanje y parametra.

Algoritam ovog problema je: 1. Napravi razliku zadanogformata i izmjerene πirine stringa zadanog fonta; 2. Razlika sepodjeli sa brojem razmaka izmeu znakova (broj znakova-1);3.Rezultat dijeljenja je dx parametar ashow naredbe.

Naredba length ostavlja na stacku broj znakova zadanogstringa. Da bi se lakπe programiralo, prethodno su definiranevarijable w (πirina stringa) i l (broj znakova u stringu).

Page 86: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

85V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

PostScript programiranje

P o s t S c r i p t

p r o g r a m i r a n j e

G r a f i Ë k i d i z a j n

G r a f i Ë k i

d i z a j n

Page 87: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

86

widthshowxyshow

awidthshow

Ovdje su prikazani primjeri koji demonstriraju joπ tri naËinakontrole ispisa znakova iz zadanog stringa. Naredba widthshowmijenja poziciju ispisa slijedeÊeg znaka za dx i dy iza znaka koji jedefiniran dekadskim ASCII kodom.

U prvom primjeru u rijeËi POSTSCRIPT dolazi do relativnogpomaka za dx=30 i dy=15 iza svakog pojavljivanja slova S (dekadskiASCII kod 83). Drugi primjer dodaje 25 toËaka vodoravno izasvakog pojavljivanja znaka razmaka izmeu rijeËi (kod 32). To jepogodno kada æelimo formatirati tekst na puni format samo sapoveÊavanjem razmaka izmeu rijeËi.

TreÊi primjer koristi naredbu xyshow koja iza svakog znakastringa vrπi (dx,dy) pomak definiran parom toËaka iz polja. Zbogtoga mora broj Ëlanova polja biti toËno dvostruko veÊi od brojaznakova stringa. Ukoliko nije dobiti Êe se greπka.

Komanda awidthshow je kombinacija ashow iwidthshow naredbe. Sa dx i dy se mijenja relativna pozicija zasve znakove u stringu, a sa cx i cy se joπ dodatno mijenja pozicijaiza znaka definiranog dekadskim ASCII kodom. U primjeru sa rijeËi"Vodovod" su svi znakovi sa pomakom dx=25, dy=-10, dok se izaznaka o (kod 111) vrπi pomak jedino za cy=10. Tako se dobio efektda se znak ispisuju vodoravno samo onda kada se pojavilo slovo o,inaËe za sva ostala slova koso prema dolje. Primjer sa rijeËiRanoranilac pokazuje kako izgleda efekt kada se iza slova a (kod97) vrπi veÊi okomiti pomak prema dolje (cy=-30) nego πto jeokomiti pomak prema gore (dy=20) za sve znakove u rijeËi.

gsave/F {findfont exch scalefont setfont} bind def30 430 moveto 40 /FSTimesRom F 30 15 83 (POSTSCRIPT) widthshow

30 400 moveto 24 /FSTimesRom F25 0 32 (VeÊi razmak izmeu rijeËi.) widthshow

/proc1 {(Tekst po krivulji.)[20 10 20 10 20 10 20 -10 20 -10 20 -10 20 10 20 10 20 1020 -10 20 -10 20 -10 20 10 20 10 20 10 20 -10 20 -10 20 -10 ]xyshow} bind def30 300 moveto 24 /FSShellyAllegro F gsave proc1 grestore1 -1 scale proc1 grestore

30 200 moveto 50 /FSFutura F 0 10 111 25 -10 (Vodovod) awidthshow30 20 moveto 0 -30 97 9 20 (Ranoranilac) awidthshow showpage

dx dy kod str widthshowstr [dx1 dy1 dx2 dy2...]xyshowcx cy kod dx dy str awidthshow

Page 88: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

87V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

POS TS CRIPT

VeÊi razmak izmeu rijeËi.

Te k s t p o k r i v u l j i .Te k s t p o k r i v u l j i .

V o d o v o d

R a n o r a n i l a c

Page 89: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

88

kshow

{proc} string kshow

Naredba kshow je naprednija od svih dosadaπnjih naredbi kojese tiËu kontrole ispisa znakova iz stringa. Ona daje moguÊnostizvrπavanja programske procedure izmeu svakog znaka stringa ito na ovaj naËin: 1. Ispiπe se prvi znak stringa, a tekuÊa pozicija sepomakne sa πirinu tog znaka; 2. Postavlja se na stack dekadskiASCII kod prvog znaka, a potom drugog znaka; 3. Izvrπava seprocedura {proc}; 4. Ispisuje se drugi znak... .

Kada se poziva procedura na stacku su dvije vrijednosti: kôdznaka koji je upravo ispisan i kôd slijedeÊeg znaka. Procedura sene poziva prije nego πto se prikaæe prvi znak. Ako je broj znakovau stringu n, kshow poziva n-1 puta proceduru.

U naπim primjerima koristimo kshow naredbu tako da sa stackaskidamo kôdove na poËetku svake procedure (pop pop) jer ih nekoristimo. Pri svakom pozivu procedure, mijenjaju se obojenja ivrπe se relativni pomaci i rotacije ispisa znakova da bi se postigliæeljeni efekti na naπem primjeru.

%program KSHOW/F {findfont exch scalefont setfont} bind defgsave40 /FSTimesRom F 30 370 moveto/sivo 0 def{pop pop /sivo sivo 0.1 add def sivo setgray 10 rotate}(POSTSCRIPT) kshow %Iza svakog slova rotacija 10st.grestore gsave60 /FSTimesRom F 30 300 moveto/sivo 0 def 0 1 0 0 setcmykcolor{ pop pop /sivo sivo 0.1 add def /csivo 1 sivo sub defsivo csivo 0 0 setcmykcolor} (POSTSCRIPT) kshowgrestore gsave%Vanjska kruænica obrnuto od smjera sata50 /FSTimesRom F 200 20 moveto/H 0 def 1 18 div /korak exch def 0 1 0.8 sethsbcolor{ pop pop 30 0 rmoveto 20 rotate /H H korak add defH 1 0.8 sethsbcolor} (Tekst po kruænici) kshowgrestore gsave%Unutarnja kruænica u smjeru sata30 /FSTimesRom F 230 220 moveto/H 0 def 1 18 div /korak exch def 0 1 0.8 sethsbcolor{ pop pop 10 0 rmoveto -20 rotate /H H korak add defH 1 0.8 sethsbcolor } (Tekst po kruænici) kshowgrestore showpage

Page 90: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

89V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

POSTSCRIP

TPOSTSCRIPT

T e k

st

p

o kru

æn

ic

i

T e k st

p

o kruæn

ic

i

Page 91: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

90

Operatori

PostScript posjeduje aritmetiËke operatore (sub, add, mul,div...), stack operatore (exch, dup, pop...), relacijske operatore,logiËke operatore, operatore uvjetnog izvrπavanja procedura,operatore polja, string operatore i mnoge druge.

PomoÊu relacijskih operatora se usporeuju se dva elementana stacku. Rezultat te usporedbe (relacije) je logiËki sud kojimoæe biti istina ili laæ i pojavljuje se na stacku sa rijeËima trueili false. Te logiËke sudove najËeπÊe koriste operatori uvjetnoggrananja if i ifelse, kao i logiËki operatori not, and, or i xor.

Relacijski operatori i primjeri:

eq jednakoAko je stanje na stacku: (graf) (graf), >vrh stackanakon eq, stanje je: true.

ne nije jednakoAko je stanje na stacku: 10 10,nakon ne, stanje je: false.

gt veÊe odAko je stanje na stacku: 20 10,nakon gt, stanje je: true.

ge veÊe ili jednako odAko je stanje na stacku: 20 20,nakon ge, stanje je: true.

lt manje odAko je stanje na stacku: 10 5,nakon lt, stanje je: false.

le manje ili jednako odAko je stanje na stacku: 5 5,nakon le, stanje je: true.

Page 92: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

91V. Æiljak, K. Pap: PostScript, programiranje tipografije

LogiËki operatori:

and "i" stanje na stacku rezultat na stackufalse false falsefalse true falsetrue false falsetrue true true

or "ili" stanje na stacku rezultat na stackufalse false falsefalse true truetrue false truetrue true true

xor "ex ili" stanje na stacku rezultat na stackufalse false falsefalse true truetrue false truetrue true false

not "ne" stanje na stacku rezultat na stackufalse truetrue false

Operatori uvjetnog izvrπavanja procedura (grananja):

sud {proc} if Ako je sud true izvrπava se procedura proc,a inaËe se preskaËe.

Nakon c 0.5 ge c 1.0 le and {/c 1 def} ifstack je prazan, a varijabla c se napuni sa1 ako je prethodni logiËki uvjet dao true.

sud {proc1} {proc2} ifelse Ako je sud true izvrπava seprocedura proc1, a ako je bio falseizvrπava se proc2.

Nakon c 0.5 ge c 1 le and {/c 1 def} {/c 0 def} ifstack je prazan, a varijabla c Êe bitinapunjena sa 1 ako je prethodni logiËkiuvjet dao true, odnosno sa 0 ako je biofalse.

Page 93: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

92

Operatori polja:

n array stvara na stacku polje od n Ëlanova kojisu svi null objekti

Nakon 2 arraystanje na stacku je: [null null].

[polje] length daje na stacku broj Ëlanova poljaNakon [54.6 (grafika)] lengthstanje na stacku je: 2.

[polje] j get daje na stacku Ëlan na poziciji j(indeksiranje polja poËinje sa 0)

Nakon [43 34 0 0 (271CVC)] 0 getstanje na stacku je: 43.

[polje] j Ëlan put stavlja u polje novi Ëlan na poziciju jpreko stare vrijednosti

Nakon /A [2 3 5] def A 1 (ab) putpolje A izgleda ovako: [2 (ab) 5].

[polje] j d getinterval daje na stacku novo polje stvorenood d Ëlanova polja poËevπi od j pozicije

Nakon [43 34 0 0 (271CVC)] 0 4 getintervalstanje na stacku je: [43 34 0 0].

[polje1] j [polje2] putintervalzamjenjuje dio polja1 saËlanovima polja2 poËevπi od j pozicije

Nakon /B [2 0 0 6] def B 1 [10 11] putintervalpolje B izgleda ovako: [2 10 11 6].

[polje] {proc} forall izvrπava se procedura proc zasvaki Ëlan poljaNakon 1 [2 6 3 1] {mul} forallstanje na stacku je: 36.

Operatori stringa:

n string stvara na stacku string (niz znakova) odn \000 kôdova. To je oktalni zapis za 0.

Nakon 4 stringstanje na stacku je: (\000\000\000\000).

Page 94: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

93V. Æiljak, K. Pap: PostScript, programiranje tipografije

string length daje na stacku broj znakova stringaNakon (dizajn) lengthstanje na stacku je: 6.

string j get daje na stacku dekadski ASCII kôd znakana poziciji j (indeksiranje stringa poËinje sa 0)

Nakon (grafika) 2 getstanje na stacku je: 97. (dek. ASCII kôd "a")

string j kôd put stavlja u string novi znak definiran sdekadski ASCII kôdom na poziciju j prekostare vrijednosti

Nakon /A (rupa) def A 1 107 putstring A izgleda ovako: (rkpa). (107 je dek. ASCII kôd "k")

string j d getinterval daje na stacku novi string stvoren od dznakova poËetnog stringa od j pozicije

Nakon (Zagreb) 2 3 getintervalstanje na stacku je: (gre).

string1 j string2 putinterval zamjenjuje dio stringa1 saznakovima stringa2 poËevπi od pozicije j

Nakon /A (abcdef) def A 2 (rkl) putintervalstring A izgleda ovako: (abrklf).

string {proc} forall izvrπava se proc za svaki znak stringadobivenog kao dekadski ASCII kôd.Nakon /b 0 def

(grafika) {97 eq {b 1 add /b exch def} if} forallu varijabli b je: 2.

string stringpogotka search- ako je string pogotka naen u stringu,

na stacku Êe biti stanje:(postpogodak) (string pogotka) (predpogodak) true

- ako string pogotka nije naen u stringu, na stacku Êebiti stanje: (string) false

Nakon (grafika) (af) searchstanje na stacku je: (ika) (af) (gr) true.Nakon (grafika) (c) searchstanje na stacku je: (grafika) false.

Page 95: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

94

%program POZICIONIRANJE TEKSTA U ODNOSU NA ZADANU PISMOVNU LINIJU/F {findfont exch scalefont setfont} bind def/LTEKST{moveto show} bind def/CTEKST{ moveto dup stringwidth pop neg 2 div 0 rmoveto show} bind def%pop skida y parametar od stringwidth koji je bespotreban/RTEKST{moveto dup stringwidth pop neg 0 rmoveto show} bind def20 /FSTimesRom F50 450 moveto 300 0 rlineto stroke %nacrtana pismovna linija(Tekst je poravnat sa lijevim krajem linije.) 50 400 LTEKST(Prije poziva procedure LTEKST definiraj) 50 380 LTEKST(string, x i y koordinatu poËetka pismovne linije.) 50 360 LTEKST

( Tekst je centriran na liniju.) 200 300 CTEKST(Prije poziva procedure CTEKST definiraj) 200 280 CTEKST(string, x i y koordinatu sredine pismovne linije.) 200 260 CTEKST

(Tekst je poravnat sa desnim krajem linije.) 350 200 RTEKST(Prije poziva procedure RTEKST definiraj) 350 180 RTEKST(string, x i y koordinatu) 350 160 RTEKST(kraja pismovne linije.) 350 140 RTEKSTshowpage

LTEKSTCTEKSTRTEKST

string xl yl LTEKSTstring xc yc CTEKSTstring xr yr RTEKST

Ovdje su prikazane procedure kojima se iskljuËuje redak ulujevo, sredinu i desno. Prva procedura LTEKST prikazuje tekstporavnat s lijeve strane poËevπi od zadane pozicije xl, yl. Ona sesastoji samo od moveto i show naredbe.

Procedura CTEKST centrira tekst u odnosu na zadanukoordinatnu toËku. Nakon postavljanja na poziciju xc, yc samoveto naredbom vrπi se negativni relativni pomak sa rmovetopo x koordinati za (πirina stringa)/2. Dup iza moveto je potrebanradi dupliciranja stringa na stacku jer ga potroπi naredbastringwidth, a treba ga zavrπni show.

TreÊi primjer prikazuje proceduru RTEKST koja, nakonpostavljanja teksta na poziciju xr, yr sa moveto vrπi negativnirelativni pomak teksta sa rmoveto po x koordinati za punu πirinustringa.

Page 96: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

95V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

Tekst je poravnat sa lijevim krajem linije.Prije poziva procedure LTEKST definirajstring, x i y koordinatu poËetka pismovne linije.

Tekst je centriran na liniju.Prije poziva procedure CTEKST definiraj

string, x i y koordinatu sredine pismovne linije.

Tekst je poravnat sa desnim krajem linije.Prije poziva procedure RTEKST definiraj

string, x i y koordinatukraja pismovne linije.

Page 97: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

96

JTEKST

string d xl yl JTEKST

/F {findfont exch scalefont setfont} bind def/JTEKST

{moveto /duljpislin exch def /tekst exch deftekst stringwidth pop /sirstringa exch def/brojac 0 def

tekst{32 eq {brojac 1 add /brojac exch def} if} forall %za svaki znak stringa izvrπava se proc

/brojspac brojac defduljpislin sirstringa sub brojspac div /dspacija exch defdspacija 0 32 tekst widthshow } bind def %32 je spacija

%%%GLAVNI PROGRAM20 /FSTimesRom F50 450 moveto 300 0 rlineto stroke %nacrtana pismovna linija(Tekst je poravnat na oba kraja.) 300 50 400 JTEKST(Prije poziva procedure JTEKST) 300 50 380 JTEKST(definiraj string,) 300 50 360 JTEKST(duljinu pismovne linije,) 300 50 340 JTEKST(x i y koordinatu poËetka) 300 50 320 JTEKST(pismovne linije.) 300 50 300 JTEKST24 /FSTimesRom F (Program obrauje) 300 50 230 JTEKST(liniju po liniju.) 300 50 200 JTEKST(Nema kontrole minimuma πirine) 300 50 170 JTEKST(spacije pa moæe doÊi do preklapanja) 300 50 140 JTEKST(ako ima previπe znakova.) 300 50 110 JTEKST showpage

Ovdje je prikazana procedura JTEKST koja iskljuËuje, odnosnoporavnava zadani tekst na lijevu i desnu stranu pismovne linijekorigirajuÊi πirinu razmaka izmeu rijeËi. Prije upotrebe te procedurepotrebno je na stack staviti string, duljinu pismovne linije i koordinatepoËetka pismovne linije. Nakon izvrπavanja naredbe forall u varijablibrojspac nalazi se broj pojavljivanja razmaka izmeu rijeËi (kôd32) u tekstu. Potrebnu korekciju πirine razmaka izmeu rijeËi sadræivarijabla dspacija koja se dobila formulom

(duljina pismovne linije - πirina stringa)/broj razmaka.

Varijabla dspacija je dx parametar widthshow naredbe sa kojom seizvrπava ispis teksta na naËin da se iza svake pojave razmaka izmeurijeËi (kôd 32) vrπi relativni pomak tekuÊe pozicije za dx=dspacija, dy=0.

U glavnom programu poziva se procedura JTEKST za svaki ispisjednog tekstualnog retka. Prelazak u novi redak vrπi se apsolutnimdefiniranjem koordinata poËetka nove pismovne linije za svako pozivanjeJTEKST procedure.

Page 98: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

97V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

Tekst je poravnat na oba kraja.Prije poziva procedure JTEKSTdefiniraj string,duljinu pismovne linije,x i y koordinatu poËetkapismovne linije.

Program obraujeliniju po liniju.Nema kontrole minimuma πirinespacije pa moæe doÊi do preklapanjaako ima previπe znakova.

Page 99: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

98

SPOJIINSERT

Stvaranjem biblioteke procedura obogaÊujemo i olakπavamoprogramiranje sloæenih PostScript programa. Plavom bojom su oznaËeneprocedure koje Êemo kasnije samo pozvati po imenu podrazumijevajuÊida smo ih u ovom obliku stavili ispred poziva. Da bi se takva proceduramogla pravilno upotrijebiti kao gotova naredba treba korisniku datidefiniciju argumenata na stacku (ako je potrebno) prije upotrebe proce-dure i rezultata na stacku (ako ga daje) nakon upotrebe procedure.

Ovdje demonstriramo procedure SPOJI i INSERT. Procedura SPOJInam sluæi za spajanje dva stringa u novi string. Prije poziva procedureSPOJI moraju biti dva stringa na stacku. Njihov poredak na stacku je bitanjer spajanje stringova nije komutativna operacija. Nakon izvrπenja proce-dure na vrhu stacka nalazi se spojeni string, a poËetni stringovi su nestalisa stacka. Svaki put kada æelimo da procedure, koje stvaramo, skidajupoËetne argumente na stacku, rjeπenje je sa preuzimanjem argumenata ulokalne varijable procedure kao na primjer u proceduri SPOJI sa naredbama/S2 exch def /S1 exch def.

Algoritam za spajanje stringova poËinje prebrojavanjem znakova jednogi drugog stringa sa naredbom length da bi se mogao stvoriti inicijalniprazni string wspoj koji ima broj znakova jednak zbroju znakova ulaznihstringova. Njega punimo sa naredbom putinterval. Prvo se puniod pozicije 0 sa znakovima iz prvog stringa, a zatim sa znakovima iz drugogstringa od slijedeÊe pozicije definirane duljinom prvog stringa varijablomL1. Na kraju procedure stavljamo rezultat procedure na stack koji se nalaziu varijabli wspoj. U glavnom programu prikazan je primjer slaganjereËenice od stringova rijeËi ukljuËujuÊi i razmak izmeu rijeËi koji se moæestavljati u string na kraj rijeËi ili prije poËetka rijeËi.

Procedura INSERT ima zadatak da ubacuje definirani znak ili string uzadani string na pozicije definirane vektorom (poljem). Na primjer, ako jeu vektoru broj dva, a znak je crtica, tada se crtica insertira (ubacuje) izadrugog znaka u stringu. Prije poziva procedure INSERT na stacku morabiti string, vektor i znak ili string. Nakon izvrπavanja procedure na stackuÊe se nalaziti string sa ubaËenim znakom. Nakon uzimanja pozicijeubacivanja iz vektora (varijabla poz) spaja se prethodno formirani string(procedura SPOJI) sa dijelom rijeËi definirane poËetkom u varijabli poci duljinom u varijabli interval. Nakon toga se znak za ubacivanjespaja na prethodno formirani string. Rezultat se sprema u varijablu wcrt,korigira se novi poËetak (poc) i kreÊe se u novi krug petlje. Crvenombojom prikazan je ispis stacka procedure /s nakon izvrπavanja glavnogprograma.

str1 str2 SPOJIstr vektor znak INSERT

Page 100: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

99V. Æiljak, K. Pap: PostScript, programiranje tipografije

/s {mark pstack pop} def/SPOJI{/S2 exch def /S1 exch def/L1 S1 length def /L2 S2 length def/Lw L1 L2 add def/wspoj Lw string defwspoj 0 S1 putintervalL2 0 ne{wspoj L1 S2 putinterval }ifwspoj} bind def%/INSERT %ispis stringa sa znakom po vektoru{/znak exch def /vektor exch def /rijec exch def/VL vektor length def/poz 0 def/poc 0 def %index zadnje crtice/wcrt () def /interval {poz poc sub} def0 1 VL 1 sub

{/i exch def vektor i get /poz exch defwcrt rijec poc interval getinterval SPOJI znak SPOJI

/wcrt exch def/poc poz def}bind for

wcrt rijec poc rijec length poc sub getinterval SPOJI}bind def%%GLAVNI PROGRAM(Danas ) (je ) SPOJI (lijepi ) SPOJI (dan.) SPOJI(Laringitis) [2 5 7] (-) INSERT(Rascjepkano) [1 2 3 4 5 6 7 8 9 10] (.) INSERT(NASLOV) [0 6] (***) INSERT s

-mark-(***NASLOV***)(R.a.s.c.j.e.p.k.a.n.o)(La-rin-gi-tis)(Danas je lijepi dan.)

Page 101: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

100

CISCVEKTOR Sa procedurom CISCVEKTOR mogu se izbaciti svi jednakielementi iz zadanog vektora. Sadræaj vektora moæe bitiraznovrstan, od brojaka do stringova i mijeπano. Prije poziva pro-cedure na stacku mora biti ulazni vektor koji se æeli proËistiti, aiza izvrπenja procedure na stacku ostane proËiπÊeni vektor.

Za vektore Ëija je duljina veÊa ili jednaka od 3 primjenjen jealgoritam koji koristi pomoÊni vektor pomocv. Koriste se dvijepetlje. Jedna se vrti od 0 do predzadnjeg Ëlana vektora (i-petlja), adruga od i+1 do zadnjeg Ëlana vektora (j-petlja). Znak koji sepretraæuje definiran je i-petljom, a sa j-petljom dohvaÊamoznakove od i-tog do kraja stringa. Usporedba i-tog i j-tog Ëlanaradi se sa naredbom vektor i get vektor j get eq.Kada se dogodi pogodak, varijabla sud puni se sa true i izlazise iz j-petlje s naredbom exit. ProËiπÊeni vektor se slaæe uvektoru pomocv. U njega se slaæu i-ti Ëlanovi poËetnog vektorakoji nemaju viπe svog duplikata do kraja tog vektora. To je samoonda kada je varijabla sud false odnosno kada se izaπlo iz j-petlje bez pogotka. Iza i-petlje potrebno je joπ staviti zadnji znaku varijablu pomocv. Varijabla vektor, koja se na kraju stavljana stack kao rezultat procedure, puni se sa onim sadræajem dijelavektora pomocv koji se tokom programa napunio. To se radinaredbom pomocv 0 inter getinterval /vektor exchdef.

Vektori, koji imaju dva Ëlana, proËiπÊavaju se jednomusporedbom. Vektori sa jednim Ëlanom, odnosno bez Ëlanova (nulvektor) prolaze kroz cijelu proceduru netaknuti i opet se na krajupojavljuju na vrhu stacka.

Crvenom bojom prikazan je ispis stacka nakon izvrπenjaglavnog programa koji koristi proceduru CISCVEKTOR urazliËitim situacijama.

vektor CISCVEKTOR

Page 102: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

101V. Æiljak, K. Pap: PostScript, programiranje tipografije

/s {mark pstack pop} def/CISCVEKTOR %stack: vektor;izlaz:vektor{/vektor exch def/pomocv 50 array def/VL vektor length def/poz 0 defVL 3 ge

{0 1 VL 2 sub %brojac for petlje{/i exch def/sud false def

i 1 add 1 VL 1 sub %brojac for petlje{/j exch defvektor i get vektor j get eq

{/sud true def exit} if}bind for

sud false eq{pomocv poz vektor i get put /poz poz 1 add def}if}bind for

pomocv poz vektor VL 1 sub get put/inter poz 1 add defpomocv 0 inter getinterval /vektor exch def}{VL 2 eq

{vektor 0 get vektor 1 get eq{vektor 0 1 getinterval /vektor exch def}if

}if}ifelse

vektor}bind def%GLAVNI PROGRAM[1 1 2 2 5 5 5 5 7 7 7 7 7 7 7 4 3 3 3 3 3] CISCVEKTOR[(abc) (abc) 1 3 5 1 (cc)] CISCVEKTOR[4 4] CISCVEKTORs

-mark-[4][(abc) 3 5 1 (cc)][1 2 5 7 4 3]

Page 103: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

102

Ovdje demonstriramo proceduru JEVOKAL koja prepoznajevokale u tekstu. Prije procedure JEVOKAL mora na stacku bitiznak (string od jednog elementa) kojeg ona testira da li je iz skupasamoglasnika (vokala) i na stacku ostavlja rezultat u obliku suda(true ili false).

Nakon (a) JEVOKAL stanje na stacku je: true.

U proceduri JEVOKAL definirano je polje samoglasnika Ëijise Ëlanovi dohvaÊaju preko indeksa for petlje. Ako operator eqdade na stacku true (postignut pogodak) tada se varijabla sud punisa true i sa exit naredbom izlazi iz for petlje.

U nastavku je prikazan primjer glavnog programa koji ispisujesamoglasnike, njihove pozicije unutar zadanog stringa i njihovukupni broj. KoristeÊi proceduru JEVOKAL testira se svaki znakkoji je dohvaÊen forall operatorom. Crvenom bojom su oznaËenenaredbe potrebne za pretvaranje dekadskog ASCII koda u pripadniznak jer procedura JEVOKAL koristi znakove, a ne kodove.

Svaki put kada procedura JEVOKAL dade true na stacku ifnaredba pokreÊe proceduru u kojoj se ispisuje pozicijasamoglasnika i naeni samoglasnik sa procedurom za ispis stanjastacka /s. Varijabla "brojac" poveËa se takoer za jedan.

Na kraju programa se iznos varijable "brojac" postavlja na stacki ispisuje sa procedurom /s. String (Tipografsko oblikovanje)spremljen u string varijabli filetxt ima 9 samoglasnika πto se vidina zadnjem ispisu stanja stacka.

Na sliËan naËin se moæe odrediti procedura za bili koji setznakova. Potrebno je samo promjeniti polje znakova koje traæimo.Na primjer umjesto polja

/V [(a) (e) (i) (o) (u) (A) (E) (I) (O) (U)] defstavimo/V [(B) (D) (W) (k) (s)] def.

JEVOKAL

znak JEVOKAL

Page 104: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

103V. Æiljak, K. Pap: PostScript, programiranje tipografije

/s {mark pstack pop} def/JEVOKAL %stack:znak; izlaz na stack: sud{/V [(a) (e) (i) (o) (u) (A) (E) (I) (O) (U)] def/brojzn V length 1 sub def/test exch def /sud false def0 1 brojzn {/k exch def

test V k get eq{/sud true def exit}if}bind for

sud %postavljanje rezultata na stack}bind def/filetxt (Tipografsko oblikovanje) def%GLAVNI PROGRAM/pozicija 0 def /brojac 0 def/str 1 string deffiletxt{/kod exch def /pozicija pozicija 1 add def str 0 kod putstr JEVOKAL{pozicija str s pop pop /brojac brojac 1 add def}if}forallbrojac s-mark-(i)2-mark-(o)4-mark-(a)7-mark-(o)11-mark-(o)13-mark-(i)16-mark-(o)

18-mark-(a)20-mark-(e)23-mark-9

Page 105: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

104

filereadstringwritestring

closefile

Tekst moæe uÊi u PostScript program preko ulazne tekstualnedatoteke (file) koja se prethodno napunila sa nekim tekst editorom,pisanjem rukom, programskim zapisivanjem ili generiranjempodataka.

Sa naredbom imedat (r) file definira se ulazna datotekakoja se æeli Ëitati (opcija r-read). Znakovi se Ëitaju iz ulaznedatoteke sa naredbom imedat string readstring.Znakovi koji se Ëitaju pune string koji prethodno mora bitidimenzioniran i postavljen na vrh stacka. »itanje se odvija sve dooznake kraja datoteke (EOF-End Of File) ili dok se ne napunistring. Nakon izvrπenja naredbe readstring na stackuse mogu pojaviti dvije situacije. Ukoliko je string bio dovoljnodimenzioniran da preuzme sve znakove iz datoteke, na vrhu stackaÊe biti cijeli tekst iz datoteke i rijeË true koja to pokazuje. Ukolikoje string bio popunjen prije oznake EOF, na vrhu stacka Êebiti dio teksta iz datoteke koji je uspio stati u string i rijeËfalse koja to pokazuje.

Naredba imedat (w) file definira izlaznu datoteku ukoju Êe se zapisivati tekst (opcija w-write). Zapisivanje u izlaznudatoteku se radi naredbom writestring kojoj se prethodnona stacku mora staviti ime izlazne datoteke i niz znakova koji seæele zapisati u nju. Prilikom ispisa nekog stringa mogu se koristitikontrolni znakovi za vrstu iskljuËivanja kao \n\r, a koji su ujednoi komande za prelazak u novi redak (LF i CR).

Nakon upotrebe ulazne i izlazne datoteke, datoteke se morajuzatvoriti sa naredbom closefile. Na taj naËin se prekinulaveza izmeu programa i datoteka koja je cijelo vrijeme bila prisutnatokom programa.

U naπem primjeru tekst Pretraæivanje teksta nalazise izvan programa u datoteci s imenom ULAZ, a æeljeni rezultatprograma ispisuje se u datoteku IZLAZ.txt. Ovaj program je samoprimjer. Zadatak je ispitati da li je Ëetvrti znak iz ulaznog tekstakonzonant iz skupa K2 i da li je sedmi znak iz skupa konzonantaK1 Ëiji su Ëlanovi definirani u programu. Procedure JEK1 i JEK2rade po principu procedure JEVOKAL. Rezultat ispitivanjaËetvrtog i sedmog Ëlana se ispisuje u obliku reËenica u izlaznudatoteku koju moæemo otvoriti i proËitati sa nekim editorom teksta.Na kraju je ispisan sadræaj izlazne datoteke crvenom bojom.

imedat (r) fileimedat (w) fileimedat string readstringimedat string writestringimedat closefile

Page 106: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

105V. Æiljak, K. Pap: PostScript, programiranje tipografije

4. znak nije iz skupa K1 konzonanta7. znak je iz skupa K2 konzonanta

Sadræaj datoteke IZLAZ.txt na disku:

Pretraæivanje teksta

Sadræaj ulazne datoteke ULAZ na disku:

/CETVRTI {3 1 getinterval} bind def/SEDMI {6 1 getinterval} bind def/JEK1 {/K1 [(s) (π) (z) (æ) (S) (©) (Z) (Æ)] def

/brojzn K1 length 1 sub def/test exch def /sud false def0 1 brojzn {/m exch def

test K1 m get eq{/sud true def exit}if}bind for

sud}bind def

/JEK2 {/K2 [(j) (l) (r) (v) (J) (L) (R) (V)] def/brojzn K2 length 1 sub def/test exch def /sud false def0 1 brojzn {/n exch def

test K2 n get eq{/sud true def exit}if}bind for

sud}bind def

%GLAVNI PROGRAM/spremnik 1000 string def(ULAZ) (r) file /ULAZ exch def(IZLAZ.txt) (w) file /IZLAZ exch defULAZ spremnik readstring pop /filetxt exch deffiletxt CETVRTI JEK2{IZLAZ (4. znak je iz skupa K2 konzonanta\n\r) writestring}{IZLAZ (4. znak nije iz skupa K2 konzonanta\n\r) writestring}ifelsefiletxt SEDMI JEK1{IZLAZ (7. znak je iz skupa K1 konzonanta) writestring}{IZLAZ (7. znak nije iz skupa K1 konzonanta) writestring}ifelse IZLAZ closefile ULAZ closefile

Page 107: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

106

»esto je potrebno izbaciti neki Ëlan vektora po zadanom indeksuodnosno poziciji na kojoj se Ëlan nalazi unutar vektora. Prvi Ëlanvektora je na poziciji 0. Tu je pokazana procedura IZBACICLANkojoj su argumenti na stacku ulazni vektor i indeks, a njen rezultatna stacku je reducirani vektor za izbaËeni Ëlan po zadanom indeksu.

Algoritam procedure IZBACICLAN rjeπava Ëetiri moguÊasluËaja: ulazni vektor ima jedan Ëlan, indeks izbacivanja pokazujepoËetnu poziciju, indeks izbacivanja pokazuje zadnju poziciju iindeks izbacivanja pokazuje na unutraπnju poziciju. Samo u sluËajuizbacivanja unutraπnjeg Ëlana vektora mora se upotrijebitipreslagivanje pomoÊu pomoÊnog vektora PV sa naredbomputinterval, u koji se slaæe finalni vektor, i preko pomoÊnihvektora V1 i V2 koji preuzimaju dijelove od poËetne pozicije dopozicije izbacivanja odnosno od pozicije izbacivanja do kraja vektora.Ostali sluËajevi pune direktno izlaznu varijablu vektor koristeÊinaredbu getinterval.

Procedura DVOSTRUKI koristi kao argumente na stacku jednurijeË (string) i zadani vektor pozicija znakova te rijeËi. Izlaz iz pro-cedure je vektor reduciran za one Ëlanove Ëija vrijednost pokazujena pozicije znakova unutar rijeËi koja odgovaraju drugim slovimaglasova lj, nj i dæ pisanih u kombinacijama: lj, nj, dæ, LJ, NJ, DÆ, Lj,Nj i Dæ. To Êemo kasnije koristiti u proceduri CRODIJELI. Ti seglasovi nalaze unutar procedure u polju poljeznakova.

Sa i-petljom dohvaÊaju se Ëlanovi vektora koji pokazuju pozicijeznakova unutar rijeËi (varijabla poz), a sa k-petljom se dohvaÊajuËlanovi polja poljeznakova. Prvi cilj je dohvat dva susjednaznaka iz rijeËi na pozicijama poz-1 i poz u varijablu dznak.Kada se u k-petlji dogodio pogodak sa naredbom dznakpoljeznakova k get eq izbacuje se i-ti Ëlan vektora umanjenza korekciju korek koji je doveo do pogotka. Varijabla korekkorigira indeks vektora i za broj izbacivanja koji su se dogodili dotog trenutka. To je potrebno jer se sa svakim izbacivanjem poËetnivektor smanjio za jedan Ëlan kao i njegova indeksacija od indeksaizbacivanja do kraja vektora.

Crvenom bojom je prikazan ispis stacka nakon izvrπavanjaglavnog programa koji koristi procedure IZBACICLAN iDVOSTRUKI. U primjeru sa procedurom DVOSTRUKI izbaËenisu Ëlanovi vektora sa vrijednostima 3, 7, i 12. Te vrijednosti pokazujuna istaknute pozicije u rijeËi (Zaljubljivanje).

IZBACICLANDVOSTRUKI

vektor indeks IZBACICLANstring vektor DVOSTRUKI

Page 108: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

107V. Æiljak, K. Pap: PostScript, programiranje tipografije

/IZBACICLAN{/indeks exch def /vektor exch def/PV 50 array def /VL vektor length defVL 1 eq

{/vektor [] def}{indeks 0 eq

{vektor 1 VL 1 sub getinterval /vektor exch def}{indeks VL 1 sub eq

{vektor 0 VL 1 sub getinterval /vektor exch def}{vektor 0 indeks getinterval /V1 exch defvektor indeks 1 add VL indeks 1 add sub getinterval/V2 exch defPV 0 V1 putinterval PV V1 length V2 putintervalPV 0 VL 1 sub getinterval /vektor exch def}ifelse

}ifelse}ifelse

vektor}bind def%/DVOSTRUKI %stack:rijec, vektor; iza na stacku:vektor{/vektor1 exch def /rijec1 exch def/VL vektor1 length def/poljeznakova [(lj) (nj) (dæ) (LJ) (NJ) (DÆ) (Lj) (Nj) (Dæ)] def/PL poljeznakova length def/korek 0 def0 1 VL 1 sub

{/i exch def /poz vektor1 i korek sub get def/dznak rijec1 poz 1 sub 2 getinterval def0 1 PL 1 sub{/k exch def

dznak poljeznakova k get eq{/vektor1 vektor1 i korek sub IZBACICLAN def/korek korek 1 add def exit}if}bind for

}bind forvektor1}bind def%GLAVNI PROGRAM[(a) 4 (cc) 10 1] 0 IZBACICLAN[2 (ww) 1 0.6 3] 3 IZBACICLAN(Zaljubljivanje) [2 3 6 7 9 11 12] DVOSTRUKI-mark-[2 6 9 11][2 (ww) 1 3][4 (cc) 10 1]

Page 109: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

108

CROVEKTORCRODIJELI

PRVIZADNJI

Algoritam za dijeljenje rijeËi po pravilima hrvatskog pravopisaobjavljen je u knjizi "Stolno izdavaπtvo-DeskTop Publishing", V.Æiljak, 1989. na strani 132 i 133. Tamo je prikazan dijagramtoka kao i pripadni Basic program osnovnog dijeljenja. Ovdje jetaj algoritam usavrπen i isprogramiran kao PostScript procedurakoju kasnije mogu pozivati programi za automatsko dijeljenje rijeËina kraju retka.

Procedura CRODIJELI daje na stacku rijeË koja u sebi imaznak crtice na mjestima dozvoljenog dijeljenja rijeËi po hrvatskompravopisu. Argument procedure je rijeË postavljena na vrh stacka.Takva rijeË Êe se kasnije koristiti za automatsko dijeljenje rijeËina kraju retka u proceduri LPRELOM.

Procedura se izvrπava tako da se prvo poziva proceduraCROVEKTOR koja na bazi ulazne rijeËi daje vektor spozicijama dozvoljenog dijeljenja osnovnog algoritma. Saprocedurom CISCVEKTOR vrπi se proËiπÊavanje duplih pozicijaza dijeljenje πto ne rijeπava osnovni algoritam. PoËetna ulaznarijeË i proËiπÊeni vektor su argumenti procedure DVOSTRUKIkoja rijeπava izbacivanje pozicija dozvoljenog dijeljenja ukolikosu se pojavile izmeu lj, nj i dæ πto su iznimke osnovnog algoritma.Sa procedurom PRVIZADNJI izbacuju se iz vektora Ëlanovi kojipokazuju na moguÊe dijeljenje iza prvog znaka u rijeËi i ispredzadnjeg znaka u rijeËi. Nakon toga se moæe pristupiti insertiranjuznaka crtice na pozicije unutar rijeËi po finalnom vektoru saprocedurom INSERT.

Procedura CROVEKTOR analizira znakovne trojke unutarrijeËi od poËetka do kraja rijeËi. Svaka trojka se dohvaÊa i-petljom,a sprema se u varijablu trojka. Svaki znak u trojci testira se saveÊ prikazanim procedurama JEVOKAL, JEK1, JEK2. Ovisno otestovima po algoritmu, izvrπavaju se procedure RASTAV1 iRASTAV2 ili se rastavljanje preskaËe. Procedura RASTAV1stavlja u vektor broj pozicije unutar rijeËi po pravilu Z

1-Z

2Z

3,

a procedura RASTAV2 po pravilu Z1Z

2-Z

3 gdje su Z

1, Z

2 i Z

3

znakovi tekuÊe trojke koja se analizira.

Crvenom bojom je ispisan stack kao rezultat glavnog programa.Naredba pop iza poziva procedure /s skida ispisanu rijeË sastacka da se ne bi ponovno pojavila u slijedeÊem ispisu stanjastacka.

string CROVEKTORstring CRODIJELIstring vektor PRVIZADNJI

Dijeljenje rijeËi

Page 110: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

109V. Æiljak, K. Pap: PostScript, programiranje tipografije

/CROVEKTOR stack: rijec ; izlaz na stacku: vektor{/wfin exch def/RASTAV1 {vektor j i 1 add put /j j 1 add def} bind def/RASTAV2 {vektor j i 2 add put /j j 1 add def} bind def/PRVI {trojka 0 1 getinterval} bind def/DRUGI {trojka 1 1 getinterval} bind def/TRECI {trojka 2 1 getinterval} bind def/vektor 50 array def /LR wfin length def/j 0 def %inicijalizacija indeksa poljaLR 3 ge{ 0 1 LR 3 sub %brojac for petlje

{/i exch def wfin i 3 getinterval /trojka exch defDRUGI JEVOKAL

{TRECI JEVOKAL {RASTAV2} if }{TRECI JEVOKAL

{PRVI JEVOKAL {RASTAV1} if}{DRUGI JEK1

{RASTAV1}{TRECI JEK2

{DRUGI JEK2{DRUGI (l) eq TRECI (j) eq and

{RASTAV1}{RASTAV2} ifelse}

{RASTAV1}ifelse}

{RASTAV2}ifelse}

ifelse}ifelse}

ifelse}for

}ifvektor 0 j getinterval /vektor exch defvektor}bind def

Page 111: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

110

/PRVIZADNJI %stack:rijeË vektor; iza na stacku:vektor{/vektor2 exch def /rijec exch def/VL2 vektor2 length defVL2 0 ne{/DR rijec length def/prvi vektor2 0 get def /zadnji vektor2 VL2 1 sub get defprvi 1 eq

{/vektor3 vektor2 0 IZBACICLAN defzadnji DR 2 sub eq

{/vektor3 vektor3 vektor3 length 1 sub IZBACICLAN def}if}

{zadnji DR 2 sub eq{/vektor3 vektor2 VL2 1 sub IZBACICLAN def}{/vektor3 vektor2 def}ifelse}

ifelsevektor3} {vektor2} ifelse}bind def%/CRODIJELI{/rijec exch defrijec CROVEKTOR CISCVEKTORrijec exch DVOSTRUKI rijec exch PRVIZADNJIrijec exch (-) INSERT}bind def%/s {mark pstack pop} def%GLAVNI PROGRAM(Pojednostavljenje) CRODIJELI s pop(naglaπavanje) CRODIJELI s pop(prostorno) CRODIJELI s pop (ureivanje) CRODIJELI s pop(troπkovnik) CRODIJELI s pop (korektura) CRODIJELI s

-mark-(Po-jed-no-stav-lje-nje)-mark-(na-gla-πa-va-nje)-mark-(pro-stor-no)-mark-(ure-i-va-nje)-mark-(tro-πkov-nik)-mark-(ko-rek-tu-ra)

Page 112: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

111V. Æiljak, K. Pap: PostScript, programiranje tipografije

Prijelom teksta

Na slijedeÊe dvije stranice prikazan je program koji prelama tekst u fontu FSHelvetica sa veliËinomod 16 toËaka na zadanu πirinu stupca i zadanim vertikalnim pomakom (proredom). Prije pozivaprocedure LPRELOM mora se u glavnom programu definirati poËetak prve pismovne linije samoveto naredbom i postaviti tekst (string) na vrh stacka.

Na poËetku programa nalaze se svi parametri prijeloma: zadani font, πirina stupca M, vertikalnipomak L, πirina crtice dc za prijelom na kraju retka u zadanom fontu, πirina razmaka izmeu rijeËids u zadanom fontu i πirina stupca (retka) umanjena za πirinu crtice MC. Varijabla dM sadræi tekuÊupoziciju u pismovnoj liniji. Varijabla dw tokom programa sadræi cijelu rijeË ili slog rijeËi.

Procedura LPRELOM preuzima poziciju poËetka prve pismovne linije i πalje rijeË po rijeË uproceduru PRELOM. U proceduri LPRELOM rijeπavaju se dva moguÊa sluËaja:

1. Naen razmak izmeu rijeËi (nije zadnja rijeË) -> πalji rijeË u proceduru PRELOM

2. Nije naen razmak izmeu rijeËi (zadnja rijeË)

-> πalji rijeË u proceduru PRELOM i zavrπi proceduru sa exit (gotov prijelom)

Procedura PRELOM rjeπava ove situacije:

1. RijeË stane u redak -> ispiπi rijeË i razmak, korigiraj dM=dM+dw+ds

2. RijeË ne stane u redak -> πalji rijeË u CRODIJELI za ubacivanje (-) i odi u PRELOMRIJECI

Ulaz u proceduru PRELOMRIJECI je rijeË koja nije stala u tekuÊi redak. Ta rijeË ima u sebiugraene crtice od procedure CRODIJELI. Procedura CRODIJELI rijeπava ove moguÊe situacije:

1. RijeË nema crtice -> prelazi u novi redak, ispiπi rijeË i razmak, korigiraj dM=dw+ds

2. RijeË ima crticu

2.1 Nije zadnji slog i stane u MC=redak-πirina crtice -> ispiπi slog i korigiraj dM=dM+dw

2.2 Prvi slog i ne stane u MC -> prelazi u novi redak, ispiπi slog i korigiraj dM=dw

2.3 Nije zadnji slog niti prvi slog i ne stane u MC

-> ispiπi (-), prelazi u novi redak, ispiπi slog, korigiraj dM=dw

2.4 Zadnji slog i ne stane u puni redak

-> ispiπi (-), prelazi u novi redak, ispiπi slog, razmak izmeu rijeËi, korigiraj dM=dw+ds

Na stranicama iza programa prikazani su ispisi za dva razliËita prijeloma. Parametri prijelomakao i pripadni glavni programi ispisani su plavom bojom unutar mreæe. Ulazni tekst se nalazi prikraju programa kao string varijabla filetxt. U string varijabli je dozvoljena upotrebaspecijalnog znaka (\) koji omoguÊuje pisanje stringa u viπe redova. InaËe bi kôd za prijelaz u noviredak bio dio stringa.

Page 113: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

112

/FSHelvetica findfont 16 scalefont setfont/dM 0 def %tekuca pozicija u liniji/M 200 def %sirine stupca (linije, teksta)/L 16 def %prored/ds ( ) stringwidth pop def/dc (-) stringwidth pop def/MC M dc sub def%/PRELOMRIJECI{/restw exch defrestw (-) search

{pop pop pop /PRVISLOG 1 def{restw (-) search

{ /w exch def pop/restw exch def/dw w stringwidth pop defdM dw add MC le

{w show /dM dM dw add def /PRVISLOG 0 def}{PRVISLOG 1 eq

{/PRVISLOG 0 def /Y Y L sub def X Y movetow show /dM dw def}{ (-) show/Y Y L sub def X Y movetow show /dM dw def}ifelse}

ifelse}{/w exch def/dw w stringwidth pop defdM dw add M le

{w show ( ) show/dM dM dw add ds add def}{(-) show/Y Y L sub def X Y movetow show ( ) show/dM dw ds add def}ifelse exit}

ifelse}loop}

{pop /Y Y L sub def X Y movetow show ( ) show /dM dw ds add def}ifelse

}bind def

Page 114: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

113V. Æiljak, K. Pap: PostScript, programiranje tipografije

/PRELOM{/w exch def/dw w stringwidth pop defdM dw add M le

{w show ( ) show /dM dM dw add ds add def}{w CRODIJELI PRELOMRIJECI }ifelse

}bind def%/LPRELOM{currentpoint /Y exch def /X exch def/txt exch def/resttxt txt def

{resttxt ( ) search{/w exch def pop /resttxt exch def w PRELOM }{/w exch def w PRELOM exit}ifelse

}loop}bind def%/filetxt(Tipografija je proces kreiranja tekstovne forme, pri Ëemu \se poπtuju dobro prouËene stare grafiËke norme. Zadatak je \tipografije da pomoÊu pisma na najbolji moguÊi naËin prenese \informaciju. Osnovni je element tipografije slovni znak: \verzal, kurent, kurziv, brojke, posebni znak, interpunkcija \i razmak izmeu rijeËi.) def%%%GLAVNI PROGRAM100 350 movetofiletxt LPRELOMshowpage

Page 115: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

114

100

200

300

400

500

100 200 300 400

Tipografija je proces kreira-nja tekstovne forme, pri Ëemu se poπtuju dobro pro-uËene stare grafiËke norme. Zadatak je tipografije da po-moÊu pisma na najbolji mo-guÊi naËin prenese informa-ciju. Osnovni je element ti-pografije slovni znak: ver-zal, kurent, kurziv, brojke, posebni znak, interpunkcija i razmak izmeu rijeËi.

/FSHelvetica findfont16 scalefont setfont/M 200 def/L 16 def%GLAVNI PROGRAM100 350 movetofiletxt LPRELOMshowpage

Page 116: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

115V. Æiljak, K. Pap: PostScript, programiranje tipografije

100

200

300

400

500

100 200 300 400

Tipografija je proces kreiranja tekstovne forme, pri Ëemu se po-πtuju dobro prouËene stare gra-fiËke nor-me. Zadatak je tipogra-fije da po-moÊu pisma na najbolji moguÊi na-Ëin prenese informaciju. Osnovni je element ti-pografije slovni znak: verzal, ku-rent, kurziv, brojke, po-sebni znak, interpunk-cija i ra-zmak izmeu rije-Ëi.

/FSTimesRom findfont12 scalefont setfont/M 60 def/L 14 def%GLAVNI PROGRAM150 480 movetofiletxt LPRELOMshowpage

Page 117: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

4

x

y

R - broj redaka

S - broj stupaca(x11 ,y

11 )

(xS1 ,y

S1 )

(xSR ,y

SR )

(x1R ,y

1R )

d

ab

DxSLIKA Dy

SLIKA

PostScriptIII poglavlje

programiranje pikselgrafike

Page 118: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

118

Piksel grafika

U ovom poglavlju prikazujemo sliku sastavljenu od sivihkvadratiÊa nazvanih piksel (picture element). Za svakipojedinaËni piksel karakteristiËno je da na cijeloj svojojpovrπini ima jednoliËnu sivoÊu. Vrijednost sivoÊe piksla dataje jednim brojem u jednom bajtu a to znaËi da je raspon odbijelog do crnog razdjeljen nekontinuirano na 265 stepenicasivog tona. U digitalnoj reprofotografiji korist se termin "sivaskala" kako bi se razlikova od kontinuiranog tonskog prelazasivoÊe kakvu imamo u tradicionalnoj fotografskoj tehnici.Ljudsko oko razlikuje oko 50 nijansi sive skale pa razdiobuod 256 doæivljavamo kao kontinuirani ton.

Slika se odreuje nizom brojaka koje pravilno gradeukupnu povrπinu slike od gornjeg lijevog ugla, horizontalnodesno tvoreÊi retke od vrha slike do dna, zavrπavajuÊi sdonjim desnim uglom kao zadnjim pikslom. Prikaz slike naekranu ili pisaËu traæi podatke o broju piksla u retku, brojustupaca, veliËini otisnutog piksla i poloæaju slike na stranici.

Interpretacija slike tiskom, metodom piksla i raster, uzimau obzir nekoliko faktora: reprodukcija detalja na slici,zauzetost memorije raËunala, brzina procesora raËunala,ograniËenja tiskarskog procesa digitalnog i analognog. Slika,ËesÊe nazivana original, obiËno se unosi u raËunaloskaniranjem. Pri tome se odreuje veliËina piksla to jest,elementarna kvadratiËna povrπina od kojih Êe se sastojatidigitalni zapis slike. Na povrπini savakog elementarnogdjeliËa slike integralno se Ëitata zacrnjenje i taj broj pridruæitipikslu. O detaljima ili strukturi originala unutar povrπinepiksla, nakon skaniranja, neÊe postojati nikakva informacija.Razlikovanje tih detalja moguÊe je jedino ponovnimskaniranjem, smanjivanjem elementarne povrπine Ëitanja, ato znaËi da se ista slika interpretira s mnogo viπe podataka.

Page 119: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

119V. Æiljak, K. Pap: PostScript, programiranje grafike

{GRGA}

Page 120: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

120

/GRGA <2B372A52D6D04A005C4F162325222425211511151E25221F201F1D28362A8CE3D17C100E3316181C1519180C21312A111A20191B1D1A223441C3C3B078410029180E0D201A1442757A774F222C1A1B1E1811162B4818110D0E110F0E09034B745B5F4E3B4A78722A211C19160E240F020A0E0C0B130F1A2310284C342E2E1E182D6252241A1919155E29050C0E0C0C0F101027271E151114110B151013171B1917180C0F0B0B0D0C0A0E1B23180A0B0F0B0A0D0F121C1A1C13191915140E0B0A0C0B0A070C131B12100E10110D0F161A1E2729221E1D24130E0C0A0C0A0D19080D11121F162027171010121D232027272B38270D0C0B0C062F5D0A0C11181E2524200E100F131D241B1B2633303A0D0D0C0D0A1530330B161E4556493730221632343B2E212C383D410D0D0C0D0E0612221A2B37646E686D816458695E634C363A48473C090F0F0D0D0B0903394F5671707A93ADB4B5AC98997C646F6C595E386320080E0B0A083A515A6B70859FBED0DADAD2CBB7B2B0996B6C304F1E0A0E0C0B07264564556186ACC8DCE7E8E5DAD6D2C1A37760064554130B0D06061A375A4B5B8FB2C8D8E2E8EADDD6CEBD9E693B0C17230E0B0E23061230545D648FB1C4CFDAE3E4D9D2CCBA9B5C300E0D0B0A0A1F5640202B63736B8EAAA9ACC4D1D3CAC6BAAA9C694D0E0F0D0A0C53528D7A31698E9796705A7EA7C2CAB7957D7A83746A0E0E0D0C0B0C55A0813E71ABB088560072A4BDCE99520B446284770501000507011286BF5C61A6B5C2BFAAB5AFB1B8919D7197A8B68639656833144A083B935A52A3BBC7CBCDC8A6A2BC97AEC6C7CABB85E5F3F4E2B6931A05586B4A9AB6CEDCE0D79DB6C4A5B4DACFC8AC81EBEBEBEDF06E00061C433C89B0CEDDD8CCBDBDB2ABBFE1DBBE9566ECE2D2C0DCA50C0007032079A1B6B193B2C9D8DBC5AFBDC9A86B57E5C08280B0BD854005030B499DAC9B694B64666A596492A27E483EE7DCB97FB2D0EBEDBD49000B51A3B2A2404E76483483A6926B2A07DFC3A3B8CBD9E2EEFAED7905073282BD9C7B8483A3B4AA7E32080EA09F91928BC3D3E9F3F0F9890804104BBBCCC4C2B3824C1C080B0F91516287A6CDECDFDEE8F0F57B060600318BB3AB702606080C0D0C5E62777F96DDFAEEE8E6E9F1EF750A08050A1E20315E0E0A0F0B23436C5F527DBAE5F4F9FFFCEEDFE683040A0906040F5711090B0FA7544F49585B4067838BA8C4EAF2E0B51307090807031F100B0818D05B6097A37332395155514C5988D7D72B040B0B0B0A0B0D0E080EAF3651999DC3781C2D415D523D37458132010A0B0D0B0A0B0A0A004456606D80471807030F7A886E565B534E1E050A0D0B0A090B0A01432A2E3324040509080221836657545B726C21070C0B0B0A0A0B005102010003080A0909090034C04286987260781C090C0C0B0A0B052308070809080909090908056C9BBB85897C46210B0B0B090B0A05180809080708080808090A090625728E7388605F1E090A090B0B1B55> def

%600/40=405/27=15x15 toËaka po pikslu

405 600 scale27 40 8 [27 0 0 40 neg 0 40] {GRGA}image showpage

Page 121: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

121V. Æiljak, K. Pap: PostScript, programiranje grafike

}minimalni PostScript programprikaza piksel slike

1 12 8[ 0.02 0 0 0.025 0 0]{<002952EE1EA070993E6680B8>} image

Slika u piksel grafici definira se nizom podataka koji odreujuzacrnjenje pojedinog piksla u nizu. Naπ primjer je dat prekoheksadecimalnih veliËina. Prvi piksel ima svjetlinu 0, drugi pikselsvjetlinu 29

H (heksadecimalno) od maksimalne svjetline FF

H. TreÊi

piksel ima vrijednost 52H do zadnjeg s vrijednoπÊu B8

H. Svaki piksel

zapisan je preko 8 bitova, a prikazat Êe se u jednom stupcu svih dvanaestvrijednosti slike. VeliËina ispisa pojedinog piksla je 50 horizontalnihtoËaka i 40 vertikalnih toËaka. Prva dva parametra programa odreujuslaganje niza piksla u stupce i redove. TreÊi parametar odreuje brojbitova za sivu skalu: 28 = 256 sivih razina.

›po

zitiv

an s

mje

r sl

agan

ja n

iza

piks

ela

poËetna koordinata›

00

255-dechex

255

postotak

100%29 214 84%52 173 68%EE 17 7%1E 225 88%A0 95 37%70 143 56%99 102 40%3E 193 76%66 153 60%80 127 50%B8 71 28%

dec

041822383016011215362

102128184

8-bitna svjetlina razina sivog

Tablica konverzije zadanog heksadecimalnogzapisa svjetline u dekadski zapis svjetline, pripadnudiskretnu dekadsku razinu sivog (0 -255) i postotakzacrnjenja povrπine piksla

› ›

broj stupaca broj redaka

1 12 8 [ 0 0 0 0] {string slike} image1¬50

1¬40

broj bitova πirina pikslaod 50 t

visina pikslaod 40 t

Page 122: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

122

3 4 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image

6 2 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image›

2 6 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image

5 7 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image

4 7 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image ›

2 4 8[ 1 15 div 0 0 1 15 div 0 0]{<002952EE1EA070993E6680B8>}image

(2)

(3)

(4)

(5)

(6)

(7)

Dvodimenzionalni raspored piksla ima dva naËina slaganja. Prvi naËin odgovaratoËnom (potpunom) iskoriπtenju podataka u stringu slike (1, 2, 3 i 4). Drugi naËin odnosise na nejednak broj piksla u slici s brojem podataka u stringu slike. Smjerovi slaganjaprikazani su strelicama. Slike (5, 6 i 7) prikazuju kako se slaæu piksli kada je pikselmatrica S x R manja (5) odnosno veÊa (6 i 7) od ponuenog niza piksela. Kada jemanja, popunjavanje prestaje na podatku koji zadnji popunjava zadanu matricu, a akoje veÊa onda image naredba poËinje nanovo uzimati podatke od poËetka stringa dokse ne popuni zadana matrica piksela. U oba naËina slaganja piksla popuniti Êe se dvodi-menzionalni oblik slike.

›pozitivan smjer slaganja niza piksela

poËetnakoordinata

›(1)

12 1 8[ 1 20 div 0 0 1 40 div 0 0]{<002952EE1EA070993E6680B8>}image

Page 123: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

123V. Æiljak, K. Pap: PostScript, programiranje grafike

Naredba image koristi 5 parametara koji moraju biti postavljenina stacku:

- broj piksela u retku Ëime je odreen broj stupaca S;

- broj piksela u stupcu (broj redaka) R;

- broj bitova po pikslu G Ëime jeodreen broj stepenica sive skale (2G);

- transformacijska matrica slike;

- string vrijednosti sivih razina slike.

S R G[A B C D t

x t

y]{string slike}

image

Transformacijska matrica data je relacijama:

x’ = Ax + Cy + tx

y’ = Bx + Dy + ty

Odreivanje veliËine slike naredbom scale

Transformacijska matrica [1 0 0 1 tx t

y] daje dimenziju

piksla kao kvadrat od 1 toËke, a time je πirina slike od S pikslajednaka S toËaka, a visina slike od R piksla je R toËaka. Zatransformacijsku matricu [2 0 0 5 t

x t

y] piksl je pravokutnik

πirine 1/2=0.5 toËaka i visine 1/5=0.2 toËaka, a πirina cijele slike0.5S toËaka, a visina 0.2R toËaka. Ako je transformacijska matricaslike takva da je A=S, a D=R [ S 0 0 R t

x t

y ] tada je piksl

πirine 1/S toËaka i visine 1/R toËaka, a dimenzija cijele slike jekvadrat od 1 toËke.

Vidi se da je dimenzija slike s matricom [A 0 0 D tx t

y]

zadana indirektno i to tako da kvocijent S/A definira πirinu slike, akvocijent R/D visinu slike. Direktno definiranje πirine i visine slikemoæe se postiÊi upotrebom naredbe scale prije image naredbei prikladnom transformacijskom matricom:

W H scaleS R G [S 0 0 R t

x t

y]{string slike}

image

Tako podeπena transformacijska matrica formira dimenziju slikekao jediniËni kvadrat koji se skalira (poveËava ili smanjuje) nadimenziju W i H toËaka.

Page 124: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

124

Definicija piksla preko inverzne transformacije

Uvrijeæeno je razmiπljanje da je piksel kvadratiËnogoblika jer mnogi programi imaju samo takovu moguÊnostmanipulacije s njim. Piksli su definirani kao paralelogramipa svaki pojedini piksel moæe poprimiti zakrenute deformi-rane oblike.

Koordinatni prostor slike je zaseban koordinatni prostorgdje su pikseli predstavljeni kao kvadrati sa stranicama od1 toËke (slika 1), pa su kutne koordinate prvog piksla (0,0),(1,0), (1,1) i (0,1), a kutne koordinate cijele slike u tomprostoru su (0,0), (S,0), (S,R) i (0,R).

Stvarne koordinate svakog piksla dobivaju se inverznomtransformacijom zadanom sa transformacijskom matricom[A B C D t

x t

y] na naËin da je ciljni koordinatni prostor

jediniËni koordinatni prostor slike. Transformacijska matricadefinira relacije s time da su koordinate (x’,y’) iz jediniËnogkoordinatnog prostora slike:

(0,0)

y ’

(1,0)

(0,1) (1,1)

(S,0)

(S,R)(0,R)

x’(slika 1)

=xAD - BC

(x’-tx)D - (y’-t

y)C

; =yAD - BC

(y’-ty)A - (x’-t

x)B

x’ = Ax + Cy + tx

y’ = Bx + Dy + ty

iliA CB D[ ] x

y=][x’-t

x

y’-ty

[ ]Koordinate piksela koji Êe se prikazati (u tisku ili na

ekranu) dobivaju se rjeπavanjem gornjeg sustava jednadæbi:

det1

det=x

det2

det=y

det1= x’-t

xC

y’-ty

D| |det

2= A x’-t

x

B y’-ty| |

| |det = A CB D

Page 125: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

125V. Æiljak, K. Pap: PostScript, programiranje grafike

Koordinate prvog piksela izraËunavaju se iz Ëetiri sustavajednadæbi s dvije nepoznanice:

ToËka (x,y) koja se dobiva kada je (x’,y’) = (0,0) oznaËenaje sa (T

x, T

y) jer ona predstavlja translaciju slike (slika 2):

=Tx AD - BC

Cty - Dt

x ; =Ty AD - BC

Btx - At

y

0 = Ax + Cy + tx

1 = Bx + Dy + ty

1 = Ax + Cy + tx

1 = Bx + Dy + ty

1 = Ax + Cy + tx

0 = Bx + Dy + ty

0 = Ax + Cy + tx

0 = Bx + Dy + ty

(Tx,Ty)

y

x

(slika 2)

Iz izraËunavanja preostalih (x,y) toËaka za jediniËni pikselizvedene su relacije preko kojih se vide nagibi i izduæavanjajednog piksla (slika 3):

=AD - BC

D - CDx

=AD - BC

A - BDy

=AD - BC

DDx’

=AD - BC

- BDy’

tgg =Dx

Dy=

D - C

A - Btgg

g = arctg( D - C

A - B

=Dx’

Dy’tga =

- B

Dtga

)

a= arctg( - B

D )

Page 126: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

126

=Dx-Dx’AD - BC

- C

=AD - BC

ADy-Dy’=

Dx-Dx’

Dy-Dy’tgb =tgb

Bez ponovnog rjeπavanja sustava jednadæbi za svaku koordinatu pik-sela Ëitave matrice slike S x R, moæe se pomoÊu prethodnih relacija zaprvi piksel izraËunati koordinatna toËka bilo kojeg piksla slike samo natemelju poznavanja pozicije piksela preko broja retka i i stupca j slike ((x

I, y

I), (x

II, y

II), (x

III, y

III), (x

IV, y

IV) ) (slika 4):

AD - BC

AD - BC

(j - 1)D - (i - 1)C

(i - 1)A - (j - 1)B+ T

y

+ Tx

xI =

yI =

=AD - BC

jD - iC

=AD - BC

iA - jB+ T

y

+ Txx

III

yIII

xIII

= xI + Dx

yIII

= yI + Dy

(slika 3)

=AD - BC

jD - (i - 1)C

=AD - BC

(i - 1)A - jB+ T

y

+ Txx

II

yII

xII = x

I + Dx’

yII = y

I + Dy’

xI = (i - 1)(Dx-Dx’) + (j - 1)Dx’

yI = (i - 1)(Dy-Dy’) + (j - 1)Dy’

b= arctg- A

C

- A

C( )

Dy’

Dx’

a

Dy - Dy’

Dx - Dx’b

x

y

g

Dx

Dy

x

y

Page 127: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

127V. Æiljak, K. Pap: PostScript, programiranje grafike

x

y

12

4

1

3

III

IIIIV

R2

3

S

R - broj redaka

S - broj stupaca

(Tx, Ty)

= 4

= 3

i = 1,R

j = 1,S

j

i

=

=

AD - BC

(j - 1)D - iC

AD - BC

iA - (j - 1)B+ T

y

+ Tx

xIV

yIV

xIV

= xI + (Dx-Dx’)

yIV

= yI + (Dy-Dy’)

Koordinate cijele slike ( (x11

, y11

), (xS1

, yS1

), (xSR

, ySR

), (xIR

, yIR

) ) ikut deformacije d prikazane su na slici 5 i definirane su sa relacijama:

x11

=

y11

=

Tx

Ty

xS1

=

yS1

=

AD - BC

AD - BC

SB

SD+ T

x

+ Ty

(slika 4)

Page 128: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

128

xSR

=

ySR

=

AD - BC

AD - BC

RA - SB

SD - RC+ T

x

+ Ty

x1R

=

y1R

=

AD - BC

AD - BC

RA

- RC+ T

x

+ Ty

(slika 5) x

y

R - broj redaka

S - broj stupaca

(x11,y11)

(xS1,yS1)

(xSR,ySR)

(x1R,y1R)

d a

b

DxSLIKA

DySLIKA

DySLIKAtgd =DxSLIKA

=tgdSD - RC

RA - SBd= arctg( SD - RC

RA - SB )

DxSLIKA

= xSR

- x11

DySLIKA

= ySR

- y11

AD - BC

SD - RCDxSLIKA

=AD - BC

RA - SBDySLIKA

=

Page 129: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

129V. Æiljak, K. Pap: PostScript, programiranje grafike

Sve relacije su date za poËetni koordinatni sustav defini-ran s 1 1 scale. Ako se ispred naredbe image definiraskaliranje W H scale tada Êe se x relacije mnoæiti sa ska-larom W, a sve y relacije sa skalarom H. Koordinate slike ikutevi deformacije slike u takvom skaliranom koordinatnomprostoru imaju relacije:

x11

=

y11

=

TxW

AD - BC

AD - BC

SB

SD+ T

x

+ TyT

yH

xS1

=

yS1

=

( ) W

( ) H

a= arctg( - B

D )H

Wb= arctg(- A

C )H

W

U primjerima koji slijede prikazane su razne kombinacijeparametara rasporeda piksla po slici S i R, matrice transfor-macije i parametara W i H u naredbi scale. U prve Ëetirislike postignut je isti oblik slike premda su koriπtene razliËitekombinacije parametara W, H, A i D. U Ëetvrtom primjeruje prvi piksel podignut od ishodiπta slike (20 300 trans-late) za cijelu visinu slike, a napredovanje slaganja pikslaje u tekuÊem retku desno a potom vertikalno prema dolje(negativni smjer). U primjerima od πestog do desetogdemonstrirano je djelovanje parametara B, C, t

x i t

y, s time

da imaju zajedniËko ishodiπte u (0, 0).

AD - BC

AD - BC

RA - SB

SD - RC+ T

x

+ Ty

xSR

=

ySR

=

( ) W

( ) H

AD - BC

AD - BC

RA

- RC+ T

x

+ Ty

x1R

=

y1R

=

( ) W

) H(

g = arctg( D - C

A - B )H

Wd= arctg

SD - RC

RA - SB H

W( )

Page 130: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

130

/slika <002952401EA070993E6680B8> def/font1 {/FSHelvetica findfont 10 scalefont setfont} defgsave20 400 translate font1 40 63 moveto (1) show1 1 scale 4 3 8 [0.05 0 0 0.05 0 0]{slika} image grestore

gsave150 400 translate font1 40 63 moveto (2) show20 20 scale 4 3 8 [1 0 0 1 0 0]{slika} image grestore

gsave280 400 translate font1 40 63 moveto (3) show80 60 scale 4 3 8 [4 0 0 3 0 0]{slika} image grestore

gsave20 300 translate font1 40 63 moveto (4) show80 60 scale 4 3 8 [4 0 0 -3 0 3]{slika} image grestore

gsave300 300 translate font1 65 42 moveto (5) show80 60 scale 3 4 8 [4 0 0 3 0 0]{slika} image grestore

gsave300 100 translate font1 50 -50 moveto (6) show200 200 scale 4 3 8 [8 2 4 3 0 0]{slika} image grestore

gsave0 0 translate font1 50 45 moveto (7) show1 1 scale 4 3 8 [0.10 0 -0.05 0.10 -2 -1]{slika} image grestore

gsave0 0 translate font1 113 110 moveto (8) show10 10 scale 4 3 8 [0.6 0 -0.5 0.6 -2 -5]{slika} image grestore%%%% Isto bi se dobilo sa 1 1 scale i [0.06 0 -0.05 0.06 -2 -5]

gsave0 0 translate font1 160 230 moveto (9) show1 1 scale 4 3 8 [0.08 -0.01 -0.05 0.03 -2 -5]{slika} image grestore

gsave0 0 translate font1 220 195 moveto (10) show1 1 scale 4 3 8 [0.05 0 -0.05 0.03 -2 -5]{slika} image grestore showpage

Page 131: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

131V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

1 2 3

4

5

67

8

9

10

Page 132: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

132

/font1 {/FSHelvetica findfont10 scalefont setfont} def

gsave50 70 translate font1 81 -10 moveto (1)show162 240 scale27 40 8 [27 0 0 40 neg 0 40] {GRGA}image grestore

gsave300 70 translate font1 85 15 moveto (2)show162 240 scale27 40 8 [27 -10 0 40 0 0] {GRGA}image grestore

gsave130 350 translate font1 -60 120 moveto (3)show162 240 scale27 40 8 [27 0 15 40 neg 0 40] {GRGA}image grestore

gsave200 230 translate font1 230 330 moveto (4)show162 240 scale27 40 8 [27 10 -20 40 neg 0 40] {GRGA}image grestoreshowpage

S pikslima koji opisuju sliku GRGA demonstriraju se pa-ralelogramske transformacije realne slike. U svim primjerimakoriπten je postupak odreivanja veliËine slike s relacijamaS=A i R=D, a veliËina slike se kontrolira s parametrima W iT naredbe scale.

Transformacijski kutevi slika su:

a∞ b∞ g∞ d∞1. 0∞ 90∞ -45∞ -56∞2. 20∞ 90∞ 54∞ 62∞3. 0∞ -70∞ -36∞ -44∞4. 20∞ 63∞ -52∞ -77∞

Page 133: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

133V. Æiljak, K. Pap: PostScript, programiranje grafike

1

2

3

4

d

g

dg

a

d

g

b

d

g

b

a

Page 134: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

134

0

255-decbin.kod

255

postotak

100%1 0 0%

dec

0255

1-bitna svjetlina razina sivog

00

255-decbin.kod

255

postotak

100,00%01 170 66,67%10 85 33,33%11 0 0,00%

dec

085170255

2-bitna svjetlina razina sivog

0

255-dechex-kod

255

postotak

100,00%238 93,33%221 86,67%204 80,00%

dec

01734

68

4-bitna svjetlina razina sivog

187 73,33%85 170 66,67%102 153 60,00%119 136 53,33%

119 46,67%136102 40,00%15385 33,33%17068 26,67%18751 20,00%20434 13,33%22117 6,67%2380 0,00%255

51

123456789ABCDEF

Broj razina sive skale je prva karakteri-stika digitalne slike. PostScript ima mo-guÊnost interpretirati sliku sa 2, 4, 16, 256i 4096 stepenica sivih tonova. Paramet-rom G (1, 2, 4, 8, 12) zadanim neposrednoprije matrice transformacije piksla, odre-ujemo broj bitova, a time i stepenice siveskale. Prvi redak naπeg uzorka dat je he-ksadecimalno odnosno binarno:

Za raspored od 2 bita po pikslu imamo:

3 E 0 3 C 1 F C

0011 1110 0000 0011 1100 0001 1111 1100

0011 1110 0000 0011 1100 0001 1111 110075% 99% 24% 1%

Za raspored od 8 bita po pikslu imamo:

Za raspored od 4 bita po pikslu imamo:

00 11 11 10 00 00 00 11 11 00 00 01 11 11 11 00100% 0% 0% 33% 100% 100% 100% 0% 0% 100% 100% 66% 0% 0% 0% 100%

0011 1110 0000 0011 1100 0001 1111 110080% 6,67% 100% 80% 20% 93% 0% 20%

U primjerima sa 2, 4, 16 i 256 razina sivognaredba image je podeπena da su piksli uispisu kvadrati dimenzije 12 toËaka.

Page 135: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

135V. Æiljak, K. Pap: PostScript, programiranje grafike

% 2 razine sivog=1 bit po pikslu384 384 scale

32 32 1[32 0 0 32 neg 0 32]{<3E03C1FC1FFFFFF08FFFFFE3C7FFFF87E3FFFF1FF1FFFC3FF8FFF8FFFC7FE1FFFE3FC3FFFF1F8FFFFF8E1FFFFFC47FFFFFE0FF83FFE1FF83FF80FFEFFF1C7FEFFC3E3FEFF8FF1FFFF3FF8FFFE7FFC7FFCFFFE3FF9FFFF1FF3FFFF8FF7FFFFC7F7FFFFE3F7FF03F1F7FF03F8F3FFFBFC7BFFF3FE39FFE7FF1C7FCFFF8F001FFFC>}image

showpage

Page 136: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

136

% 4 razine sivog=2 bit po pikslu192 384 scale

16 32 2[16 0 0 32 neg 0 32]{<3E03C1FC1FFFFFF08FFFFFE3C7FFFF87E3FFFF1FF1FFFC3FF8FFF8FFFC7FE1FFFE3FC3FFFF1F8FFFFF8E1FFFFFC47FFFFFE0FF83FFE1FF83FF80FFEFFF1C7FEFFC3E3FEFF8FF1FFFF3FF8FFFE7FFC7FFCFFFE3FF9FFFF1FF3FFFF8FF7FFFFC7F7FFFFE3F7FF03F1F7FF03F8F3FFFBFC7BFFF3FE39FFE7FF1C7FCFFF8F001FFFC>}image

showpage

Page 137: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

137V. Æiljak, K. Pap: PostScript, programiranje grafike

% 16 razine sivog=4 bit po pikslu96 384 scale

8 32 4[8 0 0 32 neg 0 32]{<3E03C1FC1FFFFFF08FFFFFE3C7FFFF87E3FFFF1FF1FFFC3FF8FFF8FFFC7FE1FFFE3FC3FFFF1F8FFFFF8E1FFFFFC47FFFFFE0FF83FFE1FF83FF80FFEFFF1C7FEFFC3E3FEFF8FF1FFFF3FF8FFFE7FFC7FFCFFFE3FF9FFFF1FF3FFFF8FF7FFFFC7F7FFFFE3F7FF03F1F7FF03F8F3FFFBFC7BFFF3FE39FFE7FF1C7FCFFF8F001FFFC>}image

showpage

% 256 razine sivog=8 bit po pikslu48 384 scale

4 32 8[4 0 0 32 neg 0 32]{<3E03C1FC1FFFFFF08FFFFFE3C7FFFF87E3FFFF1FF1FFFC3FF8FFF8FFFC7FE1FFFE3FC3FFFF1F8FFFFF8E1FFFFFC47FFFFFE0FF83FFE1FF83FF80FFEFFF1C7FEFFC3E3FEFF8FF1FFFF3FF8FFFE7FFC7FFCFFFE3FF9FFFF1FF3FFFF8FF7FFFFC7F7FFFFE3F7FF03F1F7FF03F8F3FFFBFC7BFFF3FE39FFE7FF1C7FCFFF8F001FFFC>}image

showpage

Page 138: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

138

Reprodukcija fotografije danas je najËeπÊa sa 8 bitnimrazinama sivog. Ljusko oko dobro razlikuje 50 stepenica siveskale za πto bi bilo dovoljno 6 bita (26 = 64). Standard od 8bita proπiren je i na boju RGB, CMYK. Crno bijele slikemaloga Grge prezentirane su s jednim, dva, Ëetiri i osambita. Proporcionalno tome, memorija pojedinih slika je:

stepenice broj bitova broj piksla memorija sivog po pikslu horiz. vert. (byte)

2 1 825 1241 127.9784 2 825 1241 225.95616 4 825 1241 511.912

256 8 825 1241 1.023.825

Slike su ispisane na jednake dimenzije 148.5 x 223.38toËaka (naredba scale).

148.5 223.38 scale825 1241 1 [825 0 0 1241 neg 0 1241]{<000000000000000000000000......0000000000000000FFFFFF80>}image showpage

148.5 223.38 scale825 1241 2 [825 0 0 1241 neg 0 1241]{<000000000000000000000000......555555555556AAAAAAAAAAAA>}image showpage

2 stepenice sivog 4 stepenice sivog

Page 139: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

139V. Æiljak, K. Pap: PostScript, programiranje grafike

148.5 223.38 scale825 1241 4 [825 0 0 1241 neg 0 1241]{<112222222333223333333333......888888889988899888899989>}image showpage

148.5 223.38 scale825 1241 8 [825 0 0 1241 neg 0 1241]{<1D1F22272827292E2F303031......8E919189838B8D9093908D91>}image showpage

16 stepenice sivog 256 stepenice sivog

U standardnim programima za piksel grafiku, kao πto jenpr. Photoshop, piksl na ekranu je uvijek kvadratiËnedimenzije. VeliËina piksla se zadaje implicitno preko pojmarezolucije, odnosno brojem piksla po nekoj duæinskoj mjernojjedinici npr. po inchu ili centimetru. Na primjer rezolucija400 ppi (pixl per inch) odreuje kvadratiËni piksel Ëija jestranica velika 0,18 tipografskih toËaka (1 inch=72tp). Akose πirina i visina cijele slike u takvim programima ne izrazikao viπekratnik od 0.18tp tada se ulazi u za njih nedozvoljenostanje koje se moæe ispraviti jedino zaokruæivanjem nanajbliæe viπekratnike od 0,18 tp. To træiπni softveri kaoPhotoshop rade pri upisivanju æeljene dimenzije slikeautomatski pretvarajuÊi nedozvoljeno upisanu dimenziju unajbliæi viπekratnik dimenzije piksla.

Page 140: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

140

Piksel se moæe opisati i kao prostor slike koji je na cijelojsvojoj povrπini istog tona. Skaniranjem, prostor pikslaintegrira sve tonove na tom podruËju, usrednjuje ih u samojednu vrijednost. Ukoliko je piksel grub (to je relativno) tadasu nakon skaniranja ili resempliranja zauvijek izgubljenidetalji manji od piksla.

»etiri 8-bitne slike demonstriraju promjene detaljasmanjenjem memorije, odnosno smanjenjem broja piksla isteslike za faktor 10 od 1MB do 1kB.

slika broj piksla memorijahoriz. vert. (byte)

1 825 1241 1.023.825 ª 1 MB2 260 391 101.660 ª 100 kB3 80 211 9.680 ª 10 kB4 27 40 1.080 ª 1 kB

VeliËina piksla odreuje se ispisom, prikazom slike. Dobrirezultati se dobe ako je ispis slike oko 300 piksla po inËu.BuduÊi da je kvaliteta otiska odreena veliËinom piksla,prilikom skaniranja fotografije, rezolucija skaniranjapodreena je dvema brojkama: poveËanje (smanjenje)originala i broja piksla po duænom inËu (najËeπÊe 300). Uobzir moæe biti uzet i treÊi faktor - udaljenost gledanja otiska.ZnaËajan je ako se otisci gledaju iz veÊe udaljenosti (plakati)jer dozvoljavaju proporcionalno poveËanje dimenzije pikslau otisku. Predlaæemo grubu relaciju:

b

aª 3000,gdje je a veliËina stranice jednog piksla

ab

ili

udaljenost (inË) broj piksla / (inËu) ª 3000

udaljenost (cm) broj piksla / (centimetru) ª 3000

Page 141: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

141V. Æiljak, K. Pap: PostScript, programiranje grafike

148.5 223.38 scale825 1241 8 [825 0 0 1241 neg 0 1241]{<1D1F22272827292E2F303031......8E919189838B8D9093908D91>}image showpage

148.5714 223.4286 scale260 391 8 [260 0 0 391 neg 0 391]{<20272C2F3134333535333434......5D646B7277797D898A888B8D>}image showpage

147.6923 223.3846 scale80 121 8 [80 0 0 121 neg 0 121]{<25313435353638292A324DCA......0D0C0D0E1118273B51657F91>}image showpage

149.5385 221.5385 scale27 40 8 [27 0 0 40 neg 0 40]{GRGA}image showpage

400 ppi 126 ppi

1.023.825 Bª 1 MB

101.660 Bª 100 kB

39 ppi 13 ppi

9.680 Bª 10 kB

1.080 Bª 1 kB

Page 142: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

142

Pikseli se mogu ispisivati sivi (Gray), RGB ili CMYK sa komandom colorimage:

gsave100 100 translate200 150 scale4 3 8[4 0 0 -3 0 3]{<FF0000FFFFFFC4D99159C4E3>} prvih 12 boja sa 57 str.{<00FF00B3D159709EA8FFFFE3>}{<0000FF0F912BFFFFFFD9C447>}true3colorimagegrestore

gsave100 300 translate200 150 scale4 3 8[4 0 0 -3 0 3]{<FF000000140F4D8F456E2E00>} osnovne 4 i{<00FF0000265C3B2600000061>} 8 zadnjih boja sa 57 str.{<0000FF00571C00002E456EE6>}{<000000FF00001C0F260F0F26>}true4colorimagegrestoreshowpage

4 3 8 [ 4 0 0 -3 0 3] {string1 slike}...{string

N slike} METODA N colorimage{

transformacijska matrica

Prva tri parametra su istog znaËenja kao i kod image naredbe. S parametrom Ndefinira se kolorni prostor odnosno broj komponenata boje po pikslu. Za sivi zapis(ponaπa se kao image komanda) N=1, za RGB N=3, a za CMYK N=4. RGB i CMYKkomponente mogu se zapisivati na jednostruki i viπestruki naËin. U jednostrukom zapisuse sve komponente zapisuju u jednom stringu naizmjeniËno piksl po piksl (npr.R

1G

1B

1R

2G

2B

2R

3G

3B

3...), a u viπestrukom se komponente zapisuju u odvojenim

stringovima kao u primjeru na ovoj stranici. Ako je parametar METODA true definirase viπestruki, a ako je false definira se jednostruki zapis komponenata.

Page 143: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

143V. Æiljak, K. Pap: PostScript, programiranje grafike

100

200

300

400

500

100 200 300 400

Page 144: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

144

INDEX

add, 37, 42and, 91arc, 18, 20arcn, 20arcto, 20, 24array, 92ashow, 82, 84atan, 42, 37awidthshow, 86

charpath, 72, 74ciscvektor, 100clear, 36clip, 76closefile, 104closepath, 8colorimage, 142copy, 37crodijeli, 108crovektor, 108ctekst, 94curveto, 22, 24, 26, 37, 44

div, 42, 37dup, 36, 38dvostruki, 106

eofill, 34eq, 90exch, 36

file, 104fill, 10findfont, 66, 68for, 46, 48, 50forall, 92,93

ge, 90get, 70, 92, 93getinterval, 92, 93grestore, 30

gsave, 30gt, 90

idiv, 37if, 91ifelse, 91image, 121,123index, 37, 40insert, 98izbaciclan, 106

jevokal, 102jtekst, 96

kshow, 88

le, 90length, 84, 92, 93lineto, 6lt, 90ltekst, 94

makefont, 80mod, 37moveto, 6mreza, 50, 52, 53mul, 42, 37

ne, 90neg, 37, 38newpath, 76not, 91

operatori, 90 - 93or, 91

piksel, 118, 139pop, 36prelom, 111procedure, 38prvizadnji, 108put, 92, 93

putinterval, 92, 93readstring, 104repeat, 28, 50rlineto, 8roll, 36rotate, 30rtekst, 94

saturacija, 58 - 61scale, 32, 123, 129scalefont, 66, 68, 70search, 93setcmykcolor, 54, 62setdash, 16setfont, 66, 68setgray, 10sethsbcolor, 58 - 61, 62setlinecap, 12setlinejoin,14setlinewidth, 8setmiterlimit, 14setrgbcolor, 56, 62show, 66, 68showpage, 6sort, 42spoji, 98sqrt, 42stack, 36string, 92stringwidth, 84stroke, 6strokepath, 78sub, 37, 42

tipografija, 65translate, 18

widthshow, 86writestring, 104

xor, 91xyshow, 86

Page 145: PostScript - Hrvatski Telekomfree-zg.t-com.hr/kpap/postcript.pdfV. Æiljak, K. Pap: PostScript, programiranje grafike 3 Predgovor Ovaj digitalni udæbenik namijenjen je uËenju programiranja

145V. Æiljak, K. Pap: PostScript, programiranje grafike

LITERATURA

1. I. Adobe Systems: „PostScript Language Reference Manual”, Addison-Wesley, 19852. I. Adobe Systems: „PostScript Language Tutorial and Cookbook”, Addison-Wesley, 19853. I. Adobe Systems, G. C. Reid: „PostScript Language Program Design”, Addison-Wesley, 19884. S. F. Roth: „Real World PostScript”, Addison-Wesley, 19885. D. Holzgang: „PostScript Programmer’s Reference Guide”, Scott, Foresman and Company, 19896. R. Smith: „Learning PostScript: A Visual Approach”, Peachpit Press, 19907. I. Adobe Systems: „PostScript Language Reference Manual”, Addison-Wesley, 19908. C. R. Glenn: „Thinking in PostScript”, Addison-Wesley, 19909. I. Adobe Systems: „Adobe Type 1 Font Format”, Addison-Wesley, 1990

10. H. McGilton, M. Campione: „PostScript by Example”, Addison-Wesley, 199211. P. Fink: „PostScript Screening: Adobe Accurate Screens”, Adobe Press, 199212. T. Merz: „PostScript & Acrobat, PDF”, Springer, 1996

Ime PostScript® je registrirani znak u vlasništvu Adobe Systems Incorporated