42 : base(new
ScriptNode[] { z, c, dr, Palette, DimX, DimY },
53 : base(new
ScriptNode[] { z, c, dr, Palette, DimX },
85 return new string[] {
"z",
"c",
"dr",
"Palette",
"DimX",
"DimY" };
94 string ColorExpression =
null;
108 Obj =
Arguments[i++].AssociatedObjectValue;
109 if (Obj is Complex z)
124 Obj =
Arguments[i++].AssociatedObjectValue;
128 throw new ScriptRuntimeException(
"Lambda expression in calls to JuliaSmoothFractal() must be of one variable.",
this);
132 fDef = this.Arguments[i - 1];
134 else if (Obj is Complex z2)
157 ColorExpression = this.Arguments[i].SubExpression;
162 Palette = ColorModels.RandomLinearAnalogousHSL.CreatePalette(1024, 16, out
int Seed,
this,
Variables);
163 ColorExpression =
"RandomLinearAnalogousHSL(1024,16," + Seed.ToString() +
")";
165 if (i < c && this.Arguments[i] is
null)
181 throw new ScriptRuntimeException(
"Parameter mismatch in call to JuliaSmoothFractal(z,c|f,dr[,Palette][,dimx[,dimy]]).",
185 if (dimx <= 0 || dimx > 5000 || dimy <= 0 || dimy > 5000)
191 this.FractalZoomScript,
new object[] { Palette, dimx, dimy, r0, i0, ColorExpression, fDef });
195 return CalcJulia(rc, ic, r0, i0, dr, Palette, dimx, dimy,
this,
Variables,
196 this.FractalZoomScript,
new object[] { Palette, dimx, dimy, r0, i0, ColorExpression, fDef });
200 private string FractalZoomScript(
double r,
double i,
double Size,
object State)
202 object[] Parameters = (
object[])State;
203 int DimX = (int)Parameters[1];
204 int DimY = (int)Parameters[2];
205 double r0 = (double)Parameters[3];
206 double i0 = (double)Parameters[4];
207 string ColorExpression = (string)Parameters[5];
210 StringBuilder sb =
new StringBuilder();
212 sb.Append(
"JuliaSmoothFractal((");
232 if (!
string.IsNullOrEmpty(ColorExpression))
235 sb.Append(ColorExpression);
239 sb.Append(DimX.ToString());
241 sb.Append(DimY.ToString());
244 return sb.ToString();
252 FractalZoomScript FractalZoomScript,
object State)
254 double r0, i0, r1, i1;
257 double zr, zi, zrt, zr2, zi2;
266 r0 = rCenter - rDelta;
267 r1 = rCenter + rDelta;
269 aspect = ((double)Width) / Height;
271 i0 = iCenter - rDelta / aspect;
272 i1 = iCenter + rDelta / aspect;
274 dr = (r1 - r0) / Width;
275 di = (i1 - i0) / Height;
277 int Size = Width * Height;
278 double[] ColorIndex =
new double[Size];
280 for (y = 0, i = i0, index = 0; y < Height; y++, i += di)
282 for (x = 0, r = r0; x < Width; x++, r += dr)
291 while (zr2 + zi2 < 9 && n < N)
294 zrt = zr2 - zi2 + R0;
295 zi = 2 * zr * zi + I0;
303 ColorIndex[index++]=N;
305 ColorIndex[index++]=n;
322 double rDelta, SKColor[] Palette,
int Width,
int Height,
ScriptNode Node,
325 double r0, i0, r1, i1;
335 r0 = rCenter - rDelta;
336 r1 = rCenter + rDelta;
338 aspect = ((double)Width) / Height;
340 i0 = iCenter - rDelta / aspect;
341 i1 = iCenter + rDelta / aspect;
343 dr = (r1 - r0) / Width;
344 di = (i1 - i0) / Height;
346 int Size = Width * Height;
347 double[] ColorIndex =
new double[Size];
354 for (y = 0, i = i0; y < Height; y++, i += di)
356 Complex[] Row =
new Complex[Width];
357 int[] Offset =
new int[Width];
360 for (x = 0, x2 = y * Width, r = r0; x < Width; x++, r += dr, x2++)
362 Row[x] =
new Complex(r, i);
367 while (n < N && c > 0)
372 Row = Obj.AssociatedObjectValue as Complex[];
377 "and return complex vectors of equal length. Type returned: " +
378 Obj.GetType().FullName, Node);
380 else if (Row.Length != c)
383 "and return complex vectors of equal length. Length returned: " +
384 Row.Length.ToString() +
". Expected: " + c.ToString(), Node);
387 for (x = x2 = 0; x < c; x++)
410 Array.Resize(ref Row, x2);
411 Array.Resize(ref Offset, x2);
418 for (x = 0; x < c; x++)
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 Julia set Fractal Image
JuliaSmoothFractal(ScriptNode z, ScriptNode c, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, ScriptNode DimY, int Start, int Length, Expression Expression)
TODO
static FractalGraph CalcJulia(double rCenter, double iCenter, ILambdaExpression f, double rDelta, SKColor[] Palette, int Width, int Height, ScriptNode Node, Variables Variables, FractalZoomScript FractalZoomScript, object State)
TODO
override string[] DefaultArgumentNames
TODO
static FractalGraph CalcJulia(double rCenter, double iCenter, double R0, double I0, double rDelta, SKColor[] Palette, int Width, int Height, ScriptNode Node, Variables Variables, FractalZoomScript FractalZoomScript, object State)
TODO
override IElement Evaluate(IElement[] Arguments, Variables Variables)
TODO
override string FunctionName
TODO
JuliaSmoothFractal(ScriptNode z, ScriptNode c, ScriptNode dr, int Start, int Length, Expression Expression)
TODO
JuliaSmoothFractal(ScriptNode z, ScriptNode c, ScriptNode dr, ScriptNode Palette, ScriptNode DimX, int Start, int Length, Expression Expression)
TODO
JuliaSmoothFractal(ScriptNode z, ScriptNode c, ScriptNode dr, ScriptNode Palette, 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.
Basic interface for all types of elements.
Base interface for lambda expressions.
IElement Evaluate(IElement[] Arguments, Variables Variables)
Evaluates the lambda expression.
int NrArguments
Number of arguments.
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.