【家紋-7】丸ニ三ツ菱を描いてみよう

菱形が三つ、立方体のようにも見える丸ニ三ツ菱という家紋です。
簡単に描く方法として、六角形を描いてYの字の様な線を乗せればいいのではと考えました。
六角形は0度から始めると頂点が一番上にならないので30度から始めています。

参考:日本の家紋/発行2004年5月1日 初版発行/発行者 安田英樹/発行所 株式会社青幻舎


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度にできる。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次