Crtanje u postscriptu I, 30. studenog 2012. godine

krug prešan u kvadrat

Iza mene su dva tjedna rada na Institutu Jožef Stefan u Ljubljani. Čini mi se da sam napravio zanimljive stvari i da je kolaboracija s Primožem bila vrlo uspješna. Sad još samo trebamo sve to objaviti u nekom pristojnom časopisu i završiti priču koja je započela prije dvije godine na Božićnoj radionici u Ptuju.

No, neću u ovom postu pisati o fizici na kojoj sam radio s Primožem. Pisat ću o slikama koje smo, između ostalog studirali, a koje su output koda koji sam napisao. Moj kod, naime, kao jedan od rezultata, proizvodi i postscript sliku. Jedna takva slika, rezultat mog koda, prikazana je iznad.

Postscript je jezik kojim se slika "programira", tj. stranica ispisa "opisuje", zato se i zove "page description language" (jezik za opis stranice). Premda je postscript zamišljen kao jezik za pisače, dobro napisani postscript kod možete pročitati i otprilike naslutiti kakvu sliku proizvodi odn. kodira.

Ovaj post trebao bi biti elementarni uvod u postscript nakon kojeg ćete moći načiniti slike koje su prikazane iznad i ispod. Za te je slike potrebno vrlo malo znanja o postscriptu, a ono je sasvim dovoljno za vrlo kompleksne prikaze. Vjerojatno ću u budućnosti objaviti još koji post o postscriptu gdje ću objasniti njegove naprednije mogućnosti.

kolumnarna kompresija diska

Najelementarnije poznavanje postscripta vam je već dovoljno da napravite slike koje bi bilo nemoguće načiniti "ručno" ili nekom naknadnom preradom numeričkog outputa računalnog koda (vidi npr. sliku iznad). Za početak, svaki postscript mora imati zaglavlje. Evo mog zaglavlja (prva linija; ona govori da se radi o postscriptu nivoa 2, level 2 postscript) i dvije naredbe koje definiraju način na koji ravne crte završavaju (setlinecap) i na koji se spajaju (setlinejoin):

%!PS-Adobe-2.0
gsave
1 setlinejoin
1 setlinecap


Umjesto načina 1 koji sam ja odabrao, možete odabrati i druge, a izgled završetaka linija i spojeva možete pogledati na >> brzom uvodu u postscript koji je napisao Paul Bourke i koji toplo preporučujem. Njegov je tekst star 22 godine, a i dalje je posve upotrebljiv, što da naslutiti da je postscript tehnologija koja će još neko vrijeme opstati.

Nakon zaglavlja, treba početi crtati. Crte, poligoni, kružnice i slično, definiraju se u koordinatnom sustavu stranice kojemu x-os pokazuje udesno, a y-os nagore, tj. ishodište se nalazi u donjem lijevom kutu sranice. Jedinična dužina (1) takvog sustava je 1/72 inča. A4 papir ima u takvim jedinicama dimenzije 595 x 842. Postscript dopušta necjelobrojne dužine odn. koordinate.

Novu "putanju", odn. grafički element započinjemo s naredbom:

newpath

Prije povlačenja prve linije definiramo njenu boju (setrgbcolor), odn., općenitije, boju koju ćemo koristiti nadalje, za bilo koji objekt koji ćemo iscrtavati:

0.035 0.000 0.000 setrgbcolor

Boju definiramo kao RGB trojku, gdje je bijelo RGB=(1,1,1). Gornja boja je dakle vrlo tamna crvena. Postava boje vrijedi sve do idućeg setrgbcolor iskaza gdje se može postaviti neka druga boja.

Sad povlačimo prvu crtu. Dobro je zamisliti da svojim kodom definiramo kursor koji se pomiče po papiru. Najprije ga odvedemo (moveto) na prvu koordinatu crte:

107.948 340.212 moveto

A onda mu kažemo da od te točke povuče crtu (lineto) do iduće točke:

116.177 353.291 lineto

Stvarno iscrtavanje crte završavamo naredbom:

stroke

I eto, tako to ide. Samo treba iscrtati mnogo linija. Evo kako izgleda cjelokupni kod:

%!PS-Adobe-2.0 gsave
1 setlinejoin
1 setlinecap
newpath
0.035 0.000 0.000 setrgbcolor
107.948 340.212 moveto
116.177 353.291 lineto
stroke
0.019 0.000 0.000 setrgbcolor
107.948 340.212 moveto
115.358 326.578 lineto
stroke
0.035 0.000 0.000 setrgbcolor
107.948 340.212 moveto
123.481 339.605 lineto stroke

...
grestore
showpage


Sa zadnje dvije linije zatvaramo potscript datoteku i prikazujemo iscrtanu stranicu (showpage). I to je to.

Na slici ispod prikazan je još jedan primjer, a njegov postscript zapis možete vidjeti otvarajući >> OVAJ file u nekom editoru za tekst. Da biste vidjeli postscript datoteke potreban vam je neki preglednik. Ja koristim uglavnom >> Ghostview (Ghostscript).

trokutasta mreža

Za kraj ovog posta, evo još jednog primjera u kojem sam iskoristio postscript za vizualizaciju virusa odn. fulerena (ispod).

Uočite da sam u slučajevima prikazanim iznad i ispod morao napisati u svom kodu malu rutinu koja je od trodimenzionalnih koordinata oblika proizvodila dvodimenzionalne koordinate za postscript. Radi se o najjednostavnijoj perspektivnoj projekciji o kojoj ću nešto reći u nekom idućem postu.

šesterokutna mreža

Svima onima koje je gornji tekst potaknuo da nauče nešto više o postscriptu, preporučujem famoznu "plavu knjigu" (blue book) iz koje o postscriptu mogu naučiti skoro sve. >> OVDJE je poveznica na plavu knjigu.

Pročitajte >> drugi dio uvoda u postscript OVDJE. A evo i >> TREĆEG dijela uvoda u postscript.

<< Haiku o samoći Haiku o sakeu >>

Zadnji put osvježeno: 30. studenog 2012. godine.