So-net無料ブログ作成
検索選択

同心円を描く [PostScript]

円弧を描く PART2


30-01同心円.png
PostScriptで同心円を描きましょう。
繰り返しオペレータを使い、制御変数の値を次々円の半径に入れていくことで、同心円を描きます。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:同心円を描く 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 0 10 100 { % 0から10づつ半径を増やし100になるまで{ }内を繰り返す /r exch def % 制御変数をr(半径)に入れる 0 0 r 0 360 arc stroke % 円を描画 } for

30-02同心円.png
次は座標の拡大scaleを使用して円の半径を大きくしていく方法です。
座標を拡大しているので、線幅も大きくなってしまいます。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:同心円を描く 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 0 1 10 { % 0から1づつ半径を増やし10になるまで{ }内を繰り返す pop % ここでは制御変数を使わないのでスタックから削除 0 0 10 0 360 arc stroke % 円を描画 1.25 1.25 scale % 座標を1.25倍にする } for

30-02同心円4.png
線幅は同じで座標の拡大scaleを使用して円の半径を大きくしていく方法です。
座標関連は説明ができるほどの知識はありませんので、線幅を固定する方法として★のコードを使用してください。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:同心円を描く 120 120 translate % 座標の原点を中央に移動 /cmtx matrix currentmatrix def % ★カレント座標を保存する newpath % パスの初期化 0 1 10 { % 0から1づつ拡大率を増やし10になるまで{ }内を繰り返す dup scale % 制御変数を複製して座標を拡大する 0 0 10 0 360 arc % 円を引く cmtx setmatrix % ★座標を拡大前の座標に復元 stroke % 円を描画 } for

【オペレータの説明】
matrix6 つの要素を含む恒等行列([1 0 0 1 0 0])を返す。(PostScriptリファレンスマニュアル第3版より)
変換行列(matrix) currentmatrix matrix の値をグラフィックス状態のCTM で置換してオペランドスタックにプッシュする。(PostScriptリファレンスマニュアル第3版より)
CTM(Current Transformation Matrix; カレント変換行列):ユーザー座標系の座標値をデバイス座標系の値に変換する
setmatrix前のカレント変換行列(CTM)を参照せずに、グラフィックス状態のCTMをmatrix に設定する。(PostScriptリファレンスマニュアル第3版より)
dupスタックの一番上にある要素をコピーする
例)1 dup → 1 1
2 dup scale → 2 2 scale


タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました