我目前正在尝试渲染曼德博集合,很快意识到不必为每个渲染重新计算最大迭代次数会很有用...另一方面,跟踪这么多数据是很困难的。根据我对关系型数据库的有限了解,它可能不是明智的选择,因为数据集越大,性能就会受到影响。似乎哈希表是完美的选择,但我从未使用过,并且无法弄清楚如何在现有的Web服务器语言(Python/PHP/等)中使用或管理它。
更具体地说,需要存储的重要值为:
看一下这个: 如果您查看drawMandelbrot()函数,您会发现点循环将重要的值存储在名为dataset的变量中。然后,在drawMandelbrotFromData()函数中使用此变量执行其余计算以确定每个像素的颜色。
如果您单击“cleardabrot”,它会用白色矩形替换画布。如果您单击“refilldabrot”,它会再次运行drawMandelbrotFromData()函数...这是为了向您展示它实际上可以多快地呈现集合,只要它不必执行痛苦的迭代计算。
因此,这里的最终目标是能够以任意精度计算这些值,以便用户可以缩放到集合的任何级别,让服务器确定是否有这些确切点的数据(或者更好的是,接近这些确切点的点...尽管我不确定如何在不执行某些范围查询的情况下完成此操作),然后逐像素返回信息。例如...
更具体地说,需要存储的重要值为:
- 复平面上的数字的实部
- 复平面上数字的虚部
- 最大迭代次数
- 在达到最大迭代次数之前或点跑到无穷远之前完成的迭代次数n
- 经过n次迭代后,数字在复平面上的最终实部
- 经过n次迭代后,数字在复平面上的最终虚部
在任何给定时间,只要有原始实部、原始虚部和最大迭代次数,我希望能够得到一个结果集,其中包括最终的实部和虚部。
那么你认为呢?哈希表是正确的方法吗?这个问题对于普通的数据结构来说是否太复杂了?
非常感谢您的任何帮助。提前致谢!
编辑
在julienaubert的友好请求下,我将更详细地阐述这个问题。
我希望能够让用户在Mandelbrot集合上缩放,而不会出现计算延迟(即使是通过预定义的缩放)。我还希望能够在浏览器中完成这个任务,该浏览器不断向服务器请求新的数据数组,以提供在复平面上查看的新的x和y坐标、高度和宽度。然而,由于像素颜色值的计算可以更快地完成(给定max_iter、real_final和imag_final),并且也很好让用户调整颜色设置,因此我只会发送我在文章中列举的变量给浏览器,让用户的浏览器计算颜色。看一下这个: 如果您查看drawMandelbrot()函数,您会发现点循环将重要的值存储在名为dataset的变量中。然后,在drawMandelbrotFromData()函数中使用此变量执行其余计算以确定每个像素的颜色。
如果您单击“cleardabrot”,它会用白色矩形替换画布。如果您单击“refilldabrot”,它会再次运行drawMandelbrotFromData()函数...这是为了向您展示它实际上可以多快地呈现集合,只要它不必执行痛苦的迭代计算。
因此,这里的最终目标是能够以任意精度计算这些值,以便用户可以缩放到集合的任何级别,让服务器确定是否有这些确切点的数据(或者更好的是,接近这些确切点的点...尽管我不确定如何在不执行某些范围查询的情况下完成此操作),然后逐像素返回信息。例如...
- 用户使用300x300画布。
- 他缩放到一个点,其中左上角为
x = .000001
和y = .0000231
。 - 在此框架中,他选择的宽度和高度分别为
w = .00045
和h = .00045
他将这些数字发送到服务器,并依次接收一个包含300 * 300索引(每个表示一个点)的数组,每个索引包含确定画布上每个像素的颜色所需的信息。 我的问题是...最佳的存储预计算Mandelbrot数据的方法是什么,以便用户可以输入任意的x、y、w和h值,并快速地检索该范围内复平面上各点的值。