3

我见过许多 mandelbrot 图像生成器绘制 mandelbrot 的低分辨率分形,然后不断改进分形。这是平铺算法吗?这是一个例子: http: //neave.com/fractal/

更新:我发现这个关于递归细分和计算曼德布洛特:http ://www.metabit.org/~rfigura/figura-fractal/math.html 。也许可以使用 kd-tree 来细分图像?

更新 2:http ://randomascii.wordpress.com/2011/08/13/faster-fractals-through-algebra/ 更新 3:http ://www.fractalforums.com/programming/mandelbrot-exterior-optimization/15/

4

3 回答 3

6

Fractal eXtreme 的作者和此处问题中链接的 randomascii 博客文章。

Fractal eXtreme 做了一些事情来提供逐渐改善的分形图像:

  1. 从中间开始,而不是从顶部开始。这是许多早期分形程序忽略的微不足道的变化。中心应该是用户最关心的区域。这可以从中心线开始,也可以螺旋形向外。螺旋出有更多的开销,所以我只在计算密集的图像上使用它。
  2. 使用 8x8 块进行初始低分辨率传递(计算 64 个像素中的一个)。这给出了一个粗略的初始视图,该视图逐渐以 4x4、2x2 和 1x1 分辨率进行细化。请注意,每次传递的像素数是之前所有传递的三倍——不要重新计算原始点。随后的传球也从中心开始,因为那更重要。
  3. 多遍方法很适合猜测。如果两行中的四个像素具有相同的值,那么中间的像素可能具有相同的值,所以不要计算它们。这在某些图像上非常有效。最后进行清理以查找计算错误的像素是必要的,并且通常会发现一些错误,但在清理通过后我从未见过可见的错误,这可以提供 10 倍以上的加速。可以禁用此功能。此功能的成功(猜测百分比)可以在状态窗口中查看。
  4. 放大时(双击放大倍率)可以将之前计算的像素作为起点,这样只有四分之三的像素需要计算。当所需的精度增加但这些不连续性很少见时,这不起作用。

更复杂的算法绝对是可能的。例如,曲线跟随。

快速数学也有帮助。FX 中的高精度例程是使用 64 位乘法的完全展开的汇编语言(由 C# 代码生成)。

FX 还对两个最大灯泡内的点进行了几次检查,以避免计算它们。它还监视计算中的周期——如果出现完全相同的点,则计算将重复。

要查看此操作,请访问http://www.cygnus-software.com/

于 2015-03-12T00:09:38.857 回答
3

老式的 Mandelbrot 渲染算法是从左上角开始计算像素,向右移动直到到达屏幕末尾,然后移动到下一行的开头,就像普通的打字机(视觉上)。

链接算法只是以不同的顺序计算像素,当它计算一个时,它会快速假设某些相邻像素,然后再返回以正确重绘它们。那是当您看到改进时,将其视为显示渐进式 JPEG。如果您放大该集合,某些像素值将保持不变(它们不需要重新计算),中间像素将被猜测、快速绘制并稍后重新计算。

不断改进的 Mandelbrot 只是为了您的眼睛,它永远不会比可以检测“岛屿”的正确计算的每像素算法更早完成。

于 2012-12-03T23:47:19.637 回答
3

我认为该网站并不像您认为的那样聪明。我认为缩放时发生的事情是这样的:

  • 取上一张图像,使用标准插值方法将其放大。这为您提供了“模糊”放大的图像。单击放大按钮几次以查看最佳效果
  • 然后,在从中心点开始的同心圆中,为新的缩放级别以全分辨率重新计算图像的正方形。这会从中心向外逐渐“锐化”图像。因为您可能正在查看中心,所以您会立即看到改进。

您可以通过放大远距离更清楚地看到它在做什么,然后沿对角线方向拖动图像,这样几乎所有的屏幕都未绘制。当您释放拖动时,您将看到图像逐渐呈现为正方形,从新中心开始呈同心圆。

我还没有检查过,但我认为以不同的方式处理嵌入点并没有什么聪明的地方——只是因为完全嵌入的正方形在重新渲染之前和之后都是黑色的,所以你看不到不同之处。

于 2012-12-04T09:30:34.847 回答