はじめに
マンデルブロ集合は複素数の簡単な計算で生成される図形です。
フラクタル図形のひとつであり、いくら拡大しても複雑な図形が出現するような不思議な幾何図形です。
Python でマンデルブロ集合を描画して、これを png として画像出力します。
マンデルブロ集合を PNG 出力
動作環境
- Windows 11
- WSL Ubuntu 20.04
- Python 3.8.10
WSL ディストリビューションの複製
お試しで実行する場合は Ubuntu イメージを複製しておくのがお勧めです。
本手順は必須ではありません。
事前準備
初めに、Ubuntu パッケージを最新化しておきます。
$ sudo apt update
$ sudo apt upgrade
python パッケージをインストールするための pip をインストールします。
$ sudo apt install python3-pip
次に、画像ファイルを扱うために Pillow のパッケージをインストールします。
$ pip install Pillow
マンデルブロ集合の描画
Pillow を利用して、マンデルブロ集合を描画した png ファイルを出力します。
import PIL.Image
def is_mandelbrot(c):
z = 0
for i in range(200):
z = z * z + c
if abs(z) > 4:
return False
return True
def run():
width = 1024
height = 768
pitch = 2.5 / height
image = PIL.Image.new("L", (width, height))
for w in range(width):
for h in range(height):
re = pitch * w - 2.5
im = pitch * h - 1.25
c = complex(re, im)
pixel = 0 if is_mandelbrot(c) else 255
image.putpixel((w, h), pixel)
image.save("mandelbrot.png")
if __name__ == "__main__":
run()
is_mandelbrot
メソッドでは、ある複素数 c
がマンデルブロ集合に属するかどうかを判定しています。
c = -2 の点がマンデルブロ集合に属するため、閾値はここから少し余裕をもって 4 としています。
マンデルブロ集合に属する点を黒色とするように描画しています。
横軸は -2.5 ~ 0.833、縦軸は -1.25 ~ 1.25 の範囲を指定しています。
$ python3 main.py
実行すると png ファイルが出力されます。
なお、Windows エクスプローラのアドレスバーに \\wsl$
と入力することで、WSL のディスク領域にアクセスすることができます。
