我目前正在嘗試渲染一個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