今回は、渦巻きを描いてみる。こんな感じ。
半円を滑らかに繋いで作ったスパイラル図形 |
%PS-Adobe-3.0変数を使って、もう少し賢くやってみた。
newpath
3 setlinewidth
295 300 5 0 180 arc stroke
300 300 10 180 360 arc stroke
290 300 20 0 180 arc stroke
310 300 40 180 360 arc stroke
270 300 80 0 180 arc stroke
350 300 160 180 360 arc stroke
190 300 320 0 180 arc stroke
showpage
%PS-Adobe-3.0defの使い方をマスターして、変数が使えるようになったのは大きい。defにするとスタックに入らないということだ。
newpath
5 setlinewidth
/x0 400 def
/y0 300 def
/x 0 def
/radius 2 def
/sgn -1 def
/a0 0 def
/a1 180 def
x0 y0 radius a0 a1 arc stroke
1 1 8 {
/n exch def
/nradius radius sgn mul def
/x x nradius add def
/xx x 400 add def
/a0 n 2 mod 180 mul def
/a1 a0 180 add def
/radius radius 2 mul def
xx y0 radius a0 a1 arc stroke
/sgn sgn -1 mul def
} for
showpage
/a0 n 2 mod 180 mul def
の意味は、「a0に、nを2で割った余りに180をかけたものをしまう」となる。まさに日本語の順番!
また、繰り返し(for)は、1 2 3 {...} forとやる。これは、「1から2おきに3まで繰り返し」と読む。このとき走るダミー添字には変数が付かない。(C++やJavaだと for(int i=1; i<=3; i +=2)などと書いて、ダミー添字iを導入する。)代わりに、スタックにダミー添字の値が入る。添字の内容が必要ない時はexchしてとりだしてしまう。1 2 3 {} forと、1 2 3{/n exch def} forとを比べてみれば一目瞭然。gsのプロンプトでの例は下。
GS>1 2 3 {} for
GS<2>pstack
3
1
GS<2>clear
GS>1 2 3 {/n exch def} for
GS>pstack
GS>
0 件のコメント:
コメントを投稿