Fractal Sample Generator - CFASample

IFS-based classic fractal pattern generation

Application Scenarios

Usage Examples

Generate Classic Fractals

import numpy as np, matplotlib.pyplot as plt from FreeAeonFractal.FASample import CFASample from FreeAeonFractal.FAVisual import CFAVisual points_1d = CFASample.get_Cantor_Set(iterations=256) # dim ≈ 0.63 points_2d = CFASample.get_Sierpinski_Triangle(iterations=1024) # dim ≈ 1.58 points_fern = CFASample.get_Barnsley_Fern(iterations=4096) # dim ≈ 1.67 points_3d = CFASample.get_Menger_Sponge(iterations=10240) # dim ≈ 2.73 fig = plt.figure(figsize=(14, 4)) ax1 = fig.add_subplot(141); CFAVisual.plot_1d_points(points_1d, ax1); ax1.set_title("Cantor Set") ax2 = fig.add_subplot(142); CFAVisual.plot_2d_points(points_2d, ax2); ax2.set_title("Sierpinski") ax3 = fig.add_subplot(143); CFAVisual.plot_2d_points(points_fern, ax3); ax3.set_title("Barnsley Fern") ax4 = fig.add_subplot(144, projection='3d'); CFAVisual.plot_3d_points(points_3d, ax4); ax4.set_title("Menger Sponge") plt.tight_layout(); plt.show()

Convert Points to Image and Analyze

points = CFASample.get_Sierpinski_Triangle(iterations=4096) image = CFASample.get_image_from_points(points, img_size=(512, 512)) from FreeAeonFractal.FAImageFD import CFAImageFD fd_bc = CFAImageFD(image).get_bc_fd() print("Sierpinski FD (BC):", fd_bc['fd']) # expected ≈ 1.58

Class Description

CFASample

IFS fractal generator. Uses randomized iterated affine transformations (chaos game algorithm).

generate(init_point, iterations, trans_matrix, trans_probability) [static]

Core IFS engine. Returns (iterations, ndim) point array.

get_Cantor_Set(init_point, iterations=256) [static]

1D Cantor Set. Dimension ≈ 0.6309 (log 2 / log 3)

get_Sierpinski_Triangle(init_point, iterations=256) [static]

2D Sierpinski Triangle. Dimension ≈ 1.585 (log 3 / log 2)

get_Barnsley_Fern(init_point, iterations=4096)

2D Barnsley Fern. Dimension ≈ 1.67

get_Menger_Sponge(init_point, iterations=10240) [static]

3D Menger Sponge using 20 contraction maps. Dimension ≈ 2.727 (log 20 / log 3)

get_image_from_points(points, img_size=(512,512), margin=0.05) [static]

Convert 2D IFS point cloud to binary uint8 image (occupied pixels = 255).

Fractal Dimensions Reference

FractalDimensionMethod
Cantor Set≈ 0.631D box-counting
Sierpinski Triangle≈ 1.582D box-counting
Barnsley Fern≈ 1.672D box-counting
Menger Sponge≈ 2.733D box-counting

Important Notes

  1. Iterations: More = denser approximation; 1000+ recommended for analysis
  2. Image Size: 256×256 or larger gives reliable scale ranges for FD analysis
  3. IFS Convergence: Converges regardless of start point; discard first few hundred if needed