目次
Pythonでタートルグラフィックス:うずまき風の図形を描く
今回は、Pythonで「うずまき風図形」を描く処理を実装してみます。
タートルグラフィックスという手法を使います。
亀が歩いていって、到達した場所に点をうち、そこで方向を変えて、また歩いて行って到達した場所に点をうつ。
そんな単純な動きの繰り返しで、図形描くイメージです。
描画プログラムのソースコード
ソースコード全文です。
matplotlibのグラフ機能を使って、グラフィックを描きます。
計算にはNumpyも使っています。
class_graphics.py
import matplotlib.pyplot as plt import numpy as np class VortexCurve(): def __init__(self): self.__tx = [0] self.__ty = [0] self.__title = "うずまき風カーブを描く" def __draw(self, st_len, angle, step): ang = 0.0 lpx = 0.0 lpy = 0.0 leng = st_len x = 0.0 y = 0.0 while(leng > 10.0): x = lpx + leng * np.cos(ang * np.pi / 180.0) y = lpy - leng * np.sin(ang * np.pi / 180.0) self.__tx.append(x) self.__ty.append(y) lpx = x lpy = y ang = ang + angle ang = ang - ang + ang % 360.0 leng = leng - step return self.__tx, self.__ty def draw(self, st_len=200.0, angle=89.0, step=1.0): x, y = self.__draw(st_len, angle, step) plt.plot(x, y) plt.title(self.__title) plt.show()
タートルグラフィックス部分の補足説明
タートルグラフィックスという手法は、冒頭にも書いたように、亀が歩いていって、到達した場所に点をうち、そこで方向を変えて、また歩いて行って点をうつ・・そんな単純な動きの繰り返しで、図形描くイメージです。
だから上記のソースも。
① スタート地点又は歩いて到達した場所の座標(x,y)を求めて点をうつ
x = lpx + leng * np.cos(ang * np.pi / 180.0)
y = lpy - leng * np.sin(ang * np.pi / 180.0)
self.__tx.append(x)
self.__ty.append(y)
② そこをスタート地点にする
lpx = x
lpy = y
③ 指定した角度(angle)分くるっと回る
ang = ang + angle
ang = ang - ang + ang % 360.0
④ 直線を「step」分短くする
leng = leng - step
と読めば、なんとなくやってることはわかると思います。
実行時に変更可能なパラメータの説明
パラメータは3つあります。
st_len | 開始時の長さです。 |
angle | 1回に回転する角度です。 |
step | 一回に減らす直線の長さです。 |
この処理は、指定した「st_len」の長さの直線を、一回につき、「step」分だけ短くしながら、一回につき「angle」分回転することで渦巻を描きます。
そして、直線の長さが10.0より短くなった描き終わりになります。
なのでパラメータを変更していくと、形がかわります。
実行結果
デフォルト設定のままで実行します。
ソースはこんな感じ。
ここから、パラメータを変更していきます。
最初の直線の長さを3倍の「600.0」にしてみます。
すると。
回転する回数が増えますから、台風みたいな濃密な渦になります。
今度は、回転する角度を変えてみます。
すると。
渦巻の形が 八角形ぽくなりました。
他にも、いろいろ数字を変えていくと、予想もしないような図形が急に現れてきます。
単純な動きの反復なのに、予想がなかなか当たらない。
面白いです。
ではでは。