我目前正在尝试渲染一个Mandelbrot集,并且我很快意识到不必为每个渲染重新计算最大迭代次数是有用的......另一方面,它是大量数据不要跟丢。在我看来(基于我对RDMS有限的经验),关系数据库可能不是我们要走的路,因为我不希望数据集变大时性能受到影响。它几乎看起来像一个哈希表的完美情况,但我从来没有使用过,似乎无法解决如何使用或管理现有的Web服务器语言之一(Python/PHP /无论)。什么可能是在数据库中存储Mandelbrot值的最佳方法?
是一个小更明确:要存储的重要的价值观是:
- 的原实了一些关于复平面部分一些
- 的原来的虚部在复飞机上
- 最大迭代次数
- 的数量10次完成迭代Ñ最大迭代之前被击中,或直到点跑出到无穷
- 在复平面上一个数的最终实部后Ñ迭代
- 的最终虚部在复平面上一个号码后ň迭代
在任何给定的时间,考虑到原来的实部的,原始虚部和最大迭代次数,我希望能够得到最终实部和虚部的结果集。
那么你怎么看?哈希表是要走的路吗?对于简单的数据结构,问题是否过于复杂?
任何帮助都将不胜感激。提前致谢!
编辑
我对这个问题一点在julienaubert的各种要求阐述。
我的目标是允许用户放大Mandelbrot集,而不会延迟计算(即使它是通过预定义的缩放)。我也希望能够在浏览器中做到这一点,该浏览器不断要求服务器提供新的数据阵列,以便在复杂的平面上显示新的x和y坐标以及高度和宽度。但是,由于计算像素颜色值可以更快地完成(给定max_iter,real_final和imag_final),并且由于允许用户调整颜色设置会很好,所以我只会发送浏览器在我的文章中枚举的变量并让用户的浏览器计算颜色。
看看这个:
如果你看一看的drawMandelbrot()函数,你可以看到点环路存储在一个名为数据集变量的重要价值。然后在drawMandelbrotFromData()函数中使用该变量,在该函数中执行计算每个像素颜色所需的剩余计算。
如果您单击“cleardabrot”,它将用白色矩形替换画布。如果你点击“refilldabrot”,它会再次运行drawMandelbrotFromData()函数......这样做是为了向你展示如果它不需要执行痛苦的迭代计算,它能够实际渲染集合的速度有多快。
因此,这里的最终目标是能够将这些值计算为任意精度,因此用户可以放大到该集合的任何级别,让服务器计算出是否有这些确切点的任何数据(或者,最好是指向NEAR那些确切的点......尽管我不确定如何在没有执行某种类型的范围查询的情况下完成这项工作),然后逐个像素地吐出信息。例如...
- 用户正在使用300x300的画布。
- 他放大到左上角为
x = .000001
和y = .0000231
的点。 - 他所选择的宽度和高度在该帧是
w = .00045
和h = .00045
他将发送这些数字关闭到服务器并接收,又与300名* 300的索引的阵列(一个表示的每个点),每个都包含必要的信息以确定画布上每个像素的颜色。我的问题在于...存储预先计算的Mandelbrot数据的最佳方法是什么,以便用户可以输入任意的x,y,w和h值并快速地将复数平面上的点的值拉回范围。
感谢您的回答,julienaubert!我已经添加了一大块新的信息,希望能让你更好地理解我想要达到的目标。我会继续写作,直到我的话跑到无穷(可以这么说),如果它可以帮助你! – treeface 2010-09-05 21:03:56
@ julienaubert再次感谢julienaubert。我想你对这个最初计划的不切实际性是正确的。我想我真正打算做的是让用户通过预渲染缩放运行,只是为了让人们了解canvas元素在渲染方面可以做些什么。我可能还会通过持久的Web套接字连接来实现最高传输速率。我已经给你这个答案的要点,但如果你有更多的想法,我很乐意听到他们。再次感谢! – treeface 2010-09-07 17:30:13
为什么你不让他们画在画布上,并合作:) – user348466 2010-09-07 18:57:37