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

如何使用python为mandelbrot集正确配置着色?

陶鸿畴
2023-03-14

为了获得python方面的培训,我决定使用脚本绘制mandelbrot集。绘制它并不太复杂,所以我决定使用颜色,我发现了平滑着色算法。使用这个问题,我能够渲染出一些非常漂亮的东西,类似于这个。

为了实现这一点,我使用三个“步骤”设置了渐变调色板:从深蓝色到浅蓝色,然后从浅蓝色到黄色,最后从黄色到深棕色。整体形象完美。

当我试图太放大时,问题就来了。让我们以这个区域为例。当我处于这种缩放水平时,我的脚本不再绘制深蓝色。我想我弄错了什么,因为无论你在维基百科的图片上看到深蓝色,我都有深棕色(所以我调色板的末尾有一种颜色)。当我第一次想到这一点时,我告诉自己如果图案回到原来的样子,那么它应该使用相同的颜色,因为转义时间应该是相同的。

那么,这个颜色是在调色板中配置的,还是关于逃跑时间我不明白?

以下是我用于着色的代码:

def color_pixel(n, z):
    smoothcolor = n + 1 - math.log(math.log(abs(z)))/math.log(2)
    f = smoothcolor/iterate_max
    i = int(f*500)
    color = palette[i]
    return color

500是我的调色板中的颜色数(len(调色板)-1)。

z当它逃逸超过10时的值。

我使用100作为最大迭代次数,但相同的结果具有更高的值。

谢谢

共有2个答案

凤高澹
2023-03-14

我现在也在研究这个(着色方案)。由于图像是使用Ultra Fractal 3制作的,我查看了该程序并四处搜索,最终找到了细节,这与您和wiki所做的略有不同。它是用一些自定义脚本语言编写的,但希望您能够理解它在做什么。代码如下:

Smooth(OUTSIDE) {
;
; This coloring method provides smooth iteration
; colors for Mandelbrot and other z^2 formula types
; (Phoenix, Julia).  Results on other types may be
; unpredictable, but might be interesting.
;
; Thanks to F. Slijkerman for some tweaks.
; Thanks to Linas Vepstas for the math.
;
; Written by Damien M. Jones
;
init:
  complex il = 1/log(@power)        ; Inverse log (power).
  float lp = log(log(@bailout))     ; log(log bailout).

final:
  #index = 0.05 * real(#numiter + il*lp - il*log(log(cabs(#z))))

default:
  title = "Smooth (Mandelbrot)"
  helpfile = "Uf*.chm"
  helptopic = "Html/coloring/standard/smooth.html"
$IFDEF VER50
  rating = recommended
$ENDIF

  param power
    caption = "Exponent"
    default = (2,0)
    hint = "This should be set to match the exponent of the \
            formula you are using. For Mandelbrot, this is usually 2."
  endparam
  param bailout
    caption = "Bail-out value"
    default = 128.0
    min = 1
    hint = "This should be set to match the bail-out value in \
            the Formula tab. This formula works best with bail-out \
            values higher than 100."
  endparam
}

我的数学不够好,不知道如何计算一个复数的对数,所以我现在只能继续使用它,但我想我会分享我在这个主题上的发现。

慕容恩
2023-03-14

我的着色方法是在三个部分使用旋转数组。第一个蓝十字会在不使用红色的情况下淡入绿色,然后在不使用蓝色的情况下从绿色变为红色,最后在不使用绿色的情况下从红色变为(几乎)蓝色,其中下一个迭代级别将使用迭代的模数在数组底部换回纯蓝色。

然而,当我进行了一次据说是平滑的实时缩放(通过以双倍比例存储数据,然后通过插值在16帧之间播放)时,我发现在M集的附近,轮廓看起来很混乱,效果很混乱,因为颜色往往会四处舞动。在那里,我使用了不同的方案,将颜色弯曲成灰度。

我最后的着色方法是对具有一个或多个相同深度邻居的像素使用旋转调色板,但根据邻居的不同而趋向于中灰色。但是请记住,对运动图像的要求不同于静态图像,清晰的细节不一定是可取的。

在深度缩放时,提取细节所需的迭代次数可以是1000或更多。我从侧面解决了这个问题。我不会强行计算地图。我开发了一种曲线拼接方法,它遵循迭代级别的轮廓,然后填充区域。在平稳变化的区域中,这意味着不必迭代较大的区域。同样地,我也会尽可能地避免边的填充,然后再次尝试避免边的填充。这种方法可能会受到一些细节的影响,但速度增益是巨大的。在M集边缘附近的混沌区域,我的方法是在每个像素处迭代。

 类似资料:
  • 我试图放大我的mandelbrot集,我读到了这个问题:如何简单地放大mandelbrot集,但我很难理解它,它不起作用。当我这样计算新的实数和复数时: 新的mandelbrot在两个轴上都有点变形?怎么了?以下是一个例子:http://www.phpdevpad.de/index.php?id=190.

  • 我制作了一个程序来计算mandelbrot集合中的点。对于不属于mandelbrot集的点,我会记录起点发散到震级大于2的地方所需的迭代次数。基本上,对于mandelbrot集合之外的每一点,我都有一个计数器,可以显示它在1到256的范围内发散的速度。我想做的是根据每个点发散的速度给它一个颜色。例如,在255次迭代中发散的点可能是白色的,发散越快,着色越多。我已经做了一个简单的调整,在20步以上的

  • 问题内容: 我在python 2.7中有一些代码,我想将它们全部转换成python 3.3代码。我知道可以使用2to3,但是我不确定如何使用它。 问题答案: 安装以下模块,该模块将2to3命令直接添加到entry_points。 正如在2to3 docs 上所写,要将整个项目从一个目录树转换到另一个目录树,请使用:

  • 我正在用Java Swing制作一个游戏,其中有一个大POJO用来存储游戏的运行时数据,比如精灵的位置、当前显示的效果等等。我希望能够将其作为JSON保存到一个文件中,然后在以后重新构建。我发现Gson应该就是这么做的,但到目前为止我还没能让它工作。我总是遇到这样一个问题:它无法使嵌套在存储类中的某些变量可访问。 以下是我目前使用Gson的方式: 以下是我当前尝试使用时收到的错误消息: 是我在开头

  • 我用python编程了Mandelbrot集,但看起来很奇怪,所以我搜索平滑的颜色。我用对数和线性插值编程了一个平滑的着色函数,但是无论我尝试什么,我都得不到我想要的: 这是我的调色板 这里是我的着色功能 这是我得到的 正如你所看到的那样,平滑的颜色是没有连续性的 我想要这样的东西: 理想结果 我们看不到色差

  • 我试图写一个代码来显示我的终端上(-3,-3)到(2,2)之间的数字的Mandelbrot集。主函数生成 守则: 分析函数接受虚平面上的坐标;并计算(Z^2)Z 50次;计算时,如果复数爆炸,则函数立即返回,否则函数在完成50次迭代后返回; 所以,我在分析60000(NX*NY)个数字 因此,输出出现反转,我浏览了 关于许多mandelbrot代码,但我无法理解这一行如何纠正我的输出。 我想我在将