目次
Pythonでグラフィックス:計算で花びらを描く(花びら曲線)
Pythonで「花びら曲線」を実装してみました。
計算で花びらが描ける、とても面白い関数です。
花びらを描くのに使う計算式は以下です。
上記の計算式でもとめた「r」を使ってX座標とY座標を以下のように計算します。
これをプログラムにあてはめると、花びらが描けます。
クラスのソースコードです
花びら関数の実装クラスです。
matplotlibのグラフ機能を使って、グラフィックを描きます。
計算にはNumpyとrandomを使ってます。
class_graphics.py
from matplotlib import pyplot as plt import numpy as np import random class FlowerCurve(): def __init__(self): self.__tx = [] self.__ty = [] self.__title = "花びら関数で花びらを描く" def __draw(self, a, b, n, k1, k2): k = 0 if(int(b % 2.0) == 0): k = 1 else: k = 2 for ang in np.arange(0.0, 180.0 * k * b + 1.0, 1.0): s = ang * (np.pi / 180.0) r = ((1.0 - k1) + k1 * np.fabs(np.sin(a / b * s))) * \ ((1.0 - k2) + k2 * np.fabs(np.sin(n * a / b * s))) self.__tx.append(100.0 * r * np.cos(s)) self.__ty.append((100.0 * r * np.sin(s)) * -1.0) return self.__tx, self.__ty def draw(self, a=5.0, b=2.0, n=2.0, k1=0.7, k2=0.3): x, y = self.__draw(a, b, n, k1, k2) plt.plot(x, y) plt.title(self.__title) plt.show()
ソースの補足説明は特にありません。
計算式をほぼそのまま実装しているだけです
実行時に指定可能なパラメータの説明
実行時に指定可能なパラメータは5つです。
パラメータに対するエラーチェックはさぼってます(笑)。
a | 花びらの枚数の基本数です。3.0以上で適当に。 |
b | 基本、2.0固定です。1.0にすると「2×a」が花びらの枚数となります。bが3.0以上になると、どんどん予測できない形になっていきます。 |
n | 1枚の花びらのなかにある突起の数です。1.0以上で適当に。 |
k1 | 花びらと花びらの間の切れ込みの深さです。値が大きいと、切れ込みが深くなりますが、0.1~0.9の範囲でないとどうなるかわかりません。 |
k2 | 花びら1枚の中での突起と突起の間の切れ込みの深さです。値が大きいと切れ込みが深くなります。0.1~0.9の範囲でないとどうなるかわかりません。 |
これらのパラメータの値を変更していくと、花びらの形が変化します。
実行結果
デフォルトで実行します。
from class_graphics import FlowerCurve
FlowerCurve().draw()
そうするとこんな花びらになります。
花びらの数を30枚にしてみます。
FlowerCurve().draw(a=30)
するとこうなります。
こんな感じでパラメータを変化させながら、どんな花びらになるかを試してみると面白いと思います。
ではでは。