【问题标题】:Mandelbrot Set: Stripes Appearing in Deeper Zooms (>1E14) (Java)Mandelbrot 集:在更深的缩放中出现条纹 (>1E14) (Java)
【发布时间】:2020-01-09 03:20:24
【问题描述】:

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

Messed Up Mandelbrot Zoom

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

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

随着您越来越远地放大直到只出现一种颜色,问题就会被放大。 Mandelbrot 集有效

在制作程序时,我们尝试使用 Wikipedia 文章中关于 Mandelbrot 集的图片中显示的阴影。我们能找到的唯一信息是它是一个三次插值着色方案,使它具有平滑的过渡外观。我们花了很长时间试图弄清楚,但最终,我们做到了。让它变得困难的是曲线不能超过 255 的 RGB 限制,因此曲线也必须是单调的,而且我们唯一能真正找到帮助的是两篇关于这种插值的 Wikipedia 文章。我们从头开始创建代码,一旦我们弄清楚如何进行三次插值,我就努力获得完美的颜色来使用它。附件是 .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(输入每个值后必须按回车键)

我希望有人可以帮助我解决问题。或者让我知道他们是否也遇到过这个问题。

【问题讨论】:

    标签: java fractals mandelbrot


    【解决方案1】:

    首先,您提供的图片不明显是错误的。 Mandelbrot 的本质是随着变焦的增加,新的细节会不断涌现。

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

    考虑阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。它将让您以全新的眼光看待您的代码。直接转换为浮点计算的数学经常爆炸。本文解释了避免痛苦的基础。

    不那么吓人的阅读是here

    还有一点:我确实简单地扫描了您的代码。请查看Horner's Rule 以提高精度和速度。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多