

菱形が三つ、立方体のようにも見える丸ニ三ツ菱という家紋です。
簡単に描く方法として、六角形を描いてYの字の様な線を乗せればいいのではと考えました。
六角形は0度から始めると頂点が一番上にならないので30度から始めています。
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 30 31 32 33 34 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(丸ニ三ツ菱) /bk { 0 setgray stroke } def % 黒線で描画 /wh { 1 setgray fill } def % 白で塗りつぶし 2 setlinewidth % 線幅2ポイント /sw 0 def % 始点を置くためのスイッチ 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 /r 90 def % 六角形の半径 /step 360 6 div def % 六角形の角度 % 六角形を描く 30 step 360 { % 30度から始めてstep度づつ増分し360度まで{ }内を繰り返す /th exch def % 制御変数をth(角度)に入れる /x r th cos mul def % 円(多角形)の数式 /y r th sin mul def % swが0なら始点を置き、さもなくば線を引く sw 0 eq { x y moveto /sw 1 def } { x y lineto } ifelse } for closepath % 線を繋ぐ wh % 白で塗りつぶし % Y字を描く 30 120 360 { /thx exch def /x r thx cos mul def /y r thx sin mul def 0 0 moveto x y lineto %原点から線を引く } for bk % 黒線で描画 wh 0 0 r 8 add 0 360 arc 14 setlinewidth stroke % 周りの輪の描画 |

例えば中の菱形に別々の色を付けたいという場合には上記のコードでは対応できません。
concatオペレータを使用して四角形を変形させて菱形を作ります。
それを120度回転させればできあがりです。
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 30 31 32 33 34 35 36 37 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:(丸ニ三ツ菱) /bk { 0 setgray } def % 黒 /wh { 1 setgray } def % 白 /red { 1 0 0 setrgbcolor } def % 赤 /yel { 1 1 0 setrgbcolor } def % 黄 /blu { 0 .5 1 setrgbcolor } def % 青 /col 0 def % カラー変更スイッチ /rx 30 cos def % 座標変換値 /ry 30 sin def % 座標変換値 /hishi { % 菱形の定義 /col exch def % カラーを受取る col 1 eq { red } { % 1なら赤 col 2 eq { yel } { % 2なら黄 blu } ifelse } ifelse % それ以外なら青 gsave % グラフィックス状態の保存 [ rx ry rx neg ry 0 1] concat % 座標変換 col 0 0 89 89 rectfill % 設定の色で菱形を描く grestore % グラフィックス状態の復帰 } def 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 % 菱形を三つ描く gsave % 座標変更後の図形に影響を与えない様に保存しておく 3{ % 3回繰り返し /col col 1 add def % カラー変更スイッチに1を足す col hishi % 菱形を呼び出しカラー変更スイッチの値を渡す 120 rotate % 120度回転 } repeat grestore wh % 白 0 0 90 8 add 0 360 arc 14 setlinewidth stroke % 周りの輪の描画 |
【オペレータの説明】
[sx shx shy sy tx ty] concat | 拡大・縮小(sx,sy)、せん断(shx,shy)、回転(sx,sy,shx,shy)、平行移動(tx,ty)、鏡像変換(マイナス値)などの座標変換が1度にできる。 |
コメント