37 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX, DimY },
49 : base(new
ScriptNode[] { r, i, dr, R, p, Palette, DimX },
61 : base(new
ScriptNode[] { r, i, dr, R, p, Palette },
87 return new string[] {
"r",
"i",
"dr",
"R",
"p",
"Palette",
"DimX",
"DimY" };
96 string ColorExpression =
null;
101 double Rr, Ri, pr, pi;
109 if ((Obj =
Arguments[3].AssociatedObjectValue) is Complex)
111 Complex z = (Complex)Obj;
121 if ((Obj =
Arguments[4].AssociatedObjectValue) is Complex)
123 Complex z = (Complex)Obj;
138 ColorExpression = this.Arguments[i].SubExpression;
143 Palette = ColorModels.RandomLinearAnalogousHSL.CreatePalette(128, 4, out
int Seed,
this,
Variables);
144 ColorExpression =
"RandomLinearAnalogousHSL(128,4," + Seed.ToString() +
")";
146 if (i < c && this.Arguments[i] is
null)
162 throw new ScriptRuntimeException(
"Parameter mismatch in call to NovaTopographyFractal(r,c,dr,Coefficients[,Palette][,dimx[,dimy]]).",
166 if (dimx <= 0 || dimx > 5000 || dimy <= 0 || dimy > 5000)
169 return CalcNova(
Variables, rc, ic, dr, Rr, Ri, pr, pi, Palette, dimx, dimy,
this, this.FractalZoomScript,
170 new object[] { Palette, dimx, dimy, Rr, Ri, pr, pi, ColorExpression });
173 private string FractalZoomScript(
double r,
double i,
double Size,
object State)
175 object[] Parameters = (
object[])State;
176 int DimX = (int)Parameters[1];
177 int DimY = (int)Parameters[2];
178 double Rr = (double)Parameters[3];
179 double Ri = (double)Parameters[4];
180 double pr = (double)Parameters[5];
181 double pi = (double)Parameters[6];
182 string ColorExpression = (string)Parameters[7];
184 StringBuilder sb =
new StringBuilder();
186 sb.Append(
"NovaTopographyFractal(");
212 if (!
string.IsNullOrEmpty(ColorExpression))
215 sb.Append(ColorExpression);
219 sb.Append(DimX.ToString());
221 sb.Append(DimY.ToString());
224 return sb.ToString();
231 double pr,
double pi, SKColor[] Palette,
int Width,
int Height,
ScriptNode Node, FractalZoomScript FractalZoomScript,
object State)
233 double r0, i0, r1, i1;
236 double zr, zi, zr2, zi2, zr3, zi3, zr4, zi4;
250 r0 = rCenter - rDelta;
251 r1 = rCenter + rDelta;
253 aspect = ((double)Width) / Height;
255 i0 = iCenter - rDelta / aspect;
256 i1 = iCenter + rDelta / aspect;
258 dr = (r1 - r0) / Width;
259 di = (i1 - i0) / Height;
261 int Size = Width * Height;
262 int[] ColorIndex =
new int[Size];
266 for (y = 0, i = i0, index = 0; y < Height; y++, i += di)
268 for (x = 0, r = r0; x < Width; x++, r += dr)
284 lnz = Math.Log(Math.Sqrt(zr * zr + zi * zi));
285 argz = Math.Atan2(zi, zr);
286 amp = Math.Exp(pr * lnz - pi * argz);
287 phi = pi * lnz + pr * argz;
289 zr2 = amp * Math.Cos(phi) - 1;
290 zi2 = amp * Math.Sin(phi);
297 amp = Math.Exp((pr - 1) * lnz - pi * argz);
298 phi = pi * lnz + (pr - 1) * argz;
300 zr3 = amp * Math.Cos(phi);
301 zi3 = amp * Math.Sin(phi);
303 Temp = pr * zr3 - pi * zi3;
304 zi3 = pr * zi3 + pi * zr3;
309 Temp = 1.0 / (zr3 * zr3 + zi3 * zi3);
310 zr4 = (zr2 * zr3 + zi2 * zi3) * Temp;
311 zi4 = (zi2 * zr3 - zr2 * zi3) * Temp;
313 Temp = Rr * zr4 - Ri * zi4;
314 zi4 = Ri * zr4 + Rr * zi4;
320 Temp = Math.Sqrt(zr4 * zr4 + zi4 * zi4);
322 while ((Temp > Conv) && (Temp < Div) && (n++ < N));
324 if (Temp < Conv && n < N)
325 ColorIndex[index++] = n;
327 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 Topography Fractal Image
override string FunctionName
TODO
NovaTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, int Start, int Length, Expression Expression)
TODO
NovaTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, ScriptNode DimX, int Start, int Length, Expression Expression)
TODO
NovaTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, int Start, int Length, Expression Expression)
TODO
static FractalGraph CalcNova(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
override string[] DefaultArgumentNames
TODO
NovaTopographyFractal(ScriptNode r, ScriptNode i, ScriptNode dr, ScriptNode R, ScriptNode p, ScriptNode Palette, ScriptNode DimX, ScriptNode DimY, int Start, int Length, Expression Expression)
TODO
override IElement Evaluate(IElement[] Arguments, Variables Variables)
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.