26 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX, DimY },
39 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX },
51 : base(new
ScriptNode[] { r, i, dr, R, p, Palette },
77 return new string[] {
"r",
"i",
"dr",
"R",
"p",
"Palette",
"DimX",
"DimY" };
86 string ColorExpression =
null;
91 double Rr, Ri, pr, pi;
99 if ((Obj =
Arguments[3].AssociatedObjectValue) is Complex)
101 Complex z = (Complex)Obj;
111 if ((Obj =
Arguments[4].AssociatedObjectValue) is Complex)
113 Complex z = (Complex)Obj;
128 ColorExpression = this.Arguments[i].SubExpression;
133 Palette = ColorModels.RandomLinearAnalogousHSL.CreatePalette(1024, 16, out
int Seed,
this,
Variables);
134 ColorExpression =
"RandomLinearAnalogousHSL(1024,16," + Seed.ToString() +
")";
136 if (i < c && this.Arguments[i] is
null)
152 throw new ScriptRuntimeException(
"Parameter mismatch in call to NovaMandelbrotSmoothFractal(r,c,dr,Coefficients[,Palette][,dimx[,dimy]]).",
156 if (dimx <= 0 || dimx > 5000 || dimy <= 0 || dimy > 5000)
159 return CalcNovaMandelbrot(rc, ic, dr, Rr, Ri, pr, pi, Palette, dimx, dimy,
161 new object[] { Palette, dimx, dimy, Rr, Ri, pr, pi, ColorExpression });
164 private string FractalZoomScript(
double r,
double i,
double Size,
object State)
166 object[] Parameters = (
object[])State;
167 int DimX = (int)Parameters[1];
168 int DimY = (int)Parameters[2];
169 double Rr = (double)Parameters[3];
170 double Ri = (double)Parameters[4];
171 double pr = (double)Parameters[5];
172 double pi = (double)Parameters[6];
173 string ColorExpression = (string)Parameters[7];
175 StringBuilder sb =
new StringBuilder();
177 sb.Append(
"NovaMandelbrotSmoothFractal(");
203 if (!
string.IsNullOrEmpty(ColorExpression))
206 sb.Append(ColorExpression);
210 sb.Append(DimX.ToString());
212 sb.Append(DimY.ToString());
215 return sb.ToString();
223 FractalZoomScript FractalZoomScript,
object State)
225 double r0, i0, r1, i1;
228 double zr, zi, zr2, zi2, zr3, zi3, zr4, zi4;
241 int size = Width * Height;
242 double[] ColorIndex =
new double[size];
247 r0 = rCenter - rDelta;
248 r1 = rCenter + rDelta;
250 aspect = ((double)Width) / Height;
252 i0 = iCenter - rDelta / aspect;
253 i1 = iCenter + rDelta / aspect;
255 dr = (r1 - r0) / Width;
256 di = (i1 - i0) / Height;
258 for (y = 0, i = i0, index = 0; y < Height; y++, i += di)
260 for (x = 0, r = r0; x < Width; x++, r += dr)
276 lnz = Math.Log(Math.Sqrt(zr * zr + zi * zi));
277 argz = Math.Atan2(zi, zr);
278 amp = Math.Exp(pr * lnz - pi * argz);
279 phi = pi * lnz + pr * argz;
281 zr2 = amp * Math.Cos(phi) - 1;
282 zi2 = amp * Math.Sin(phi);
289 amp = Math.Exp((pr - 1) * lnz - pi * argz);
290 phi = pi * lnz + (pr - 1) * argz;
292 zr3 = amp * Math.Cos(phi);
293 zi3 = amp * Math.Sin(phi);
295 Temp = pr * zr3 - pi * zi3;
296 zi3 = pr * zi3 + pi * zr3;
301 Temp = 1.0 / (zr3 * zr3 + zi3 * zi3);
302 zr4 = (zr2 * zr3 + zi2 * zi3) * Temp;
303 zi4 = (zi2 * zr3 - zr2 * zi3) * Temp;
305 Temp = Rr * zr4 - Ri * zi4;
306 zi4 = Ri * zr4 + Rr * zi4 + i;
312 Temp = Math.Sqrt(zr4 * zr4 + zi4 * zi4);
314 while ((Temp > Conv) && (Temp < Div) && (n++ < N));
316 if (Temp < Conv && n < N)
317 ColorIndex[index++] = n;
319 ColorIndex[index++] = N;
Script runtime exception.
Class managing a script expression.
static double ToDouble(object Object)
Converts an object to a double value.
static string ToString(double Value)
Converts a value to a string, that can be parsed as part of an expression.
Calculates a Nova Mandelbrot Fractal Image (by Paul Derbyshire)
override IElement Evaluate(IElement[] Arguments, Variables Variables)
TODO
static FractalGraph CalcNovaMandelbrot(double rCenter, double iCenter, double rDelta, double Rr, double Ri, double pr, double pi, SKColor[] Palette, int Width, int Height, ScriptNode Node, Variables Variables, FractalZoomScript FractalZoomScript, object State)
TODO
NovaMandelbrotSmoothFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, ScriptNode DimX, int Start, int Length, Expression Expression)
TODO
override string[] DefaultArgumentNames
TODO
NovaMandelbrotSmoothFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, ScriptNode DimX, ScriptNode DimY, int Start, int Length, Expression Expression)
TODO
override string FunctionName
TODO
NovaMandelbrotSmoothFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, int Start, int Length, Expression Expression)
TODO
NovaMandelbrotSmoothFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, int Start, int Length, Expression Expression)
TODO
Defines a clickable fractal graph in the complex plane.
static PixelInformation ToPixels(double[] ColorIndex, int Width, int Height, SKColor[] Palette)
TODO
static SKColor[] ToPalette(ObjectVector Vector)
TODO
static double[] FindBoundaries(double[] ColorIndex, int Width, int Height)
TODO
static void Smooth(double[] ColorIndex, double[] Boundary, int Width, int Height, int N, SKColor[] Palette, ScriptNode Node, Variables Variables)
TODO
Handles bitmap-based graphs.
Base class for multivariate funcions.
ScriptNode[] Arguments
Function arguments.
Base class for all nodes in a parsed script tree.
int Length
Length of expression covered by node.
Expression Expression
Expression of which the node is a part.
int Start
Start position in script expression.
void Preview(Expression Expression, IElement Result)
Reports a preview of the final result.
Basic interface for all types of elements.
delegate string FractalZoomScript(double r, double i, double Size, object State)
Generates new script when zoomed.
ArgumentType
Type of parameter used in a function definition or a lambda definition.