当前位置: 首页 > 知识库问答 >
问题:

您将如何持续改进mandelbrot分形?

万俟华辉
2023-03-14

我见过许多mandelbrot图像生成器绘制mandelbrot的低分辨率分形,然后不断改进分形。这是一个平铺算法吗?以下是一个例子: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/

共有3个答案

司徒正信
2023-03-14

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

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

一个不断改进的Mandelbrot只适合你的眼睛,它永远不会比一个能够检测“孤岛”的正确计算每像素算法更早完成。

刘承悦
2023-03-14

我认为那个网站没有你想象的那么聪明。我想变焦时会发生这样的事情:

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

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

我还没有检查过,但我不认为用不同的方法来处理设定点是聪明的——只是因为一个完全处于设定点的正方形在重新招标之前和之后都是黑色的,所以你看不出有什么不同。

顾昌翰
2023-03-14

分形极限和随机ASCII博客的作者在这里链接了这个问题。

Fractal eXtreme做了几件事来逐渐改善分形图像:

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

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

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

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

要了解这一点,请访问http://www.cygnus-software.com/

 类似资料:
  • 问题内容: 为了测试并发的goroutine,我在函数中添加了一行代码,以使其花费随机的时间返回(最多一秒钟) 但是,当我编译时,出现此错误 。\ crawler.go:49:无效操作:rand.Int31n(1000)* time.Millisecond(int32和time.Duration类型不匹配) 有任何想法吗?如何乘以持续时间? 问题答案: 和是不同的类型。您需要将转换为,例如。

  • 对于复杂变量,我使用以下复杂类文件。 下面的java代码是Mandelbrot集合的迭代计算器示例。 提前谢谢!

  • 问题内容: 我如何返回在MySQL中实际上是“连续的” GROUP BY。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 采用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:

  • 问题内容: 所以,我有一张表,上面有这样的行: 每次扫描警报时(即每次触发或清除警报时)都会添加“已扫描的警报”行。任何警报都会添加带有特定Ev_Custom1的行。第一列Ev_Message包含一个计算机ID,该ID使我可以将警报与其他计算机分开。(您不喜欢任意的列名吗?)超过900条独特的警报消息。 我希望查询返回的内容是这样的: 这将是两个日期之间过滤的查询。我可以更改进入表的数据,但是有9

  • 有很多问题询问如何以另一种方式执行此操作(从这种格式转换),但我找不到有关如何在PHP中以ISO 8601持续时间格式输出的任何内容。 所以我有一堆可读格式的持续时间字符串——我想动态地将它们转换成ISO 8601格式,以打印HTML5微数据的持续时间。下面是一些输入字符串的示例,以及它们应该如何格式化 我可以在PHP中将字符串推入间隔对象: 但似乎没有ISO 8601输出选项 我应该如何处理这个

  • 我在Python中使用PIL模块制作了一个Mandelbrot分形。现在,我想做一个放大到一点的GIF。我在网上看过其他代码,但不用说,我不明白,因为我使用的模式有点不同(我使用的是类)。 我知道要放大我需要改变比例。。。但我显然不知道如何实施它。