【家紋-11】平稲妻を描いてみよう

平稲妻という家紋で、稲妻をこんな形にデザインするとは驚きです。
真ん中の短い横線を1単位とすると直線の長さが規則的になっています。(下図)1、1、2、2、3、3….
この1単位に任意の大きさ(w)を掛けて適度な大きさにします。

参考:日本の家紋/発行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
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:家紋を描く(平稲妻)

/w 30 def % 全体の大きさを制御
/r { % 相対的長さで線を引くプロシージャ
    % ★から渡される値は順番が逆になることに注意
    /dy exch w mul def % y軸方向の長さをw倍する
    /dx exch w mul def % x軸方向の長さをw倍する
    dx dy rlineto  % 相対的長さで線を引く
} def
 
0 0 240 240 rectfill % 黒背景
120 120 translate % 座標の原点を中央に移動

newpath % パスの初期化
1 setgray % 白色
% バックの四角形
-3 w mul -3 w mul w 6 mul w 6 mul rectfill
0 0 moveto % (0,0)に始点を置く
-1 0 r % ★ 線を引く(-1はdxに、0はdyに引き渡される)
0 1 r
2 0 r
0 -2 r
-3 0 r
0 3 r
4 0 r
0 -4 r
-5 0 r
0 setgray % 黒色
2 setlinewidth % 線幅2ポイント
stroke % 線の描画

同じ家紋を今度は配列を使って描いています。
考え方は上のプログラムと同じで、直線の長さを配列に入れているだけです。
図形は上と同じなので省略します。


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:家紋を描く(三ツ稲妻菱)

% 配列を使用する
/inazuma [ [-1 0] [0 1] [2 0] [0 -2] [-3 0]
           [0 3] [4 0] [0 -4] [-5 0] ] def

/w 30 def % 全体の大きさを制御
 
0 0 240 240 rectfill % 黒背景
120 120 translate % 座標の原点を中央に移動
/cmtx matrix currentmatrix def % カレント座標を保存する
newpath % パスの初期化
1 setgray % 白色
% バックの四角形
-3 w mul -3 w mul w 6 mul w 6 mul rectfill
0 0 moveto % (0,0)に始点を置く
w dup scale % 座標を30倍に拡大
0 1 8 {
    /index exch def % 制御変数をindexに入れる
    % 配列(inazuma)から順に(index)座標を取り出し(get)、スタックに置き(aload)、
    % オペランドは削除(pop)して直線を引く(rlineto)
    inazuma index get aload pop rlineto
} for
cmtx setmatrix % 座標を拡大前の座標に復元
0 setgray % 黒色
2 setlinewidth % 線幅2ポイント
stroke % 線の描画

平稲妻を三つ組み合わせて「三ツ稲妻菱」を描きます。平稲妻を座標変換して菱形にします。


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
38
39
40
41
42
43
44
45
46
47
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 240 240
%%Title:家紋を描く(三ツ稲妻菱)

/w 15 def % 全体の大きさを制御
/r { % 相対的長さで線を引くプロシージャ
    % ★から渡される値は順番が逆になることに注意
    /dy exch w mul def % y軸方向の長さをw倍する
    /dx exch w mul def % x軸方向の長さをw倍する
    dx dy rlineto  % 相対的長さで線を引く
} def
 
/inazuma {
    newpath % パスの初期化
    1 setgray % 白色
    % バックの四角形
   -3 w mul -3 w mul w 6 mul w 6 mul rectfill
    0 0 moveto % (0,0)に始点を置く
  -1 0 r % ★ 線を引く(-1はdxに、0はdyに引き渡される)
    0 1 r   2 0 r
    0 -2 r   -3 0 r
    0 3 r   4 0 r
    0 -4 r   -5 0 r
    0 setgray % 黒色
    2 setlinewidth % 線幅2ポイント
    stroke % 線の描画
} def
% 図形を菱形にするための座標変換の数値
/sx { 30 cos } def
/sy { 30 sin } def
/sx2 { -30 cos } def
/sy2 { -30 sin } def
0 0 240 240 rectfill % 黒背景
120 120 translate % 座標の原点を中央に移動

% 菱形を描く
gsave % グラフィックス状態の保存
[ 270 cos 270 sin sx sy   41 -20 ] concat % 座標変換
inazuma % 右側面
grestore % グラフィックス状態の復帰
gsave
[ sx neg sy2 neg  0 -1 -41 -20 ] concat
inazuma % 左側面
grestore
gsave
[ sx sy sx neg sy2 neg 0 50 ] concat
inazuma % 天面

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

コメント

コメントする

CAPTCHA


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

目次