菱形が三つ、立方体のようにも見える丸ニ三ツ菱という家紋です。
簡単に描く方法として、六角形を描いて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度にできる。 |
コメント