我目前正在尝试渲染一个 Mandelbrot 集,我很快意识到不必重新计算每次渲染的最大迭代次数会很有用……另一方面,需要跟踪大量数据的。在我看来(基于我对 RDMS 的有限经验)关系数据库可能不是要走的路,因为我不希望随着数据集变大而影响性能。对于哈希表来说,这似乎是完美的情况,但我以前从未使用过,而且似乎无法弄清楚如何使用或管理其中一种现有的 Web 服务器语言(Python/PHP/whatever)。
更明确一点:要存储的重要值是:
- 复平面上数的原实部
- 复平面上数的原虚部
- 最大迭代次数
- 在达到最大迭代之前或直到该点运行到无穷大之前完成的迭代次数 n
- n次迭代后复平面上数的最终实部
- n次迭代后复平面上数的最后虚部
在任何给定时间,给定原始实部、原始虚部和最大迭代次数,我希望能够获得包含最终实部和虚部的结果集。
所以你怎么看?哈希表是要走的路吗?对于普通的数据结构来说,问题是否过于复杂?
任何帮助都将不胜感激。提前致谢!
编辑
应朱莉诺伯特的请求,我将稍微解释一下这个问题。
我的目标是允许用户在没有计算延迟的情况下放大 Mandelbrot 集(即使它是通过预定义的缩放)。我还希望能够在不断向服务器询问新数据数组的浏览器中执行此操作,并提供新的 x 和 y 坐标以及要在复平面上查看的高度和宽度。然而,由于计算像素颜色值可以更快地完成(给定 max_iter、real_final 和 imag_final),而且因为允许用户调整颜色设置会很好,所以我将只发送浏览器我的帖子中列举的变量,让用户的浏览器计算颜色。
看看这个:
如果您查看 drawMandelbrot() 函数,您会发现点循环将重要值存储在名为 dataset 的变量中。然后在 drawMandelbrotFromData() 函数中使用该变量,在该函数中执行剩余的计算来计算每个像素的颜色。
如果您单击“cleardabrot”,它将用白色矩形替换画布。如果您单击“refilldabrot”,它会再次运行 drawMandelbrotFromData() 函数...这样做是为了向您展示如果它不必执行痛苦的迭代计算,它实际渲染集合的速度有多快。
所以这里的最终目标是能够以任意精度计算这些值,因此用户可以缩放到集合的任何级别,让服务器确定这些精确点是否有任何数据(或者,最好是点 NEAR那些确切的点......虽然我不确定如何在不执行某种范围查询的情况下做到这一点),然后逐个像素地吐出信息。例如...
- 用户正在使用 300x300 画布。
- 他放大到左上角为
x = .000001
和的点y = .0000231
。 - 他在这个框架中选择的宽度和高度
w = .00045
是h = .00045
他会将这些数字发送到服务器,然后接收一个包含 300*300 索引(一个代表每个点)的数组,每个索引都包含确定画布上每个像素颜色的必要信息。我的问题是......存储预先计算的 Mandelbrot 数据的最佳方法是什么,以便用户可以输入任意 x、y、w 和 h 值并快速拉回复平面上的点的值范围。