刺し子模様をPythonで描く:檜垣・網代・菱卍
今回取り上げたのは,いずれも竹で編んだような模様だ。前回の二重籠目もそうだった。
檜垣
単純な形ながら模様としてなかなかいい。
基本パターンは簡単にとれるだろう。(省略)
網代
竹を2本ずつ直交させながら編んだ形。檜垣はすきまなく編み込まれているが,こちらは隙間がある。
これも基本パターンは簡単にとれるだろう。たとえば
線が6本なので,点の数は12。
# 基本パターンをorgを原点として描く
def basicpattern(org):
p1 = [2, 2]
p2 = [-2, 6]
p3 = [1, 1]
p4 = [-3, 5]
p5 = [0, 0]
p6 = [-4, 4]
p7 = [-1, -1]
p8 = [3, 3]
p9 = [0, -2]
p10 = [4, 2]
p11 = [1, -3]
p12 = [5, 1]
draw(org, [p1, p2])
draw(org, [p3, p4])
draw(org, [p5, p6])
draw(org, [p7, p8])
draw(org, [p9, p10])
draw(org, [p11, p12])
周囲をぐるりと閉曲線にすれば色塗りができる。
fillpoly(org, [p1, p2, p6, p5, p7, p11, p12, p8, p1])
菱卍
分類としては「菱」になるが,編んだような模様なので一緒に考えた。
これは基本パターンを探し出すのにちょっと時間がかかりそう。二重籠目のときと同様,ひし形に着目するか,網の方に着目するか。
ひし形に着目して次のようにとってみよう。
斜眼で座標を拾う。点の番号は適当に。たとえば次のように。
# 基本パターンをorgを原点として描く
def basicpattern(org):
p1 = [0, 2]
p2 = [-4, 2]
p3 = [0, -2]
p4 = [2, -1]
p5 = [-1, 2]
p6 = [0, 1]
p7 = [-3, 1]
p8 = [-2, 1]
p9 = [1, -2]
p10 = [0, -1]
p11 = [3, -1]
draw(org, syagan(2, [p1, p2, p3]))
draw(org, syagan(2, [p4, p5]))
draw(org, syagan(2, [p6, p7]))
draw(org, syagan(2, [p8, p9]))
draw(org, syagan(2, [p10, p11]))
平行移動量は次の通り。
Shiftx = np.array([2*np.sqrt(3), 2])
Shifty = np.array([0, 4])
今度は網のほうに着目しよう。すると二重籠目のときと同様,色塗りができそうだ。
クロスしているところを原点にとって,たとえば次のように13個の点を取る。
# 基本パターンをorgを原点として描く
def basicpattern(org):
p0 = [0, 0]
p1 = [1, 0]
p2 = [-2, 3]
p3 = [-3, 3]
p4 = [-1, 1]
p5 = [-4, 1]
p6 = [-3, 0]
p7 = [-1, 0]
p8 = [2, -3]
p9 = [3, -3]
p10 = [1, -1]
p11 = [4, -1]
p12 = [3, 0]
draw(org, syagan(2, [p1, p2]))
draw(org, syagan(2, [p0, p3]))
draw(org, syagan(2, [p4, p5]))
draw(org, syagan(2, [p0, p6]))
draw(org, syagan(2, [p7, p8]))
draw(org, syagan(2, [p0, p9]))
draw(org, syagan(2, [p10, p11]))
draw(org, syagan(2, [p0, p12]))
平行移動量は先ほどと同じでよい。
色塗りをしてみよう。閉曲線を作ればよいが,これは一筆で書ける。
fillpoly(org,syagan(2, [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12]))
色は次のようにしてみた。
Drawcolor = '#668844'
Fillcolor = '#AAEE80'