gpt4 book ai didi

java - 曼德尔布罗特集 : Stripes Appearing in Deeper Zooms (>1E14) (Java)

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:06 24 4
gpt4 key购买 nike

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

Messed Up Mandelbrot Zoom

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

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

当您放大得越来越大时,问题会变得更加严重,直到只出现一种颜色。曼德尔布罗特集有效

当我们制作程序时,我们尝试使用维基百科有关曼德尔布罗特集的文章中图像中显示的阴影。我们能找到的唯一信息是它是三次插值着色方案,使其具有平滑过渡的外观。我们花了很长时间试图弄清楚,但最终我们做到了。困难的是曲线不能超过 RGB 限制 255,因此曲线也必须是单调的,而且我们唯一能真正找到帮助的是两篇关于此类插值的维基百科文章。我们从头开始创建代码,一旦我们弄清楚如何编写三次插值,我就致力于获得与其一起使用的完美颜色。附件是 .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 (输入每个值后必须按 Enter 键)

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

最佳答案

首先,您提供的图像并不明显是错误的。曼德尔布罗特的本质是,随着变焦的增加,新的细节就会出现。

如果存在问题,几乎可以肯定是数值稳定性问题。 double 有 53 位精度。你的代码很难读,所以我不想读它。但是,如果您正在执行诸如当窗口以远离原点为中心(例如在(-1,0))处从下窗口边界中减去上窗口边界之类的操作,但尺寸很小......您提到了〜10 ^ -14。那么减法结果就丢掉了大约10^14的显着性。大约是 47 位。剩下的就只剩下6位了,所以计算精度就下降到了1/64。这不是很精确。距离原点越远,差异越小,情况会变得更糟。

考虑阅读What Every Computer Scientist Should Know AboutFloating-Point Arithmetic 。它会让您以新的眼光看待您的代码。直接转换为浮点计算的数学经常会发生爆炸。本文阐述了避免痛苦的依据。

一个不那么吓人的读物是 here .

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

关于java - 曼德尔布罗特集 : Stripes Appearing in Deeper Zooms (>1E14) (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59656776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com