Julia 和 Mandelbrot 集/四元數圖片
當然,Julia 和 Mandelbrot 集可以在高於二維的空間中構建,但如果我們讓圖片成為以通常方式著色的二維截面,那麼這樣做並沒有太多收穫。我們應該讓截面成為三維的,並將集合看作一個以與我們為分形景觀著色相同的方式著色的物體或表面。這裡我們將讓圖形為白色,並將光線設為人工的(具有平行光線),因此圖片以灰色色調顯示,色調隨著距離的增加而變深。
至於函式,我們可以讓它成為從空間到自身的一個對映,但如果它不滿足與柯西-黎曼微分方程相對應的東西,那麼結構將與非複數情況相同。這些方程無法推廣到三維空間,但它們可以推廣到四維空間,因為在四維空間中(與三維空間相反),我們可以引入計算運算,這些運算是對複數運算的自然擴充套件。
複數到四維的擴充套件是由愛爾蘭數學家W.R. Hamilton (1805-65) 在 1843 年發現的。漢密爾頓將他的新數稱為四元數。四元數是形式為x + yi + uj + vk的數,其中x、y、u 和v 是實數,其中兩個新符號j 和k,與i 一樣,滿足 = -1,並且三個符號透過ij = k 連線。
從這些關係可以得出jk = i 和ki = j,但也可以得出ji = -k,也就是說,ji = -ij。這意味著四元數的乘法不滿足交換律。但除此之外,四元數與實數和複數一樣,構成了一個域:你可以用它們進行運算,就像你對實數和複數進行運算一樣。四元數的斜域 是複數域的擴充套件,並且四元數具有與複數相同的美妙而簡單的性質。例如:對於一個 n 次多項式 p(z),方程 p(z) = 0 恰好有 n 個根(有些可能是重根),如果一個四元數函式 f(z) 在一個開域(在四元數中)的每個點處都可微,那麼它可以無限次地微分。
因此,我們可以毫無問題地將 Julia 和 Mandelbrot 集的理論推廣到四元數:我們所說的所有內容(臨界點、迴圈、勢函式和距離函式,......)幾乎沒有修改就有效——只有場線需要說明。


我們需要一個策略來將四維模式轉換為二維。我們假設我們的函式(z 為四元數)是一個具有實係數的多項式,並且它只包含偶數次冪(例如 ),因為這樣,由 1、i 和j 張成的三維子空間在迭代下保持不變,因此我們可以將自己限制在這個空間中。臨界點是圍繞 x 軸對稱分佈的複數,我們從一個有限的臨界點和 ∞ 構造 Mandelbrot 集。Julia 集是一個分形表面,我們應該有兩種繪製方式:填充的 Julia 集,它是包含 ∞ 的 Fatou 域的補集,以及帶有內 Fatou 域中場線的 Julia 集(部分原因是內 Fatou 域中沒有什麼可看的,並且場線非常裝飾性,部分原因是當域填充了場線時,圖片繪製得更快,因為這些線停止了繪製過程)。
在空間中,我們想象一個平行於x,y 平面的平面,我們用它來與分形相交,並觀察它中位於該平面後方(或“下方”)的部分。光線的強度由“向下”到分形的距離決定。平行於基面(x,y 平面)的交點平面由高度h 給出。對於 Mandelbrot 集,高度必須為正數,因為我們對位於x,y 平面下方的那部分不感興趣(因為 Mandelbrot 集圍繞基面對稱,並在另一側衰減)。顏色的色調透過連續估計到邊界距離來計算,並且基於這些估計,以越來越小的步長進行近似。如果邊界太薄,則近似序列可能會跳過分形(產生一個黑點)。
我們可以讓下一步下降為估計距離的一半,但我們必須安排程式,以便我們可以在圖片中出現錯誤時使步長變小。我們必須選擇一個小的數字stepmin,以便如果計算出的步長u 小於這個數字,我們就將u 設為stepmin。對於每一步,我們將計算出的步長新增到一個從 0 開始的數字中,當我們到達邊界(或 Mandelbrot 集的內部或填充的 Julia 集或場線)時,我們將距離除以最高允許距離,在 Mandelbrot 集的情況下是平面的高度h,在 Julia 集的情況下是h 加上我們可以在基面下方走的最遠距離(例如 2)。結果是 [0, 1] 區間內的數字,我們構建一個由該區間中的數字 t 索引的灰色色調刻度,使得 0 對應於白色,1 對應於黑色。例如,我們可以讓顏色具有(相等的)RGB 值,這些 RGB 值是數字 的整數部分,其中有三個引數可以調整色調。
對於 Mandelbrot 集,當達到最大迭代次數或迭代點在半徑非常大的球體之外時,迭代停止。在這種情況下,我們計算到邊界的距離,並讓這個數字決定下一步下降。填充的 Julia 集也是如此。對於內 Fatou 域,當序列中的一個點在給定的小距離內與迴圈中的一個(給定)點相同時,迭代停止。由於我們沒有計算實際迭代次數,因此我們不需要計算迴圈的吸引力,但我們必須知道迴圈的階數,並且(由於場線)必須知道對應於複數情況中旋轉角度的單位四元數。
曼德勃羅集與複數平面(即基面)的交集是相應的複數曼德勃羅集,它關於 x 軸對稱(因為我們公式中的係數都是實數)。四元數曼德勃羅集(在三維空間中)是透過繞 x 軸旋轉複數曼德勃羅集得到的。因此,曼德勃羅集的邊界是一個以 x 軸為生成器的旋轉對稱分形表面,它因此由圍繞 x 軸的圓組成。與複數平面中(即高度為 0)的點相關的朱利亞集也由圍繞 x 軸的圓組成。但對於複數平面之外的點,朱利亞集由與 x 軸成一定角度的封閉曲線或曲線段組成。在這些分形表面中,結構僅在一個方向上是分形的:在垂直於此方向的方向上,它將具有曲線的真實特徵——我們在非複數分形中看到的現象。


四元數 z = x + yi + uj + vk 的範數是實數 |z| = ,z 可以寫成範數和單位四元數(範數為 1 的四元數)的乘積,這個單位四元數是 z 的幅角。
在我們第四個座標為 0 的情況下,幅角是單位球面上的一個點。而迴圈中某個點的周圍的小圓,在複數情況下停止迭代,現在必須用一個小球代替,場線是基於這個球面上規則分佈的域構建的。因此,我們可以選擇由赤道圓的規則分解以及投影到赤道圓得到的域。
然而,用於繪製場線的方法有點複雜。繪製是透過以儘可能大的步長向下走來完成的,但現在必須檢查是否擊中了場線。由於最初的步長很大,我們有跳過場線的風險,因此我們必須(透過試迭代)檢查是否有場線擋住我們的路,如果有,則修改進一步的過程。如果場線擋住了我們的路,我們必須以更小的步長向前走,當它被擊中時,我們必須以越來越小的步長向後和向前走,以找到與場線的精確交點。我們向下走的步長通常(即,當我們忽略場線時)是估計距離的一半,現在我們可能需要減小步長。
如果我們設定 ,並且如果吸引迴圈的階數為 r 並且 z* 是迴圈中的一個點,則 z* 是 (r 次複合)的一個不動點,並且在 z* 附近,該對映(與場線有關)具有旋轉的特徵,其幅角為 的四元數 = 四元數 的乘積,對於迴圈中的 r 個點。
給定方向 (= 範數為 1 的四元數)從 *z* 出發,確定一條場線,它由所有滿足以下條件的點 *z* 組成:如果 的幅角為 ( = 迭代的最後一個點),那麼 。因此,我們必須知道單位四元數的 *k'* 次方,這可以透過以下公式計算
其中 是一個角度,使得 ,其中 t 是透過以下操作遞迴計算的:執行 *k* 次,從 *t* = 0 和 *i* = 0 開始
- 以及 .
設 *n* 為場線的數量,設 *t* 為它們的相對厚度(區間 [0, 1] 中的一個數字)。對於點 *z*,我們已經計算了 ,它是一個單位四元數,因此對應於單位球面上的一個點。由於決定場線的域選擇為赤道圓的正則分解的結果,因此條件僅取決於該四元數在複平面上的投影的幅角。如果 *v* 是這個角度(在區間 [0, 2[) 中選擇)除以 2,那麼如果對於某個整數 *i* = 0, 1, ..., *n*,*|v - i/n| < t/(2n)*,則 *z* 屬於一條場線。
然而,由於我們想知道是否有場線阻擋了我們的去路,我們首先執行一個預計算,計算到邊界的距離並確定相關的場線,這條場線具有數字 *i*,使得 *|v - i/n| < 1/(2n)*。我們計算數字 *d = 2n|v - i/n| - t*。如果 d 為負數,則點 *z* 實際上屬於場線,並且該點被塗成白色。否則,我們將 *d* 視為到場線距離的度量,並用 *d* 乘以計算的步長,以便當我們靠近一條場線時步長變小。
我們必須找到我們向下走時場線被擊中的精確點。因此,我們以越來越小的步長來回走動。我們將當前的高度稱為 *h1*,並將舊的高度稱為 *h2*。當我們第一次進入一條場線時,我們設定 *h3 = h1* 和 *h1 = (h1 + h2)/2*,並再次計算我們是否在場線內部。如果不是,我們設定 *h2 = h1* 和 *h1 = (h1 + h3)/2*,如果是,我們設定 *h3 = h1* 和 *h1 = (h1 + h2)/2*。我們這樣做,直到 *h2 - h1 < stepmin*。然後到場線的距離為 *h - h1*(*h* 是平面的高度)。