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 MandelbrotSmoothFractal(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(
"MandelbrotSmoothFractal((");
196 if (!
string.IsNullOrEmpty(ColorExpression))
199 sb.Append(ColorExpression);
203 sb.Append(DimX.ToString());
205 sb.Append(DimY.ToString());
208 return sb.ToString();
216 FractalZoomScript FractalZoomScript,
object State)
218 double r0, i0, r1, i1;
221 double zr, zi, zrt, zr2, zi2;
228 int Size = Width * Height;
229 double[] ColorIndex =
new double[Size];
233 r0 = rCenter - rDelta;
234 r1 = rCenter + rDelta;
236 aspect = ((double)Width) / Height;
238 i0 = iCenter - rDelta / aspect;
239 i1 = iCenter + rDelta / aspect;
241 dr = (r1 - r0) / Width;
242 di = (i1 - i0) / Height;
244 for (y = 0, i = i0; y < Height; y++, i += di)
246 for (x = 0, r = r0; x < Width; x++, r += dr)
255 while (zr2 + zi2 < 9 && n < N)
259 zi = 2 * zr * zi + i;
267 ColorIndex[Index++] = N;
269 ColorIndex[Index++] = n;
287 ScriptNode Node, FractalZoomScript FractalZoomScript,
object State)
289 double r0, i0, r1, i1;
298 int Size = Width * Height;
299 double[] ColorIndex =
new double[Size];
307 r0 = rCenter - rDelta;
308 r1 = rCenter + rDelta;
310 aspect = ((double)Width) / Height;
312 i0 = iCenter - rDelta / aspect;
313 i1 = iCenter + rDelta / aspect;
315 dr = (r1 - r0) / Width;
316 di = (i1 - i0) / Height;
318 for (y = 0, i = i0; y < Height; y++, i += di)
320 Complex[] Row =
new Complex[Width];
321 Complex[] Row0 =
new Complex[Width];
322 int[] Offset =
new int[Width];
325 for (x = 0, x2 = y * Width, r = r0; x < Width; x++, r += dr, x2++)
327 Row[x] = Row0[x] =
new Complex(r, i);
335 while (n < N && c > 0)
341 Row = Obj.AssociatedObjectValue as Complex[];
346 "and return complex vectors of equal length. Type returned: " +
347 Obj.GetType().FullName, Node);
349 else if (Row.Length != c)
352 "and return complex vectors of equal length. Length returned: " +
353 Row.Length.ToString() +
". Expected: " + c.ToString(), Node);
356 for (x = x2 = 0; x < c; x++)
385 Array.Resize(ref Row, x2);
386 Array.Resize(ref Row0, x2);
387 Array.Resize(ref Offset, x2);
394 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 Smooth Fractal Image
override string[] DefaultArgumentNames
TODO
override IElement Evaluate(IElement[] Arguments, Variables Variables)
TODO
static FractalGraph CalcMandelbrot(double rCenter, double iCenter, double rDelta, SKColor[] Palette, int Width, int Height, ScriptNode Node, Variables Variables, FractalZoomScript FractalZoomScript, object State)
TODO
MandelbrotSmoothFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, int Start, int Length, Expression Expression)
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
MandelbrotSmoothFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, ScriptNode DimY, int Start, int Length, Expression Expression)
TODO
override string FunctionName
TODO
MandelbrotSmoothFractal(ScriptNode z, ScriptNode f, ScriptNode dr, ScriptNode Palette, int Start, int Length, Expression Expression)
TODO
MandelbrotSmoothFractal(ScriptNode z, ScriptNode f, ScriptNode dr, 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.
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 Preview(Expression Expression, IElement Result)
Reports a preview of the final result.
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.