25 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX, DimY },
38 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX },
50 : base(new
ScriptNode[] { r, i, dr, R, p, Palette },
76 return new string[] {
"r",
"i",
"dr",
"R",
"p",
"Palette",
"DimX",
"DimY" };
85 string ColorExpression =
null;
90 double Rr, Ri, pr, pi;
98 if ((Obj =
Arguments[3].AssociatedObjectValue) is Complex)
100 Complex z = (Complex)Obj;
110 if ((Obj =
Arguments[4].AssociatedObjectValue) is Complex)
112 Complex z = (Complex)Obj;
127 ColorExpression = this.Arguments[i].SubExpression;
132 Palette = ColorModels.RandomLinearAnalogousHSL.CreatePalette(1024, 16, out
int Seed,
this,
Variables);
133 ColorExpression =
"RandomLinearAnalogousHSL(1024,16," + Seed.ToString() +
")";
135 if (i < c && this.Arguments[i] is
null)
151 throw new ScriptRuntimeException(
"Parameter mismatch in call to NovaMandelbrotTopographyFractal(r,c,dr,Coefficients[,Palette][,dimx[,dimy]]).",
155 if (dimx <= 0 || dimx > 5000 || dimy <= 0 || dimy > 5000)
158 return CalcNovaMandelbrot(
Variables, rc, ic, dr, Rr, Ri, pr, pi, Palette, dimx, dimy,
this, this.FractalZoomScript,
159 new object[] { Palette, dimx, dimy, Rr, Ri, pr, pi, ColorExpression });
162 private string FractalZoomScript(
double r,
double i,
double Size,
object State)
164 object[] Parameters = (
object[])State;
165 int DimX = (int)Parameters[1];
166 int DimY = (int)Parameters[2];
167 double Rr = (double)Parameters[3];
168 double Ri = (double)Parameters[4];
169 double pr = (double)Parameters[5];
170 double pi = (double)Parameters[6];
171 string ColorExpression = (string)Parameters[7];
173 StringBuilder sb =
new StringBuilder();
175 sb.Append(
"NovaMandelbrotTopographyFractal(");
201 if (!
string.IsNullOrEmpty(ColorExpression))
204 sb.Append(ColorExpression);
208 sb.Append(DimX.ToString());
210 sb.Append(DimY.ToString());
213 return sb.ToString();
220 double pr,
double pi, SKColor[] Palette,
int Width,
int Height,
ScriptNode Node, FractalZoomScript FractalZoomScript,
object State)
222 double r0, i0, r1, i1;
225 double zr, zi, zr2, zi2, zr3, zi3, zr4, zi4;
238 int size = Width * Height;
239 int[] ColorIndex =
new int[size];
244 r0 = rCenter - rDelta;
245 r1 = rCenter + rDelta;
247 aspect = ((double)Width) / Height;
249 i0 = iCenter - rDelta / aspect;
250 i1 = iCenter + rDelta / aspect;
252 dr = (r1 - r0) / Width;
253 di = (i1 - i0) / Height;
255 for (y = 0, i = i0, index = 0; y < Height; y++, i += di)
257 for (x = 0, r = r0; x < Width; x++, r += dr)
273 lnz = Math.Log(Math.Sqrt(zr * zr + zi * zi));
274 argz = Math.Atan2(zi, zr);
275 amp = Math.Exp(pr * lnz - pi * argz);
276 phi = pi * lnz + pr * argz;
278 zr2 = amp * Math.Cos(phi) - 1;
279 zi2 = amp * Math.Sin(phi);
286 amp = Math.Exp((pr - 1) * lnz - pi * argz);
287 phi = pi * lnz + (pr - 1) * argz;
289 zr3 = amp * Math.Cos(phi);
290 zi3 = amp * Math.Sin(phi);
292 Temp = pr * zr3 - pi * zi3;
293 zi3 = pr * zi3 + pi * zr3;
298 Temp = 1.0 / (zr3 * zr3 + zi3 * zi3);
299 zr4 = (zr2 * zr3 + zi2 * zi3) * Temp;
300 zi4 = (zi2 * zr3 - zr2 * zi3) * Temp;
302 Temp = Rr * zr4 - Ri * zi4;
303 zi4 = Ri * zr4 + Rr * zi4 + i;
309 Temp = Math.Sqrt(zr4 * zr4 + zi4 * zi4);
311 while ((Temp > Conv) && (Temp < Div) && (n++ < N));
313 if (Temp < Conv && n < N)
314 ColorIndex[index++] = n;
316 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 string FunctionName
TODO
static FractalGraph CalcNovaMandelbrot(Variables Variables, double rCenter, double iCenter, double rDelta, double Rr, double Ri, double pr, double pi, SKColor[] Palette, int Width, int Height, ScriptNode Node, FractalZoomScript FractalZoomScript, object State)
TODO
NovaMandelbrotTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, int Start, int Length, Expression Expression)
TODO
NovaMandelbrotTopographyFractal(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[] DefaultArgumentNames
TODO
NovaMandelbrotTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, int Start, int Length, Expression Expression)
TODO
override IElement Evaluate(IElement[] Arguments, Variables Variables)
TODO
NovaMandelbrotTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, ScriptNode DimX, 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
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.
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.