32 : base(new
ScriptNode[] { z, f, dr, Palette, DimX, DimY },
43 : base(new
ScriptNode[] { z, f, dr, Palette, DimX },
75 return new string[] {
"z",
"f",
"dr",
"Palette",
"DimX",
"DimY" };
84 string ColorExpression =
null;
95 Obj =
Arguments[i++].AssociatedObjectValue;
108 throw new ScriptRuntimeException(
"Insufficient parameters in call to MandelbrotTopographyFractal().",
this);
110 Obj =
Arguments[i].AssociatedObjectValue;
113 fDef = this.Arguments[i++];
115 if (f.NrArguments != 2)
116 throw new ScriptRuntimeException(
"Lambda expression in calls to MandelbrotTopographyFractal() must be of two variables (z,c).",
this);
131 ColorExpression = this.Arguments[i].SubExpression;
136 Palette = ColorModels.RandomLinearAnalogousHSL.CreatePalette(1024, 16, out
int Seed,
this,
Variables);
137 ColorExpression =
"RandomLinearAnalogousHSL(1024,16," + Seed.ToString() +
")";
139 if (i < c && this.Arguments[i] is
null)
155 throw new ScriptRuntimeException(
"Parameter mismatch in call to MandelbrotTopographyFractal(r,c,dr[,Palette][,dimx[,dimy]]).",
159 if (dimx <= 0 || dimx > 5000 || dimy <= 0 || dimy > 5000)
164 return CalcMandelbrot(rc, ic, dr, f,
Variables, Palette, dimx, dimy,
this, this.FractalZoomScript,
165 new object[] { Palette, dimx, dimy, ColorExpression, fDef });
170 new object[] { Palette, dimx, dimy, ColorExpression, fDef });
174 private string FractalZoomScript(
double r,
double i,
double Size,
object State)
176 object[] Parameters = (
object[])State;
177 int DimX = (int)Parameters[1];
178 int DimY = (int)Parameters[2];
179 string ColorExpression = (string)Parameters[3];
182 StringBuilder sb =
new StringBuilder();
184 sb.Append(
"MandelbrotTopographyFractal((");
196 if (!
string.IsNullOrEmpty(ColorExpression))
199 sb.Append(ColorExpression);
203 sb.Append(DimX.ToString());
205 sb.Append(DimY.ToString());
208 return sb.ToString();
215 SKColor[] Palette,
int Width,
int Height,
ScriptNode Node, FractalZoomScript FractalZoomScript,
object State)
217 double r0, i0, r1, i1;
220 double zr, zi, zrt, zr2, zi2;
227 int Size = Width * Height;
228 int[] ColorIndex =
new int[Size];
232 r0 = rCenter - rDelta;
233 r1 = rCenter + rDelta;
235 aspect = ((double)Width) / Height;
237 i0 = iCenter - rDelta / aspect;
238 i1 = iCenter + rDelta / aspect;
240 dr = (r1 - r0) / Width;
241 di = (i1 - i0) / Height;
243 for (y = 0, i = i0; y < Height; y++, i += di)
245 for (x = 0, r = r0; x < Width; x++, r += dr)
254 while (zr2 + zi2 < 9 && n < N)
258 zi = 2 * zr * zi + i;
266 ColorIndex[Index++] = N;
268 ColorIndex[Index++] = n;
283 ScriptNode Node, FractalZoomScript FractalZoomScript,
object State)
285 double r0, i0, r1, i1;
294 int Size = Width * Height;
295 int[] ColorIndex =
new int[Size];
303 r0 = rCenter - rDelta;
304 r1 = rCenter + rDelta;
306 aspect = ((double)Width) / Height;
308 i0 = iCenter - rDelta / aspect;
309 i1 = iCenter + rDelta / aspect;
311 dr = (r1 - r0) / Width;
312 di = (i1 - i0) / Height;
314 for (y = 0, i = i0; y < Height; y++, i += di)
316 Complex[] Row =
new Complex[Width];
317 Complex[] Row0 =
new Complex[Width];
318 int[] Offset =
new int[Width];
321 for (x = 0, x2 = y * Width, r = r0; x < Width; x++, r += dr, x2++)
323 Row[x] = Row0[x] =
new Complex(r, i);
331 while (n < N && c > 0)
337 Row = Obj.AssociatedObjectValue as Complex[];
341 else if (Row.Length != c)
344 for (x = x2 = 0; x < c; x++)
373 Array.Resize(ref Row, x2);
374 Array.Resize(ref Row0, x2);
375 Array.Resize(ref Offset, x2);
382 for (x = 0; x < c; x++)
Script runtime exception.
Class managing a script expression.
static IElement Encapsulate(object Value)
Encapsulates an object.
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 Mandelbrot Topography Fractal Image
override string FunctionName
TODO
static FractalGraph CalcMandelbrot(double rCenter, double iCenter, double rDelta, ILambdaExpression f, Variables Variables, SKColor[] Palette, int Width, int Height, ScriptNode Node, FractalZoomScript FractalZoomScript, object State)
TODO
override IElement Evaluate(IElement[] Arguments, Variables Variables)
TODO
MandelbrotTopographyFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, int Start, int Length, Expression Expression)
TODO
MandelbrotTopographyFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, int Start, int Length, Expression Expression)
TODO
MandelbrotTopographyFractal(ScriptNode z, ScriptNode f, ScriptNode dr, int Start, int Length, Expression Expression)
TODO
override string[] DefaultArgumentNames
TODO
static FractalGraph CalcMandelbrot(Variables Variables, double rCenter, double iCenter, double rDelta, SKColor[] Palette, int Width, int Height, ScriptNode Node, FractalZoomScript FractalZoomScript, object State)
TODO
MandelbrotTopographyFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, ScriptNode DimY, int Start, int Length, Expression Expression)
TODO
Exception thrown if an image with invalid size is requested.
Exception thrown if a lambda expression with invalid type is encountered.
Exception thrown if a lambda expression with invalid type is encountered.
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.
string SubExpression
Sub-expression defining the node.
Expression Expression
Expression of which the node is a part.
int Start
Start position in script expression.
void CopyTo(Variables Variables)
Copies available variables to another variable collection.
Basic interface for all types of elements.
Base interface for lambda expressions.
IElement Evaluate(IElement[] Arguments, Variables Variables)
Evaluates the lambda expression.
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.