File: formula_box_fold_pwr2.cpp

package info (click to toggle)
mandelbulber2 2.20-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 149,924 kB
  • sloc: cpp: 79,997; lisp: 30,582; php: 1,798; sh: 897; python: 581; xml: 88; makefile: 42; ansic: 3
file content (38 lines) | stat: -rw-r--r-- 926 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//box fold
if (fabs(z.x) > fractal->foldingIntPow.foldFactor)
	z.x = sign(z.x) * fractal->foldingIntPow.foldFactor
		 * 2.0 - z.x;
if (fabs(z.y) > fractal->foldingIntPow.foldFactor)
	z.y = sign(z.y) * fractal->foldingIntPow.foldFactor
		 * 2.0 - z.y;
if (fabs(z.z) > fractal->foldingIntPow.foldFactor)
	z.z = sign(z.z) * fractal->foldingIntPow.foldFactor
		 * 2.0 - z.z;

//spherical fold
double fR2_2 = 1.0;
double mR2_2 = 0.25;
double r2_2 = z.Dot(z);
double tglad_factor1_2 = fR2_2 / mR2_2;

if (r2_2 < mR2_2)
{
	z = z * tglad_factor1_2;
}
else if (r2_2 < fR2_2)
{
	double tglad_factor2_2 = fR2_2 / r2_2;
	z = z * tglad_factor2_2;
}

//Mandelbulb power 2
z = z * 2.0;
double x2 = z.x * z.x;
double y2 = z.y * z.y;
double z2 = z.z * z.z;
double temp = 1.0 - z2 / (x2 + y2);
zTemp.x = (x2 - y2) * temp;
zTemp.y = 2.0 * z.x * z.y * temp;
zTemp.z = -2.0 * z.z * sqrt(x2 + y2);
z = zTemp;
z.z *= fractal->foldingIntPow.zFactor;