分形/複平面迭代/原子域
外觀
< 分形
-
動畫
-
bof61 的 3D 檢視
-
BOF61 的 2D 檢視
在曼德布羅特集 (引數平面) 的情況下,原子域是引數平面中具有相同索引 p 的部分。
- 它是正整數
- 對於 p=1,域是整個平面,因為在演算法中,複數模的值與無窮大進行比較
- 它等於
- 曼德布羅特集的雙曲分量的週期,該分量在域內
- 臨界點迭代時 z 的模在迭代過程中最小化的迭代次數
請注意
原子域包含
- 週期為 n 的曼德布羅特集的分量 mv
- 該分量的外部
- 一些其他分量
它可以用於
- 快速查詢(近似)曼德布羅特集的週期為 n 的分量及其中心,(域大於分量,這使得它們在查詢分量時很有用)
// code from :
// http://mathr.co.uk/blog/2014-11-02_practical_interior_distance_rendering.html
// C program by Claude Heiland-Allen
complex double z = 0;
complex double dc = 0;
double minimum_z2 = infinity; // atom domain
int period = 0;
// iteration
for (int n = 1; n <= maxiters; ++n) {
dc = 2 * z * dc + 1;
z = z * z + c;
double z2 = cabs2(z);
if (z2 < minimum_z2) {
minimum_z2 = z2;
period = n;}}
Shadertoy
這是《分形的美麗》這本書第 63 頁描述的方法,但影像在第 61 頁。
點的顏色與
- z 達到最小值所需的時間成正比
- 臨界點的迭代使軌道最接近原點
- 索引 (c) 是軌道點最接近原點的迭代次數。由於可能存在多個最接近點,因此索引(c) 是最小的一個。
該演算法顯示了具有相同索引(c) 的域的邊界[8] 。[9]
程式碼片段 : Gnofract4d 中的 fractint.cfrm [10]
bof61 {
init:
int current_index = -1 ; -1 to match Fractint's notion of iter count
int index_of_closest_point = -1
float mag_of_closest_point = 1e100
loop:
current_index = current_index + 1
float zmag = |z|
if zmag < mag_of_closest_point
index_of_closest_point = current_index
mag_of_closest_point = zmag
endif
final:
#index = index_of_closest_point /256.0
}
Cpp 函式
// function is based on function mclosetime
// from mbrot.cpp
// from program mandel by Wolf Jung
// http:www.iram.rwth-aachen.de/~jung/indexp.html
////8 = iterate = bof61
// bailout2=4
int mclosetime(std::complex<double> C , int iter_max, int bailout2)
{ int j, cln = 0;
double x = C.real(), y = C.imag(), u, cld = 4;
for (j = 0; j <= iter_max; j++)
{ u = x*x + y*y;
if (u > bailout2) return j;
if (u < cld) {cld = u;cln = j; }
u = x*x - y*y + C.real();
y = 2*x*y + C.imag();
x = u;
}
return iter_max + cln % 15; //iterate, bof61
}
它可以用於
// compute escape time
int last_iter= mclosetime(C,iter_max,bailout2);
// drawing code */
if (last_iter>=iter_max) { putpixel(ix,iy,last_iter - iter_max);} // interior
else putpixel(ix,iy,WHITE); // exterior

請注意,這種方法可以應用於外部和內部。它被稱為原子域。[12] 它也可以被修改[13]
大小估計[14]
用於從核 c 和其週期 p 計算原子域大小估計的函式
// code by Claude Heiland-Allen
// from http://mathr.co.uk/blog/2013-12-10_atom_domain_size_estimation.html
real_t atom_domain_size_estimate(complex_t c, int_t p) {
complex_t z = c;
complex_t dc = 1;
real_t abszq = cabs(z);
for (int_t q = 2; q <= p; ++q) {
dc = 2 * z * dc + 1;
z = z * z + c;
real_t abszp = cabs(z);
if (abszp < abszq && q < p) {
abszq = abszp;
}
}
return abszq / cabs(dc);
}