中文 | English
这是一个生成朱利亚集合 (Julia Set)分形图像的 Xcode Playground 工程。
朱利亚集合是分形理论中的经典概念,它通过一个极为简单的公式来生成令人惊叹的分形图像:
z(n+1) = z(n)^2 + c
# 其中 z 是复数
你可以使用 Xcode 13 来打开 JuliaSet.playground
,并在窗口右侧拾取和查看渲染的图像结果。Playground 里面包含了所有的源代码。
另外,你也许知道除了朱利亚集合以外的其他种类的分形,例如曼德博集合。只要对代码进行简单的修改,就可以绘制它了。你可以自己试试。
我有一个独立应用作品“分形的奥秘”,它可以实时动态生成分形图像(是基于 Metal 实现的)。分形的奥秘是一个付费应用,支持 iOS / iPadOS / macOS,欢迎大家来体验:App Store 连接。
另外,我还曾经和江苏卫视 最强大脑 节目组合作,共同打造了一期以分形数学为主题的挑战题目。节目现场使用了这个项目中的代码来生成题目。这期节目可以在爱奇艺网站观看:最强大脑第4季2017-02-10。
江苏卫视「最强大脑」第四季,第 2017-2-10 期节目
你可以指定公式参数,并观察它们如何影响分形图像:
let imageSize = CGSize(width: 600, height: 440)
var julia = JuliaSet()
julia.window = 4.0
julia.const = Complex(-0.5, 0.0)
julia.color = JuliaSetColor(
hue: 0,
brightness: 0.87,
saturation: 0.9
)
let outputImage = JuliaSetRenderer.syncRender(julia, pixelSize: imageSize)
你也可以从分形的奥秘应用中导出某个特定的分形图,然后将它的代号放在 Playground 中绘制:
var code = "juliaset://?code=25477FFF7FFF7FEB5A4400FE" // 从“分形的奥秘”中导出的一个分形
let outputImage = JuliaSetRenderer.syncRender(JuliaSet.decodeURL(code)!, pixelSize: imageSize)
渲染接口支持异步执行。
// 在后台渲染...
JuliaSetRenderer.asyncRender(julia, sizeInPixel: imageSize) { outputImage in
// ...然后在主线程中获取结果
}
- 康威生命游戏: conways-game-of-life
- 二维图像 FFT: fft2d-swift-playground
- 傅里叶级数展开: swift-fourier-expansion
- 复数(虚数)运算: swift-complex-number
- 邮件: gong@me.com