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

Mandelbrot设置:条纹出现在更深的缩放(>1E14)(Java)

卢志业
2023-03-14

几年前,我和哥哥为Mandelbrot集合编写了一个Java代码。昨天我想用它找到一些很酷的变焦,但当我做了更激烈的变焦时,我开始注意到一个问题(变焦值约为1E14)。看起来像素被分组在一起,有时会产生奇怪的条纹效果。

混乱的曼德布罗特·佐姆

上面是问题的图片(应该是4k)。

以下是一些其他深度较小的缩放链接(它们必须是谷歌链接,因为它们太大了):https://photos.app.goo.gl/c2hUHM7sSmvKxYbQ6https://photos.app.goo.gl/nG2cgjJ7vn7XYf8KAhttps://photos.app.goo.gl/TtpF1Q6hjojHSn747

随着你越来越放大,这个问题会被放大,直到只有一种颜色出现。Mandelbrot系列作品

当我们制作这个程序时,我们试着使用维基百科文章中关于Mandelbrot集的图片中显示的阴影。我们能找到的唯一信息是,这是一个立方体插值着色方案,它给了它一个平滑的过渡外观。我们花了很长时间想弄明白,但最终还是弄明白了。让它变得困难的是,曲线不能超过255的RGB限制,因此曲线也必须是单调的,而且我们唯一能真正找到帮助的是关于这种插值类型的两篇维基百科文章。我们从头开始创建了代码,一旦我们知道了如何调整立方插值,我就致力于获得完美的颜色来使用它。附件是您的姓名。jar和我们的代码(非常混乱,很抱歉是业余爱好者):

代码:https://drive.google.com/file/d/186o_lkvUQ7wux5y-9qu8I4VSC3nV25xw/view?usp=sharing

可执行文件(如果需要):https://drive.google.com/file/d/1Z12XI-wJCJmI9x0_dXfA3pcj5CNay3K-/view?usp=sharing(输入每个值后必须按回车键)

我希望有人能帮我解决这个问题。或者让我知道他们是否也经历过这个问题。

共有1个答案

凌通
2023-03-14

首先,你提供的图像不明显是错误的。Mandelbrot的本质是随着缩放的增加,新的细节会出现。

如果有问题的话,几乎可以肯定的是数值稳定性。双精度有53位。你的代码很难读,所以我不想读。但是如果你正在做一些事情,比如当窗口居中远离原点时,从下窗口减去上窗口边界,比如说(-1,0),但是尺寸很小。。。你提到了~10^-14。然后减法结果丢弃了约10^14的显著性。大约47位。剩下的只有6位,因此计算精度下降到1/64。这不太准确。距离原点越远,差异越小,情况越糟。

考虑一下每个计算机科学家应该知道的关于浮点运算的知识。它将让您以一种新的视角看待代码。直接转换为浮点计算的数学常常会爆炸。本文解释了避免疼痛的基础。

这里有一个不那么吓人的读物。

还有一个注意事项:我确实简单地扫描了您的代码。请检查霍纳法则,以提高精度和速度。

 类似资料:
  • 我开始制作一个mandelbrot集分形查看器。在放大分形时,我遇到了很多问题。如果您尝试缩放,查看器将刚好靠近中心。我已经尽我所能去理解这个困境。我怎样才能放大我的分形,当我放大时,它会放大屏幕的中心,而不是分形的中心?

  • 我有一套mandelbrot电视机,我想放大。“缩放曼德拉”和“缩放曼德拉”是围绕曼德拉坐标计算的。原始的mandelbrot以real=-0.6和im=0.4为中心,real和im的大小均为2。 我希望能够点击图像中的一个点,并计算一个新的点,放大该点 包含它的窗口是800x800px,所以我想这将使右下角的单击等于真实=0.4和im=-0.6的中心,左上角的单击为真实=-1.6和im=1.4

  • 我在Java中编码了一个Mandelbrot集分形,并包含了平移和放大分形的能力。唯一的问题是,当我平移图像并试图放大时,它看起来好像试图放大中心并平移一点。平移和缩放不是真正的平移或缩放,而是对分形的重新计算,看起来像是平移或缩放。 这是我的代码。 我能告诉用户在哪里可以让相机更精确地缩放吗? 先谢谢你。 编辑:图片对于任何想知道这个程序将呈现什么。

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

  • 我一直在做曼德尔布洛特集,并试图缩放,但缩放模式变得非常麻烦。当我缩放它完美地缩放,但图像大小减少到原来的一半。下次我再次缩放时,图片大小会增加,并试图跳过查看窗口。代码是c /opengl.在这里发布之前,我试图让我的代码变得干净一点。 执行时

  • 只要缩放开始后鼠标不移动,我就可以在Mandelbrot集合上指向缩放。我尝试过计算一个标准化的delta(新坐标-旧坐标)*(oldzoom),但结果是图像似乎跳转到一个新位置。我以前见过这个问题。我在这里更加挣扎,因为我必须以某种方式将鼠标位置的增量转换回Mandelbrot集合的-2,2坐标空间。 这是我的密码。重要的是GetZoomPoint方法,然后是定义x0和y0的代码行。此外,我还使