分形样本生成 - CFASample

基于IFS的经典分形图案生成器

使用示例

生成经典分形

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) # 维度 ≈ 0.63 points_2d = CFASample.get_Sierpinski_Triangle(iterations=1024) # 维度 ≈ 1.58 points_fern = CFASample.get_Barnsley_Fern(iterations=4096) # 维度 ≈ 1.67 points_3d = CFASample.get_Menger_Sponge(iterations=10240) # 维度 ≈ 2.73 fig = plt.figure(figsize=(14, 4)) ax1 = fig.add_subplot(141); CFAVisual.plot_1d_points(points_1d, ax1); ax1.set_title("康托集") ax2 = fig.add_subplot(142); CFAVisual.plot_2d_points(points_2d, ax2); ax2.set_title("谢尔宾斯基") ax3 = fig.add_subplot(143); CFAVisual.plot_2d_points(points_fern, ax3); ax3.set_title("巴恩斯利蕨") ax4 = fig.add_subplot(144, projection='3d'); CFAVisual.plot_3d_points(points_3d, ax4); ax4.set_title("门格海绵") plt.tight_layout(); plt.show()

点集转图像并分析

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("谢尔宾斯基FD (BC):", fd_bc['fd']) # 期望约为1.58

类说明

generate(init_point, iterations, trans_matrix, trans_probability) [静态]

核心IFS引擎。返回 (iterations, ndim) 点数组。trans_matrix:形状 (n_transforms, ndim, ndim+1) 仿射矩阵。

get_Cantor_Set(iterations=256) [静态]

1D康托集。理论维度 ≈ 0.6309 (log 2 / log 3)

get_Sierpinski_Triangle(iterations=256) [静态]

2D谢尔宾斯基三角形。理论维度 ≈ 1.585 (log 3 / log 2)

get_Barnsley_Fern(iterations=4096)

2D巴恩斯利蕨。理论维度 ≈ 1.67

get_Menger_Sponge(iterations=10240) [静态]

3D门格海绵(20个压缩映射)。理论维度 ≈ 2.727 (log 20 / log 3)

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

将2D IFS点云转换为二值uint8图像(已占用像素值为255)。

分形维度参考

分形维度方法
康托集≈ 0.631D盒计数
谢尔宾斯基三角形≈ 1.582D盒计数
巴恩斯利蕨≈ 1.672D盒计数
门格海绵≈ 2.733D盒计数

重要说明

  1. 迭代次数越多,分形近似越密集;分析时推荐1000+次
  2. 分形维度分析时,256×256或更大图像能提供更可靠的尺度范围
  3. IFS混沌游戏无论起始点如何都会收敛