使用示例
生成经典分形
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.63 | 1D盒计数 |
| 谢尔宾斯基三角形 | ≈ 1.58 | 2D盒计数 |
| 巴恩斯利蕨 | ≈ 1.67 | 2D盒计数 |
| 门格海绵 | ≈ 2.73 | 3D盒计数 |
重要说明
- 迭代次数越多,分形近似越密集;分析时推荐1000+次
- 分形维度分析时,256×256或更大图像能提供更可靠的尺度范围
- IFS混沌游戏无论起始点如何都会收敛