Welcome to Fractal Forums

Community => Let's collaborate on something! => Topic started by: cKleinhuis on March 26, 2008, 01:23:44 AM




Title: basic script/makro language?
Post by: cKleinhuis on March 26, 2008, 01:23:44 AM
 ::)

i am developing a little makro language for generating scripts within mutatorkammer, this is how far i am now:

Basic language:

@MAKRO = XX|YY... ==  XX|YY...

= Makro will be replaced with XX or YY or whatever, any length of alternations is possible
== is the final statement it means if MAKRO is in last iteration visible - use that, same syntax as for =

Uses The makro with %MAKRONAME%

built in functions:

randomTree(DEPTH)
generates a random Formul Tree of depth DEPTH

randomVal(min[max])
Creates a random value in between max and min


The Above is actually implemented, and i am using the following script as a global include:

 O0 O0 O0
Code:
@MK_SKRIPT
COMMENT AREA
@MK_MAKROS
@ZERO = 0
@ONE    = 1
@PI=#3.14159265358979323846264338327950288
@E=#2.71828182845904523536028747135266249
@SQROOT2=#1.41421356237309504880168872420969807
@SQROOT3=#1.73205080756887729352744634150587236
@EMASCH=#0.57721566490153286060651209008240243
@GOLDENRATIO=#1.61803398874989484820458683436563811
@PLASTIC=#1.32471795724474602596090885447809734
@EMBREE= #0.70258
@FEIGENBAUM1= #4.66920160910299067185320382046620161
@FEIGENBAUM2= #2.50290787509589282228390287321821578
@HUGHES= #0.050989
@MEISSELMERTENS= #0.26149721284764278375542683860869585
@CATALAN=#0.91596559417721901505460351493238411
@LANDAU= #0.76422365358922066299069873125009232
@VISWANATH= #1.13198824
@RAMAJUNSOLDNER= #1.45136923488338105028396848589202744
@IMAGINARY=#0#1

@RANDOMCONSTANT=%PI%|%E%|%SQRROOT2%|%SQRROOT3%|%EMASH%|%GOLDENRATIO%|%PLASTIC%|%EMBREE%|%FEIGENBAUM1%|%FEIGENBAUM2%|%HUGHES%|%MEISSELMERTENS%|%|%CATALAN%|%LANDAU%|%VISWANATH%|%RAMAJUNSOLDNER% |%IMAGINARY%


@TRIGONOMETRIC=SIN|COS|TAN|SEC|COSEC|COTAN
@INVERSETRIGONOMETRIC=ASIN|ACOS|ATAN|ASEC|ACOSEC|ACOTAN
@HYPERBVOLIC=SINH|COSH|TANH|SECH|COSECH|COTANH
@INVERSEHYPERBVOLIC=ASINH|ACOSH|ATANH|ASECH|ACOSECH|ACOTANH

@VARIABLE= $PIXEL|$SCREEN|$A|$B|$T|$C|$Z|$LASTZ|$W|$V|$ITERATION
@VARIABLECONST=$PIXEL|$SCREEN|$T|$LASTZ|$ITERATION|$V|$W
@VARIABLE=$A|$B|$C

@FUNCTION1= SIN|COS|FRAC|CELL|POW|EXP|RECIP|POLAR|CARTESIAN|ABS|NEG|REAL|IMAG|ASIN|ACOS|COSH|CONJ|ROUND|SINH|TAN|TANH|ATAN|NORM|LN|LOG10|SWAP|VECABS|SQRT|FLOOR|CEIL|SETW|SETV|FLAME_CROSS|IMAGE|SINUSOIDIAL|SPHERICAL|SWIRL|HORSESHOE|POLAROID|HANDKERCHIEF|HEART|ASINH|ACOSH|COTAN|COTANH|ACOTAN|ACOTANH|SEC|COSEC|ASEC|ACOSEC|SECH|COSECH|ASECH|ACOSECH|DIST_DIAMOND|DISC|TILE|SPIRAL|CYLINDER|HYPERBOLIC|DIAMOND|EX|FISHEYE|MAPTORGB|BENT|SQUARE|PERLIN|TURBULENCE
@FUNCTION2=MOD|MUL|VECMUL|ADD|XOR|AND|OR|PERSPECTIVE|SUB|PARABOLA|RINGS|PERLIN|TURBULENCE|BUBBLE|FLOWER|DIV|DOT|POW|AVG|MAX|MAXABS|MAXIMAG|MIN|FAN|MINIMAG|MINABS|SETW2|APFEL|BARNSLEY1|BARNSLEY2|ITERATE|LAMBDA|POPCORN
@FUNCTION3=PERLIN|TURBULENCE|VECTOR3|CLAMP|CURL|PDJ|MAPTORGB2|MAGNET1|MAGNET2|APFEL|BARNSLEY3|SPIDER|MANOWAR|HALLEY|LERP|WAVE|NEWTON|SUPER
@FUNCTION4=PHOENIX|IFLO|IFLOIMAG|IFLOABS|AFFIN|NOVA

@FRACTAL2=APFEL|BARNSLEY1|BARNSLEY2|ITERATE|LAMBDA
@FRACTAL3=  MAGNET1|MAGNET2|APFEL|BARNSLEY3|SPIDER|MANOWAR|HALLEY|NEWTON
@FRACTAL4=  PHOENIX|NOVA






a script may then look like this:
 8) 8) 8)
Code:

@MK_SKRIPT
@MK_MAKROS
@MAKRO1=$PIXEL
@MK_STARTSTRING
%FUNCTION2%(%MAKRO1%,randomvar(-2,2))


 i would like you to post any thoughts and suggestions what you think about it,  any suggestions, ideas and for sure a mathematical constant i missed so far  :police:


 O0


btw: did did you know that EACH function in the declarations above are currently build in into mutatorkammer v0.69x ?
 


Title: Re: basic script/makro language?
Post by: Sockratease on March 26, 2008, 10:50:22 AM
I like the idea of defining a range for values in a randomize command.  That will be useful, for sure.

I've never used a script in a fractal generator before, so it should prove interesting.

You listed functions I am unfamiliar with, so I'm not likely to have more to suggest, but if I think of any I'll post them!


Title: Re: basic script/makro language?
Post by: cKleinhuis on March 26, 2008, 11:16:33 AM
i think i will add another option:

@MAKRO(par1,par2,...) = X(par1)X(par2)|Y(par1)Y... ==  XX|YY...

so, adding a parameter object to makros  :D


Title: Re: basic script/makro language?
Post by: cKleinhuis on March 27, 2008, 02:44:59 AM
 :gum:oh my god, this is becoming huge :D

skript language functions:

Code:
randomtree ( depth )
randomval( min,max )
New Added
Code:
breed(FORMULASTRING) -breeds FORMULASTRING with current breed window parameter settings 
crossover(FORMULASTRING,FORMULASTRING2) - crossover FORMULASTRING with FORMULASTRING2 with current breed window parameter settings
variate(FORMULASTRING) - variates with current breed window parameter settings
eval(FORMULASTRING) - evaluates to a complex number ( constant #r#i )

Macro Definition:

MAKROS can have parameters and propabilities ( cstyle and overloading ;) )


Title: Re: basic script/makro language?
Post by: cKleinhuis on March 27, 2008, 04:37:09 AM
one example run:
Code:
// script 3
@MK_SKRIPT
@MK_MAKROS
@MAKRO1=ADD(randomtree(2),%FUNCTION2%(%VARI%,%MAKRO1%))|%MAKRO2%==$PIXEL

@MAKRO2=%FUNCTION1%(%MAKRO3%)==$PIXEL
@MAKRO3=%FRACTAL2%(%MAKRO1%,%MAKRO3%)|%VARI%=$PIXEL
@VARI=$PIXEL|$A|$B|$C|randomval(-2,2)
@MK_STARTSTRING
%MAKRO1%

ONE RESULT:
(compatible witrh current MK but renders slow with current version ... )
Code:
ADD(ASEC(ABS(VECMUL(#2.000000#2.000000,$PIXEL))),OR($B,ADD(ASEC(ABS(VECMUL(#2.000000#2.000000,$PIXEL))),MIN($C,ADD(ASEC(ABS(VECMUL(#2.000000#2.000000,$PIXEL))),PERLIN(VECMUL(#2.000000#2.000000,$PIXEL),ADD(ASEC(ABS(VECMUL(#2.000000#2.000000,$PIXEL))),FLOWER($C,ATAN(#0)))))))))

and some sample renderings of that formula:



Title: Re: basic script/makro language?
Post by: lycium on March 27, 2008, 07:57:34 AM
that 2nd pic looks cool with the nice blue glow, good job!  O0