見出し画像

中学の数学 (9-1) 鱗文様を python で描く

[ サイトマップを見る ]


日本の伝統的なデザイン

日本の伝統的なデザインは美しいです。幾何学図形を繰り返すことで,なんともいえないここちよいデザインが生まれます。

今回は,鱗紋様を Python で描いてみましょう。

鱗紋様

鱗紋様とは正三角形を繰り返したデザインをいいます。

魚や蛇の鱗に見えるので,鱗紋様というらしいです。これを Python で以下のように作ってみました。

鱗紋様

Python のコード

かなり冗長なコードですが,どのように三角形を繰り返し描いているかを説明するために,あえて冗長に書いています。

from PIL import Image, ImageDraw
import math

im = Image.new('RGB', (40*10, math.floor(math.sqrt(3)*40*10)), (256, 256, 256))
draw = ImageDraw.Draw(im)

for i in range(0, 10):
    for j in range(0, 10):

        if i%2 == 0:
            if j%2 == 0:
                draw.polygon(((1*40*j, 0 + math.sqrt(3)*40*i),
                              (1*40*j, math.sqrt(3)*40 + math.sqrt(3)*40*i),
                              (1*40*j+1*40, math.sqrt(3)*40 + math.sqrt(3)*40*i)),
                             fill=(118, 215, 196), outline=(118, 215, 196))
            else:
                draw.polygon(((1*40*j+40, 0 + math.sqrt(3)*40*i),
                              (1*40*j, math.sqrt(3)*40 + math.sqrt(3)*40*i),
                              (1*40*j+1*40, math.sqrt(3)*40 + math.sqrt(3)*40*i)),
                             fill=(118, 215, 196), outline=(118, 215, 196))
        else:
            if j%2 == 0:
                draw.polygon(((1*40*j+40, 0 + math.sqrt(3)*40*i),
                              (1*40*j, math.sqrt(3)*40 + math.sqrt(3)*40*i),
                              (1*40*j+1*40, math.sqrt(3)*40 + math.sqrt(3)*40*i)),
                             fill=(118, 215, 196), outline=(118, 215, 196))
            else:
                draw.polygon(((1*40*j, 0 + math.sqrt(3)*40*i),
                              (1*40*j, math.sqrt(3)*40 + math.sqrt(3)*40*i),
                              (1*40*j+1*40, math.sqrt(3)*40 + math.sqrt(3)*40*i)),
                             fill=(118, 215, 196), outline=(118, 215, 196))

im.show()
im.save('uroko.png')

どうやったら楽に描けるか

鱗紋様の1行目をみると,最初,正三角形の右半分から始まり,正三角形が続き,その後,正三角形の左半分で終わります。

  1. 正三角形の右半分

  2. 正三角形

  3. 正三角形の左半分

3種類の図形を描き分けてもいいですが,もっと簡単にできないか考えます。2 の正三角形は 1 の正三角形の右半分と 3 の左半分をあわせたらできます。でしたら,描く図形は次の2種類でいいことになります。

  1. 正三角形の右半分

  2. 正三角形の左半分

鱗紋様の1行目は 1, 2, 1, 2, 1, 2 の繰り返しで描けます。

2行目は 2, 1, 2, 1, 2, 1 の繰り返しで描けます。

30°,60°,90°の三角形の辺

正三角形を左と右で2つにわけると,図1のとおり三角形 ABCができます。角度 A, B, Cはそれぞれ 30°,60°,90°です。このとき,辺 AB, BC, CA の比は $${\sqrt{3}}$$, 1, 2 になります。

図1. 三角形

点 A を原点としましょう。A(0,0)です。

点 B は原点から y 軸方向に $${\sqrt{3}}$$ さがったところになります。ですから,B $${(0, \sqrt{3})}$$。点C は点B から x 軸で右に 1 進んだところにありますから,C  $${(1, \sqrt{3})}$$。

あとは,for文を使って,三角形を描きはじめる位置を決めていけば,鱗紋様が描けます。

[ サイトマップを見る ]

この記事が気に入ったらサポートをしてみませんか?