TheBird

julia.py

1.2 kB · python · 42 lines

1import mrlypy.two as m22from mrlypy.core.colors import blue, gradient, green, red3import numpy as np4from config import DATA_DIR, IMAGE_SIZE56# 1000X1000 PIXELS7# 1000X1000 PIXELS8RESOLUTION = (100, 100)9SCALE = 1010MAX_ITER = 10011C_COMPLEX = -0.4 + 0.6j1213def julia_set(width, height, c, max_iter=100, x_min=-1.5, x_max=1.5, y_min=-1.5, y_max=1.5):14    x = np.linspace(x_min, x_max, width)15    y = np.linspace(y_min, y_max, height)16    X, Y = np.meshgrid(x, y)17    Z = X + 1j * Y18    div_time = np.zeros(Z.shape, dtype=np.int16)19    for i in range(max_iter):20        mask = np.abs(Z) <= 221        Z[mask] = Z[mask] * Z[mask] + c22        div_time[mask] = i23    return div_time2425def main():26    width, height = RESOLUTION27    grid = julia_set(width, height, C_COMPLEX, MAX_ITER)28    cell = m2.Cell2d.from_array(grid)29    start = red30    mid = green31    end = blue32    colors = gradient([start, mid, end], MAX_ITER)33    palette = np.array([c.to_rgba() for c in colors], dtype=np.uint8)34    grid_clipped = np.clip(grid, 0, MAX_ITER - 1)35    cell.colors = palette[grid_clipped]36    fp = f"{DATA_DIR}/julia.png"37    image = cell.to_image(scale=SCALE)38    image.save(fp)39    print(f"Saved: {fp}")4041if __name__ == "__main__":42    main()