你将如何不断改进曼德布洛特分形



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

更新:我发现这是关于递归细分和计算mandelbrot的:http://www.metabit.org/~rfigura/figura fractal/math.html。也许可以使用kd树来细分图像?

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

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

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

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

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

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

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

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

我认为这个网站并不像你所说的那么聪明。我认为变焦时会发生这样的情况:

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

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

我还没有检查过,但我不认为以不同的方式对待设定点有什么明智的做法——只是因为一个完全在设定点内的正方形在重新绘制之前和之后都是黑色的,所以你看不出有什么区别。

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

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

一个不断改进的Mandelbrot只适合你的眼睛,它永远不会比一个正确计算的每像素算法更早完成,该算法可以检测";岛屿";。

最新更新