天天看點

python列印朱莉娅集合

# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt


# 複素數列の計算回數を出力する関數loopmax
def loopmax(z, c):
    # 複素數列の初項
    z_next = z

    # 最大計算回數
    num = 1000

    # 計算回數まで計算
    for i in range(1, num + 1):
        # 発散しない限り
        if abs(z_next) <= 2:
            # 次の項を計算
            z = z_next
            z_next = z ** 2 + c
        else:
            # 発散したら終了
            break

    # 発散した際の計算回數を返す
    return i


# 複素平面上のloopmaxの結果を配列で出力する関數calc_n
def calc_n(x_min, x_max, y_min, y_max, a, b, num):
    # 実數軸の座標を等間隔でx_minからx_maxまで定義
    x_array = np.linspace(x_min, x_max, num)

    # 虛數軸の座標を等間隔でy_minからy_maxまで定義
    y_array = np.linspace(y_min, y_max, num)

    # 複素平面の定義(複素數なのでdtype=np.complex)
    z_array = np.zeros((num, num), dtype=np.complex)

    # 各座標でのnを格納する配列
    n_array = np.zeros((num, num))

    # a, bから定數の複素數cを定義
    c = a + b * 1j

    # 複素平面座標とその座標における計算回數の格納
    for i in range(0, num):
        for j in range(0, num):
            # 複素平面座標
            z_array[j, i] = x_array[i] + y_array[j] * 1j

            # 計算回數の配列
            n_array[j, i] = loopmax(z_array[j, i], c)

    # 計算回數を格納した配列を出力
    return n_array


# ジュリア集合を描く関數show_patterns
def show_patterns(U, ax=None):
    ax.imshow(U, cmap=plt.cm.hot,
              interpolation='bilinear')
    ax.set_axis_off()


# メイン関數
if __name__ == "__main__":
    # プロットする區間を選択
    x_min = -1.5
    x_max = 1.5
    y_min = -1.5
    y_max = 1.5

    # 定數項のパラメータ
    a = 0.285
    b = 0.01

    # 複素平面上に定義する各軸の座標の個數
    num = 500

    # 計算回數の配列を上記のパラメータから出力
    n_array = calc_n(x_min, x_max, y_min, y_max, a, b, num)

    # プロット
    fig, ax = plt.subplots(1, 1, figsize=(8, 8))
    show_patterns(n_array, ax=ax)

    # 畫像の儲存
    plt.savefig('Julia.png', dpi=1500)
           

轉載于:https://www.cnblogs.com/c-x-a/p/10341981.html