MFF UK / Ústav teoretické fyziky / Tomáš Ledvinka |
|
Cvičení z postscriptuPro zájemce jsou zde příklady, jak v postscriptu
namalovat v různých měřítcích
se opakující vzory. Detaily jazyka nad rámec tohoto příkladu je možno nastudovat z manuálu [adobe.com] .
Výše uvedený obrázek se skládá z 300 lístků geometricky podobných tomuto:
Jeden lístek nakreslíme pomocí Bezierova splinu takto: newpath % nova cesta Abychom ale mohli snadno měnit velikost a tvar lístků definueme si symboly w a D pomocí příkazu def. Lomítko před symbolem v
postscriptu říká, že symbol se má chápat
jménem a ne hodnotou.
0 0 moveto % pocatek closepath Číslo -w jsme z w vyrobili zavoláním
funkce pro otočení znaménka, tedy w neg.
gsave % schovej cestu a barvu Číslo w můžeme
změnit a nakreslit širší lístek.
Vykreslení lístku zapíšeme jako proceduru folia: /folia { % procedure folia Nyní je potřeba lístky vhodně otáčet a
škálovat. Jak a proč se dočtete třeba zde
[mcs.surrey.ac.uk] . /D 350 def % prumer kyticky Pro snadné zapsání budeme potřebovat
provádět cyklus a to od větších lístků k
menším. Cyklus for se zapíše jako 0 1 N 1 sub { % for i := 0 to N-1 do (step 1) Výsledný kód nemusíte slepovat z
výše uvedených kousků, u každého obrázku je
uveden v odkazu pod ním.
Chceme-li měnit barvu použijeme řídící proměnnou k výpočtu barvy, nejdříve jako obvykle spočteme hodnotu (N-i)/N, tu si pak na zásobníku zduplikujeme příkazem dup a použijeme ji jako zelenou komponentu pro poceduru setcolor. Protože ale ta očekává pořadí R G B setcolor, musíme k výchozímu G přidat R a pak jejich pořadí G R prohodit příkazem exch, čímž získáme R G. Stačí přidat B=0 a můžeme zavolat setcolor. N sub neg N div % t := (N-i)/N
V manuálu si můžeme přečíst jak funguje fukce rand pro náhodná celá čísla a použít ji.
Barvu také můžeme vytvořit podle vztahu SetColor(1, (i mod K)/K,0 ) a pro vhodně zvolené K nám vyjde:
nebo třeba
Taktéž můžeme měnit hodnotu úhlu poootočení, třeba na delta = (sqrt(3)+1) *180 :
nebo delta = (sqrt(7)+1) *180 :
Příjemnou zábavu. |
. |