1 /**
2  * Mandelbulber v2, a 3D fractal generator  _%}}i*<.         ______
3  * Copyright (C) 2020 Mandelbulber Team   _>]|=||i=i<,      / ____/ __    __
4  *                                        \><||i|=>>%)     / /   __/ /___/ /_
5  * This file is part of Mandelbulber.     )<=i=]=|=i<>    / /__ /_  __/_  __/
6  * The project is licensed under GPLv3,   -<>>=|><|||`    \____/ /_/   /_/
7  * see also COPYING file in this folder.    ~+{i%+++
8  *
9  * abs Multi - Multiple parameters for abs functions
10  */
11 
12 #include "all_fractal_definitions.h"
13 
cFractalTransfAbsAddMulti()14 cFractalTransfAbsAddMulti::cFractalTransfAbsAddMulti() : cAbstractFractal()
15 {
16 	nameInComboBox = "T>Abs Add Multi";
17 	internalName = "transf_abs_add_multi";
18 	internalID = fractal::transfAbsAddMulti;
19 	DEType = analyticDEType;
20 	DEFunctionType = withoutDEFunction;
21 	cpixelAddition = cpixelDisabledByDefault;
22 	defaultBailout = 100.0;
23 	DEAnalyticFunction = analyticFunctionNone;
24 	coloringFunction = coloringFunctionDefault;
25 }
26 
FormulaCode(CVector4 & z,const sFractal * fractal,sExtendedAux & aux)27 void cFractalTransfAbsAddMulti::FormulaCode(CVector4 &z, const sFractal *fractal, sExtendedAux &aux)
28 {
29 	Q_UNUSED(aux);
30 
31 	CVector4 tempA = CVector4(0.0, 0.0, 0.0, 0.0);
32 	CVector4 tempB = CVector4(0.0, 0.0, 0.0, 0.0);
33 
34 	if (fractal->transformCommon.functionEnabledAx)
35 		tempA.x = fabs(z.x + fractal->transformCommon.additionConstant000.x);
36 
37 	if (fractal->transformCommon.functionEnabledx)
38 		tempB.x = fabs(z.x - fractal->transformCommon.offset000.x);
39 
40 	z.x = tempA.x - tempB.x - (z.x * fractal->transformCommon.scale3D111.x);
41 
42 	if (fractal->transformCommon.functionEnabledAy)
43 		tempA.y = fabs(z.y + fractal->transformCommon.additionConstant000.y);
44 
45 	if (fractal->transformCommon.functionEnabledy)
46 		tempB.y = fabs(z.y - fractal->transformCommon.offset000.y);
47 
48 	z.y = tempA.y - tempB.y - (z.y * fractal->transformCommon.scale3D111.y);
49 
50 	if (fractal->transformCommon.functionEnabledAz)
51 		tempA.z = fabs(z.z + fractal->transformCommon.additionConstant000.z);
52 
53 	if (fractal->transformCommon.functionEnabledz)
54 		tempB.z = fabs(z.z - fractal->transformCommon.offset000.z);
55 
56 	z.z = tempA.z - tempB.z - (z.z * fractal->transformCommon.scale3D111.z);
57 
58 	z += fractal->transformCommon.offsetA000;
59 
60 	if (fractal->analyticDE.enabledFalse)
61 		aux.DE = aux.DE * fractal->analyticDE.scale1 + fractal->analyticDE.offset0;
62 }
63