座標変換にはスケーリング(拡大・縮小)、シェア(せん断)、ローテイト(回転)、鏡像、トランスレート(移動)などがあります。
concatオペレータは座標変換が一度に出来て便利なのですが、パラメータの組み合わせが良くわからなかったりします。そこで組み合わせのサンプルを作りました。
最初は拡大・縮小と鏡像です。
グレー部分が元の図形で、変換後は赤で示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| %!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:座標変換(拡大・縮小・鏡像)
0 0 240 240 rectstroke % 黒背景
120 120 translate % 座標の原点を中央に移動
2 setlinewidth % 線幅2ポイント
/box { % 変形前の図形
.5 setgray -50 -50 100 100 rectfill % グレー四角形
.7 setgray -50 30 20 20 rectfill % 左上のグレー四角形
0 0 50 0 360 arc stroke % 円
-40 -10 moveto % (-40,-10)に移動
/Helvetica findfont 24 scalefont setfont (Sample) show % テキスト表示
} def
/cbox { % 変形後の図形(赤)
1 0 0 setrgbcolor -50 -50 100 100 rectstroke
-50 30 20 20 rectfill
0 0 50 0 360 arc stroke
-40 -10 moveto
/Helvetica findfont 24 scalefont setfont (Sample) show
} def
newpath % パスの初期化
box % 変形前の図形
gsave % グラフィックス状態の保存
[ 1 0 0 1 0 0 ] concat % 座標変換(ノーマル状態)
newpath
cbox % 変形後の図形(赤)
grestore % グラフィックス状態の復元 |
1 2
| % x方向を0.5倍
[ .5 0 0 1 0 0 ] concat |
1 2
| % y方向を0.5倍
[ 1 0 0 .5 0 0 ] concatt |
1 2
| % x方向を2倍
[ 2 0 0 1 0 0 ] concat |
1 2
| % y方向を2倍
[ 1 0 0 2 0 0 ] concat |
1 2
| % x方向を1.5倍 y方向を2倍
[ 1.5 0 0 2 0 0 ] concat |
1 2
| % x方向・y方向を2倍
[ 2 0 0 2 0 0 ] concat |
1 2
| % 左右反転
[ -1 0 0 1 0 0 ] concat |
1 2
| % 天地反転
[ 1 0 0 -1 0 0 ] concat |
1 2
| % 天地左右反転(180度回転)
[ -1 0 0 -1 0 0 ] concat |
コメント