2016-09-03 31 views
0

我從來沒有理解過像mandelbulb這樣的東西可以從數學數據中產生。對我來說唯一有意義的方法是使用體素,這顯然不是在這裏鏈接的圖像中使用的。所以如果有人能向我解釋這一點,請做。mandelbulb如何呈現?

enter image description here

+0

的確是好奇的形象!它是用某種轉換函數完成的。Mandelbrot圖像已經具有三個維度:x-y平面和z-高度(迭代)。雖然我的猜測是這是類似Julia集合的轉變,而不是Mandelbrot。 –

回答

2

我不知道確切的數學,但我知道如何從2D分到達3D之一。但首先讓我們看看如何做二維分形:

當計算一般(二維)分形時,您可以選取一些像素座標並使用函數(如[x,y] = somefunc(x,y))對其進行變換,並檢查結果是否符合某些條件。如果它不是你再次重申,並再次...

你的數字可能永遠不會滿足這個條件,所以你添加一些全局計數器,讓我們說100個迭代每個像素 - 如果它不符合100次迭代後的條件你認爲它永遠不會停止。

如果從未滿足條件,則假定當前像素在分形之外,如果滿足條件,則存儲這樣做所需的迭代次數。

將所有這些計算出來的每個像素都映射到顏色的迭代次數後,我經常看到outside繪製爲黑色,迭代計數映射到某種自定義顏色。你可以使用漸變,樂隊,灰度或任何你想要的。你也可以循環這些顏色來僞造動畫。

這裏要注意的一點是,當你開始計算一些像素,然後經過一些迭代後,最終會得到該像素的結果 - 這在3D情況下會有所不同。

3D

在3D情況下,大部分的計算是一樣的,只是多了很多人。

您從一些像素開始,但是現在您可以計算從您的眼睛到該像素的3D光線,並選擇靠近您的某個起始點(如近剪裁平面)。你對這個3D點做了你的迭代,但是如果你不符合條件,你只需稍微提前一點就可以重新計算這個新點。這意味着計算一些迭代以獲得當前像素的結果是不夠的 - 您可能需要爲光線上的每個測試點執行很多次,這會使計算速度變慢。

基本上,當您找到滿足您的條件的第一個點併爲此點計算迭代次數時,可以按照與2D案例中相同的方式對它着色,但3D空間會爲您提供更多選項。你可以追蹤這個點和燈光之間的線,以檢查它是否有陰影,或者嘗試計算光照的正常值(分形中沒有典型的normals,但你可能試圖僞造它)。

這是一個您可以最有創意的地方 - 儘管目前的電腦速度太慢,無法快速完成所有這些數學運算,您可能會發現很多技巧可以幫助您。例如,在您發佈的圖片中,我相信他們也會跟蹤每個最終點的一些接近程度,以獲得ambient occlusion

並根據我的somefunccondition,您可以查看關於Mandelbrot和Julia集的維基頁面。他們似乎很簡單,但我沒有自己做,所以不會假裝我是描述它的好人。