comment { Coloring methods by Andreas Lober Last update on October 01, 2001 # Last update on October 22, 2000 For the latest version of this file go to: http://formulas.fractalus.com/ 9 Colouring methods by Andreas Lober based on the Bezier Curve by Kerry Mitchell (lkm.ucl) with further ideas from Mark Townsend's files and examples. Additional hints and inspirations by Michèle Dessureault and Damien Jones. A big Thank You to Michèle Dessureault, Ruth Antwine, Emily Garlick (Queri), Richard Molnar, and Peter Kubik, who accompanied me during the development of these 9 curves as beta testers: "Hevia meets Bezier" "Hevier Curve" "Hevier, Dist. Meth." "Lissajous and others" "Lissa's Juice" "Lissa's Juice, Dist. Method" "Hevia Polygon" "Hevigon" "Hevigon, Dist. Method" -> still has to be written Another big Thank You to Karen Trottier and Emily Garlick (Queri) for their encouraging emails. Update on March 21, 2000: * more Joukowskij parameters Update on March 17, 2000: * "Hevia Polygon", "Hevigon", "Hevigon, Dist. Method" added (also based on the Bezier Curve) * all colouring methods based on the Bezier Curve got a Joukowskij constant } some_other_traps { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; ; Hints: ; ; 1. Lattice "floor" or "ceil" ; and Distance Function "recip" ; ; init: ; complex _fd_dist float _dist = 0 ; float _ft_dist = 0 float _tdist = 0 bool _do_trap = true float _trap = 0.01 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @i_randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = #z + @i_randomness * #random endif; ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif complex _fd_dist = @fkt_d(zStart)-@fkt_d(#pixel) _dist = cabs(_fd_dist) complex _ft_dist = @fkt_1(zStart)-@fkt_2(#pixel) _tdist = cabs(_ft_dist) if _do_trap && @_trap_min < _tdist && _tdist < @_trap_max _do_trap = false _trap =_dist endif final: #index = _trap + @f_randomness * real(#random) default: title = "Some traps with functions" param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt_d caption = "Distance Function" default = exp() endfunc func fkt_1 caption = "Trap Function 1" default = ident() endfunc func fkt_2 caption = "Trap Function 2" default = ident() endfunc } ; some_other_traps weierstrass_p_func { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; complex temp = (-1,0) ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex _zz = #z ; init _zz int iter = 0 complex zStart = 0 loop: zStart = #z ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _zz = zStart iter = iter+1 ; ; transformation ; int lat_real = 0 int lat_imag = 0 complex lat_comp_pp = 0 complex lat_comp_pn = 0 complex lat_comp_np = 0 complex lat_comp_nn = 0 complex W_Fkt_z = 0 if (_zz == 0) W_Fkt_z = 0 else if (@Weierstrass == 0) ; P-Function W_Fkt_z = 1/_zz^2 elseif (@Weierstrass == 1) ; Zeta-Function W_Fkt_z = 1/_zz elseif (@Weierstrass == 2) ; Sigma-Function W_Fkt_z = _zz endif endif ; ; Calculate the P-Function ; while (lat_real <= iter) while (lat_imag <= iter) ; ; Calculate all 4 directions in the lattice ; lat_comp_pp = lat_real*@vector1 + lat_imag*@vector2 lat_comp_pn = lat_real*@vector1 - lat_imag*@vector2 lat_comp_np = -lat_real*@vector1 + lat_imag*@vector2 lat_comp_np = -lat_real*@vector1 - lat_imag*@vector2 if (lat_comp_pp != 0 && (_zz != lat_comp_pp || @Weierstrass == 2)) if (@Weierstrass == 0) ; P-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_pp)^2 - 1/lat_comp_pp^2 elseif (@Weierstrass == 1) ; Zeta-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_pp) + 1/lat_comp_pp \ + _zz/lat_comp_pp^2 elseif (@Weierstrass == 2) ; Sigma-Function W_Fkt_z = W_Fkt_z * (1-_zz/lat_comp_pp) \ * exp(_zz/lat_comp_pp + 0.5*(_zz/lat_comp_pp)^2) endif endif if (lat_comp_pn != 0 && (_zz != lat_comp_pn || @Weierstrass == 2)) if (@Weierstrass == 0) ; P-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_pn)^2 - 1/lat_comp_pn^2 elseif (@Weierstrass == 1) ; Zeta-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_pn) + 1/lat_comp_pn \ + _zz/lat_comp_pn^2 elseif (@Weierstrass == 2) ; Sigma-Function W_Fkt_z = W_Fkt_z * (1-_zz/lat_comp_pn) \ * exp(_zz/lat_comp_pn + 0.5*(_zz/lat_comp_pn)^2) endif endif if (lat_comp_np != 0 && (_zz != lat_comp_np || @Weierstrass == 2)) if (@Weierstrass == 0) ; P-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_np)^2 - 1/lat_comp_np^2 elseif (@Weierstrass == 1) ; Zeta-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_np) + 1/lat_comp_np \ + _zz/lat_comp_np^2 elseif (@Weierstrass == 2) ; Sigma-Function W_Fkt_z = W_Fkt_z * (1-_zz/lat_comp_np) \ * exp(_zz/lat_comp_np + 0.5*(_zz/lat_comp_np)^2) endif endif if (lat_comp_nn != 0 && (_zz != lat_comp_nn || @Weierstrass == 2)) if (@Weierstrass == 0) ; P-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_nn)^2 - 1/lat_comp_nn^2 elseif (@Weierstrass == 1) ; Zeta-Function W_Fkt_z = W_Fkt_z + 1/(_zz-lat_comp_nn) + 1/lat_comp_nn \ + _zz/lat_comp_nn^2 elseif (@Weierstrass == 2) ; Sigma-Function W_Fkt_z = W_Fkt_z * (1-_zz/lat_comp_nn) \ * exp(_zz/lat_comp_nn + 0.5*(_zz/lat_comp_nn)^2) endif endif lat_imag = lat_imag+1 endwhile ; lat_imag <= iter lat_real = lat_real+1 endwhile ; lat_real <= iter if (@pure) _zz = W_Fkt_z^@exponent else _zz = W_Fkt_z^@exponent + #pixel endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Three Weierstrass Functions Colouring" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param Weierstrass caption = "Weierstrass Function" enum = "P-Function" "Zeta-Function" "Sigma-Function" endparam param exponent caption= "Exponent for P" default=1.0 endparam param vector1 caption= "Lattice Vector 1" default=(1,0) endparam param vector2 caption= "Lattice Vector 2" default=(0,1) endparam param pure caption= "Pure Weierstrass" default=TRUE endparam func fkt caption = "Additional Function" default = ident() endfunc param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam } ; weierstrass_p_func riemann_zeta_func { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; complex temp = (-1,0) ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 int iter = 0 complex zStart = 0 complex _zz = #z ; init _zz loop: zStart = #z ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _zz = zStart iter = iter+1 ; ; transformation ; int n = 1 complex R_Fkt_z = 0 ; ; Calculate the Riemann Zeta-Function ; while (n <= iter) R_Fkt_z = R_Fkt_z + 1/n^_zz n = n+1 endwhile ; n <= iter if (@pure) _zz = R_Fkt_z^@exponent else _zz = R_Fkt_z^@exponent + #pixel endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Riemann Zeta Function Colouring" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param exponent caption= "Exponent for R-Zeta" default=1.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam func fkt caption = "Additional Function" default = ident() endfunc param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam } ; riemann_zeta_func joukowskij_func { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex _zz = #z ; init _zz complex zStart = 0 loop: zStart = #z ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif complex J_Fkt_z = (zStart + @epsilon/zStart)/2 if (@pure) _zz = J_Fkt_z^@exponent else _zz = J_Fkt_z^@exponent + #pixel endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Joukowskij Function Colouring" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param exponent caption= "Exponent for J" default=1.0 endparam param epsilon caption= "Epsilon, Coeff. for 1/z" default=1.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam func fkt caption = "Additional Function" default = ident() endfunc param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam } ; joukowskij_func agm { init: complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 int iter = 0 bool do_loop = TRUE loop: if (do_loop) iter = iter +1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom ; stop the loop if (|@fkt(ar)-@fkt(ge)| < @epsilon/@granulation || \ iter > @maxIter*@granulation) do_loop = FALSE endif endif final: #index = real(@trf(iter/@granulation)) + @randomness * real(#random) default: title = "AGM #1 (Arithm. Geom. Mean)" param epsilon caption = "epsilon" default = 0.001 min = 0.0 endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 60 min = 1 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Test Function" default = ident() endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm agm2 { init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 complex _zz = #pixel int iter = 0 bool do_loop = TRUE loop: if (do_loop) iter = iter +1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom ; stop the loop if (|@fkt(ar)-@fkt(ge)| < @epsilon/@granulation || \ iter > @maxIter*@granulation) do_loop = FALSE endif if (_zz != 0) _zz = _zz^iter + 1/_zz ; endif if (@pure) _zz = _zz + #pixel endif endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@trf(temp)) + @randomness * real(#random) default: title = "AGM #2 (Arithm. Geom. Mean)" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param epsilon caption = "epsilon" default = 0.1 min = 0.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 200 min = 1 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Additional Function" default = recip() endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm2 agm3 { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 complex _zz = #pixel int iter = 0 bool do_loop = TRUE complex zStart = 0 loop: zStart = #z ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _zz = zStart if (do_loop) iter = iter +1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom ; stop the loop if (|@fkt(ar)-@fkt(ge)| < @epsilon/@granulation || \ iter > @maxIter*@granulation) do_loop = FALSE endif if (_zz != 0) _zz = _zz^iter + 1/_zz ; endif if (@pure) _zz = _zz + #pixel endif endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@trf(temp)) + @randomness * real(#random) default: title = "AGM #3 (Arithm. Geom. Mean)" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param epsilon caption = "epsilon" default = 0.1 min = 0.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 200 min = 1 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Additional Function" default = recip() endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm3 agm4 { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 complex _zz = #pixel int iter = 0 bool do_loop = TRUE loop: zStart = #pixel ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif ar = |real(@fn1(zStart))| ge = |imag(@fn2(zStart))| _zz = zStart if (do_loop) iter = iter + 1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom ; stop the loop if (|@fkt(ar)-@fkt(ge)| < @epsilon/@granulation || \ iter > @maxIter*@granulation) do_loop = FALSE endif if (_zz != 0) _zz = _zz^iter + 1/_zz ; endif if (@pure) _zz = _zz + #pixel endif endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@trf(temp)) + @randomness * real(#random) default: title = "AGM #4 (Arithm. Geom. Mean)" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param epsilon caption = "epsilon" default = 0.1 min = 0.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 200 min = 1 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Additional Function" default = recip() endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm4 agm5 { ; ; Rev.: Feb. 15, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 complex _zz = #pixel int iter = 0 loop: zStart = #pixel ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif ar = |real(@fn1(zStart))| ge = |imag(@fn2(zStart))| _zz = zStart iter = 0 while (|@fkt(ar)-@fkt(ge)| > @epsilon/@granulation && \ iter < @maxIter*@granulation) iter = iter + 1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom endwhile ; ; Calculate distances ; if (@iterMode == 0) ; Sum _dist = cabs(_zz - #z) + iter _rd = real(_zz - #z) + iter _id = imag(_zz - #z) + iter elseif (@iterMode == 1) ; Difference _dist = cabs(_zz - #z) - iter _rd = real(_zz - #z) - iter _id = imag(_zz - #z) - iter elseif (@iterMode == 2) ; Product _dist = cabs(_zz - #z) * iter _rd = real(_zz - #z) * iter _id = imag(_zz - #z) * iter elseif (@iterMode == 3) ; Quotient _dist = cabs(_zz - #z) / iter _rd = real(_zz - #z) / iter _id = imag(_zz - #z) / iter elseif (@iterMode == 4) ; Exponent _dist = cabs(_zz - #z)^iter _rd = real(_zz - #z)^iter _id = imag(_zz - #z)^iter elseif (@iterMode == 5) ; i-Sum _dist = cabs(_zz - #z + iter) _rd = real(_zz - #z + iter) _id = imag(_zz - #z + iter) elseif (@iterMode == 6) ; i-Difference _dist = cabs(_zz - #z - iter) _rd = real(_zz - #z - iter) _id = imag(_zz - #z - iter) elseif (@iterMode == 7) ; i-Product _dist = cabs(_zz*iter - #z) _rd = real(_zz*iter - #z) _id = imag(_zz*iter - #z) elseif (@iterMode == 8) ; i-Quotient _dist = cabs(_zz/iter - #z) _rd = real(_zz/iter - #z) _id = imag(_zz/iter - #z) elseif (@iterMode == 9) ; i-Exponent _dist = cabs(_zz^iter - #z) _rd = real(_zz^iter - #z) _id = imag(_zz^iter - #z) endif _dist = _dist*@granulation _rd = _rd*@granulation _id = _id*@granulation _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@trf(temp)) + @randomness * real(#random) default: title = "AGM #5 (Arithm. Geom. Mean)" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param iterMode caption = "Iter. Mode" enum = "Sum" "Difference" "Product" "Quotient" "Exponent" \ "i-Sum" "i-Difference" "i-Product" "i-Quotient" "i-Exponent" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param epsilon caption = "epsilon" default = 0.1 min = 0.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 200 min = 1 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Additional Function" default = recip() hint = "Useful are recip() sqrt() log()" endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm5 agm6 { ; ; Rev.: Feb. 15, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex ar = |real(@fn1(#pixel))| complex ge = |imag(@fn2(#pixel))| complex arit = 0 complex geom = 0 complex _zz = #pixel complex old_zz = 0 int iter = 0 loop: zStart = #pixel ; init zStart old_zz = _zz ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif ar = |real(@fn1(zStart))| ge = |imag(@fn2(old_zz))| _zz = zStart iter = 0 while (|@fkt(ar)-@fkt(ge)| > @epsilon/@granulation && \ iter < @maxIter*@granulation) iter = iter + 1 ; Calculate new values of arithmetical ; and geometrical mean arit = (ar+ge)/2.0 geom = sqrt(ar*ge) ; give these values back ; for the next loop-run ar = arit ge = geom endwhile ; ; Calculate distances ; if (@iterMode == 0) ; Sum _dist = cabs(_zz - #z) + iter _rd = real(_zz - #z) + iter _id = imag(_zz - #z) + iter elseif (@iterMode == 1) ; Difference _dist = cabs(_zz - #z) - iter _rd = real(_zz - #z) - iter _id = imag(_zz - #z) - iter elseif (@iterMode == 2) ; Product _dist = cabs(_zz - #z) * iter _rd = real(_zz - #z) * iter _id = imag(_zz - #z) * iter elseif (@iterMode == 3) ; Quotient _dist = cabs(_zz - #z) / iter _rd = real(_zz - #z) / iter _id = imag(_zz - #z) / iter elseif (@iterMode == 4) ; Exponent _dist = cabs(_zz - #z)^iter _rd = real(_zz - #z)^iter _id = imag(_zz - #z)^iter _dist = cabs(_zz - #z)^iter _rd = real(_zz - #z)^iter _id = imag(_zz - #z)^iter elseif (@iterMode == 5) ; i-Sum _dist = cabs(_zz - #z + iter) _rd = real(_zz - #z + iter) _id = imag(_zz - #z + iter) elseif (@iterMode == 6) ; i-Difference _dist = cabs(_zz - #z - iter) _rd = real(_zz - #z - iter) _id = imag(_zz - #z - iter) elseif (@iterMode == 7) ; i-Product _dist = cabs(_zz*iter - #z) _rd = real(_zz*iter - #z) _id = imag(_zz*iter - #z) elseif (@iterMode == 8) ; i-Quotient _dist = cabs(_zz/iter - #z) _rd = real(_zz/iter - #z) _id = imag(_zz/iter - #z) elseif (@iterMode == 9) ; i-Exponent _dist = cabs(_zz^iter - #z) _rd = real(_zz^iter - #z) _id = imag(_zz^iter - #z) endif _dist = _dist*@granulation _rd = _rd*@granulation _id = _id*@granulation _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@trf(temp)) + @randomness * real(#random) default: title = "AGM #6 (Arithm. Geom. Mean)" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param iterMode caption = "Iter. Mode" enum = "Sum" "Difference" "Product" "Quotient" "Exponent" \ "i-Sum" "i-Difference" "i-Product" "i-Quotient" "i-Exponent" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param epsilon caption = "epsilon" default = 0.1 min = 0.0 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param granulation caption = "Granulation" default = 1.0 min = 0.0001 endparam param maxIter caption = "Maximum Iterations" default = 200 min = 1 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt caption = "Additional Function" default = recip() hint = "Useful are recip() sqrt() log()" endfunc func trf caption = "Transfer Function" default = ident() endfunc func fn1 caption = "Real Part Init Function" default = ident() endfunc func fn2 caption = "Imag Part Init Function" default = ident() endfunc } ; agm6 jouk_dalinsky_func { ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex _zz = #pixel + @epsilon/#pixel zc = atan(_zz/@sizesq)*@sizesq _zz = 2*(_zz + @epsilon/_zz- zc)/@sizesq complex zStart = 0 loop: zStart = _zz ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _zz = zStart if (@with_z_add) _zz = _zz + #z endif IF (imag(_zz)>0.5) _zz = 2*real(_zz) + 1i*(2*imag(_zz)-1) ELSEIF (real(_zz)>0.5) _zz = 2*real(_zz)-1 + 1i*(2*imag(_zz)) ELSEIF (real(_zz)< 0.1) _zz = 2*@fn1(_zz)-1 + 1i*(2*imag(_zz)) ELSE _zz = 2*@fn2(_zz) + 1i*(2*imag(_zz)) ENDIF if (@pure) _zz = _zz^@exponent + #pixel else _zz = _zz^@exponent endif ; ; Calculate distances ; _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Joukowskij-Dalinsky Colouring" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param exponent caption= "Exponent for JD" default=1.0 endparam param epsilon caption= "Epsilon, Coeff. for 1/z" default=0.0 endparam param sizesq caption = "Magnification" default = 0.5 endparam param pure caption= "With Pixel Addition" default=TRUE endparam param with_z_add caption= "With Z Addition" default=TRUE endparam func fn1 caption = "Function 1" default = sin() endfunc func fn2 caption = "Function 2" default = cos() endfunc func fkt caption = "Additional Function" default = recip() endfunc param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam } ; jouk_dalinsky_func elliptic_module_transform { ; The elliptic module group GAMMA1 ; ; / a b \ ; is made of all matrixes M = | | ; \ c d / ; ; with det M = 1 and a,b,c,d integer. ; ; It operates on the upper complex plane , i.e. real(z) > 0, ; ; via Mz = (az+b)/(cz+d) ; ; having N(Mz) = (MN)z ; ; / 1 1 \ / 0 -1 \ ; GAMMA1 is generated by | | and | | ; \ 0 1 / \ 1 0 / ; ; A A ; | | ; +- move to the | ; right by 1 | ; z -> z+1 | ; | ; +- Inversion z -> -1/z ; ; ; Freitag,Busam: Funktionentheorie (function theory) Chapter VI, Springer ; ; Rev.: Feb. 08, 2000: Pre-Lattice was built in ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex _zz = 0 ; init _zz float _xx = 0 float _yy = 0 complex zStart = 0 complex a = 0 complex b = 0 loop: zStart = #z ; init zStart _zz = 0 ; init _zz _xx = 0 _yy = 0 ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@withPreHarlequin) ; ; transformation ; if (@_preHarlPseudo) float _x = real(zStart) float _y = imag(zStart) if (@preHarlTwist != 2) a = 0 b = 0 endif if (@_preHarlPseudoMix) if (@_preHarlMixMode == 0) ; normal mix if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan(_x/_y) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan(_y/_x) endif elseif (@_preHarlMixMode == 1) ; diff mix if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan((_x-_y)/_y) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan((_y-_x)/_x) endif elseif (@_preHarlMixMode == 2) ; sum mix if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan((_x+_y)/_y) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan((_x+_y)/_x) endif elseif (@_preHarlMixMode == 3) ; prod mix if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan(_x^2/_y) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan(_y^2/_x) endif elseif (@_preHarlMixMode == 4) ; expo mix if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan(_x^_y/_y) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan(_y^_x/_x) endif endif else if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan(_y/_x) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan(_x/_y) endif endif else if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * atan(zStart) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * atan(conj(zStart)) endif endif if @variation1 == 0 if (@preHarlTwist == 0 || @preHarlTwist == 2) a = a * a + @c1 a = fn1(1 - a) / a endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = b * b + @c1 b = fn1(1 - b) / b endif elseif @variation1 == 1 if (@preHarlTwist == 0 || @preHarlTwist == 2) a = a * a + @c1 a = fn1(1 - a^2) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = b * b + @c1 b = fn1(1 - b^2) endif elseif @variation1 == 2 if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * fn1(a + @c1)^2 endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * fn1(b + @c1)^2 endif elseif (@variation1 == 3) if (@preHarlTwist == 0 || @preHarlTwist == 2) a = @m1 * fn1(1i*a + @c1)^2 / fn1(a - @c1) endif if (@preHarlTwist == 1 || @preHarlTwist == 2) b = @m1 * fn1(1i*b + @c1)^2 / fn1(a - @c1) endif endif ; ; Transfer from MT->AKL ; zStart = a + 1i*b endif ; withPreHarlequin ; ; transformation ; if (@_pseudo) float _x = real(zStart) float _y = imag(zStart) ; ; calculate the temp real _xx ; if (@_c * _x + @_d == 0) ; don't divide by 0!! _xx = @_a * _x + @_b else if (@_pseudoMix) if (@_mixMode == 0) ; normal mix _xx = (@_a * _y + @_b) / (@_c * _x + @_d) elseif (@_mixMode == 1) ; diff mix _xx = (@_a * (_x-_y)+ @_b) / (@_c * _x + @_d) elseif (@_mixMode == 2) ; sum mix _xx = (@_a * (_x+_y)+ @_b) / (@_c * _x + @_d) elseif (@_mixMode == 3) ; prod mix _xx = (@_a * (_x*_y)+ @_b) / (@_c * _x + @_d) elseif (@_mixMode == 4) ; prod mix _xx = (@_a * (_x^_y)+ @_b) / (@_c * _x + @_d) endif else _xx = (@_a * _x + @_b) / (@_c * _x + @_d) endif endif ; ; calculate the temp imag _yy ; if (@_c * _y + @_d == 0) ; don't divide by 0!! _yy = @_a * _y + @_b else if (@_pseudoMix) if (@_mixMode == 0) ; normal mix _yy = (@_a * _x + @_b) / (@_c * _y + @_d) elseif (@_mixMode == 1) ; diff mix _yy = (@_a * (_y-_x) + @_b) / (@_c * _y + @_d) elseif (@_mixMode == 2) ; sum mix _yy = (@_a * (_y+_x) + @_b) / (@_c * _y + @_d) elseif (@_mixMode == 3) ; prod mix _yy = (@_a * (_y*_x) + @_b) / (@_c * _y + @_d) elseif (@_mixMode == 4) ; prod mix _yy = (@_a * (_y^_x) + @_b) / (@_c * _y + @_d) endif else _yy = (@_a * _y + @_b) / (@_c * _y + @_d) endif endif _zz = real(@mixFkt_x(_xx)) + 1i*real(@mixFkt_y(_yy)) else if (@_c * zStart + @_d == 0) ; don't divide by 0!! _zz = @_a * zStart + @_b else _zz = (@_a * zStart + @_b) / (@_c * zStart + @_d) endif endif if (@withPostHarlequin) ; ; transformation ; if (@_postHarlPseudo) float _x = real(_zz) float _y = imag(_zz) if (@postHarlTwist != 2) a = 0 b = 0 endif if (@_postHarlPseudoMix) if (@_postHarlMixMode == 0) ; normal mix if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan(_x/_y) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan(_y/_x) endif elseif (@_postHarlMixMode == 1) ; diff mix if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan((_x-_y)/_y) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan((_y-_x)/_x) endif elseif (@_postHarlMixMode == 2) ; sum mix if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan((_x+_y)/_y) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan((_x+_y)/_x) endif elseif (@_postHarlMixMode == 3) ; prod mix if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan(_x^2/_y) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan(_y^2/_x) endif elseif (@_postHarlMixMode == 4) ; expo mix if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan(_x^_y/_y) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan(_y^_x/_x) endif endif else if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan(_y/_x) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan(_x/_y) endif endif else if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * atan(zStart) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * atan(conj(zStart)) endif endif if (@variation2 == 0) if (@postHarlTwist == 0 || @postHarlTwist == 2) a = a * a + @c2 a = fn2(1 - a) / a endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = b * b + @c2 b = fn2(1 - b) / b endif elseif (@variation2 == 1) if (@postHarlTwist == 0 || @postHarlTwist == 2) a = a * a + @c2 a = fn2(1 - a^2) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = b * b + @c2 b = fn2(1 - b^2) endif elseif (@variation2 == 2) if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * fn2(a + @c2)^2 endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * fn2(b + @c2)^2 endif elseif (@variation2 == 3) if (@postHarlTwist == 0 || @postHarlTwist == 2) a = @m2 * fn2(1i*a + @c2)^2 / fn2(a - @c2) endif if (@postHarlTwist == 1 || @postHarlTwist == 2) b = @m2 * fn2(1i*b + @c2)^2 / fn2(a - @c2) endif endif ; ; Transfer from MT->AKL ; _zz = a + 1i*b endif ; withPostHarlequin ; ; Calculate distances ; if (@with_zStart) _dist = cabs(_zz - zStart) _rd = real(_zz - zStart) _id = imag(_zz - zStart) else _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Elliptic Harlequin Colouring" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _a caption = "a, upper left coefficient" default = -1 endparam param _b caption = "b, upper right coefficient" default = -1 endparam param _c caption = "c, lower left coefficient" default = 1 endparam param _d caption = "d, lower right coefficient" default = 0 endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param _pseudo caption = "Pseudo Elliptic" default = false hint = "separate transforming real and imag" endparam param _pseudoMix caption = "Pseudo Mix Real and Imag" default = false hint = "only in use with Pseudo Elliptic" endparam param _mixMode caption = "Mix Mode for Pseudo Mix" enum = "Normal" "Difference" "Sum" "Product" "Exponent" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param withPreHarlequin caption = "Harlequin before Elliptic Y/N" default = false endparam param c1 caption = "Pre Harlequin Seed" default = (0,0) endparam param variation1 caption = "Pre Harl Variation" enum = "1" "2" "3" "4" default = 1 endparam param m1 caption = "Pre Harl Angle Multiplier" default = 2.0 endparam param _preHarlPseudo caption = "Pseudo Pre Harlequin" default = false hint = "separate transforming real and imag" endparam param _preHarlPseudoMix caption = "Pre Harl Pseudo Mix Real and Imag" default = false hint = "only in use with Pseudo Harlequin" endparam param _preHarlMixMode caption = "Pre Harl Mix Mode for Pseudo Mix" enum = "Normal" "Difference" "Sum" "Product" "Exponent" endparam param preHarlTwist caption = "Pre Harlequin Twist" enum = "Pure Real" "Pure Imag" "Mixed" default = 0 endparam param withPostHarlequin caption = "Harlequin after Elliptic Y/N" default = false endparam param c2 caption = "Post Harlequin Seed" default = (0,0) endparam param variation2 caption = "Post Harl Variation" enum = "1" "2" "3" "4" default = 1 endparam param m2 caption = "Post Harl Angle Multiplier" default = 2.0 endparam param _postHarlPseudo caption = "Pseudo Post Harlequin" default = false hint = "separate transforming real and imag" endparam param _postHarlPseudoMix caption = "Post Harl Pseudo Mix Real and Imag" default = false hint = "only in use with Pseudo Harlequin" endparam param _postHarlMixMode caption = "Post Harl Mix Mode for Pseudo Mix" enum = "Normal" "Difference" "Sum" "Product" "Exponent" endparam param postHarlTwist caption = "Post Harlequin Twist" enum = "Pure Real" "Pure Imag" "Mixed" default = 0 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func mixFkt_x caption = "PseudoMix x-Function" default = ident() endfunc func mixFkt_y caption = "PseudoMix y-Function" default = ident() endfunc func fn1 caption = "Pre Harlequin Function" hint = "This function is used in all variations. \ sqr() is best with Real/Imag on\ tan() is best with Real/Imag off" default = sqr() endfunc func fn2 caption = "Post Harlequin Function" hint = "This function is used in all variations. \ sqr() is best with Real/Imag on\ tan() is best with Real/Imag off" default = sqr() endfunc func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc } ; elliptic_module_transform mt+akl-gnarly_traps { ; ; Third attempt to play with Mark Townsend's ; formulas. ; ; ; This formula is based on mt-gnarly-traps ; Mark Townsend, Aug 27, 2000. ; ; Andreas Lober, Feb 09, 2000 ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex _zz = 0 complex zStart = 0 ; ; from MT ; w = 0 int iter = 0 float x = 0 float y = 0 float xx = 0 float average = 0 float frm_dist = 0 float min_w = 1e20 loop: zStart = #z ; init zStart ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif w = @fn1(zStart + @offset) x = real(w) * 1/@scale y = imag(w) * 1/@scale ; Iterate trap formula frm_iter = 0 average = 0 min_w = 1e20 while frm_iter < @max_iter xx = x if @formula == 0 ; Martin x = y - sin(x) y = @a - xx elseif @formula == 1 ; Popcorn x = x - @h * sin(y + tan(@a * y)) y = y - @h * sin(xx + tan(@a * xx)) elseif @formula == 2 ; Vine if @flavor == 0 x = x - @h * sin(y + sin(@a * y )) y = y + @h * sin(xx + sin(@a * xx)) elseif @flavor == 1 x = x - @h * sin(y^@b + sin(@a * y)) y = y + @h * sin(xx^@b + sin(@a * xx)) elseif @flavor == 2 x = x - @h * sin(y + sin(@a * (y + sin(@a * y)))) y = y + @h * sin(xx + sin(@a * (xx + sin(@a * xx)))) else float newx = y float newy = x int i = 0 while i < @flavor i = i + 1 newx = y + sin(@a * newx) newy = x + sin(@a * newy) endwhile x = x - @h * sin(newx) y = y + @h * sin(newy) endif elseif @formula == 3 ; Gnarl x = x - @h * real(@gn1(y + @gn2(@a * (y + @gn3(@b * y))))) y = y + @h * real(@gn1(xx + @gn2(@a * (xx + @gn3(@b * xx))))) endif w = @fn2(x + flip(y)) if @trap_mode == 0 || @trap_mode == 2 ; Closest & Average ; Choose the variable that we want to watch... if @frm_mode == 0 frm_dist = cabs(w) elseif @frm_mode == 1 frm_dist = cabs(w - zStart) elseif @frm_mode == 2 frm_dist = cabs(w - #pixel) elseif @frm_mode == 3 frm_dist = cabs(w - @offset) endif endif if @trap_mode == 0 ; Closest if frm_dist < min_w min_w = frm_dist endif elseif @trap_mode == 2 ; Average average = average + frm_dist endif frm_iter = frm_iter + 1 endwhile ; end of formula loop if @trap_mode == 3 ; Martin x = real(w) * 1/@mscale y = imag(w) * 1/@mscale ; Iterate the Martin formula i = 0 while i < @m_iterations xx = x x = y - sin(x) y = @m - xx i = i + 1 endwhile w = x + flip(y) endif if @trap_mode == 1 || @trap_mode == 3 ; Final & Martin ; Choose the variable that we want to watch... if @frm_mode == 0 min_w = cabs(w) elseif @frm_mode == 1 min_w = cabs(w - zStart) elseif @frm_mode == 2 min_w = cabs(w - #pixel) elseif @frm_mode == 3 min_w = cabs(w - @offset) endif elseif @trap_mode == 2 ; Average min_w = average / @max_iter endif ; ; Transfer from MT->AKL ; _zz = min_w ; ; Calculate distances ; if (@with_zStart) _dist = cabs(_zz - zStart) _rd = real(_zz - zStart) _id = imag(_zz - zStart) else _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif iter = iter +1 final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Gnarly Orbit Trap, Dist. Method" param formula caption = "Formula" enum = "Martin" "Popcorn" "Vine" "Gnarl" default = 1 endparam param trap_mode caption = "Trap Mode" enum = "Closest" "Final" "Average" "Martin" default = 1 endparam param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param frm_mode caption = "Variable" enum = "Magnitude" "Distance" "Pixel distance" "Offset distance" endparam param offset caption = "Offset" hint = "This is added to the value of z before the trap \ formula is iterated." endparam param scale caption = "Scale" hint = "This affects the size of the shapes." default = 0.5 min = 1e-20 endparam param a caption = "Alpha" hint = "This parameter is used for all of the formulas." default = 3.0 endparam param b caption = "Beta" hint = "This parameter is used only for Vine flavor 1 and Gnarl." default = 2.0 endparam param h caption = "Step size" hint = "This parameter usually affects the 'harshness' of the \ shapes." default = 0.05 min = 1e-20 endparam param flavor caption = "Vine flavor" hint = "This is the 'flavor' for the Vine formula." default = 2 min = 0 endparam param max_iter caption = "Iterations" hint = "This is the number of times to iterate the trap formula." default = 10 min = 1 endparam param m caption = "Martin parameter" hint = "This is the parameter for the Martin moade." default = 3.14159 endparam param m_iterations caption = "Martin iterations" hint = "This is the number of iterations for the \ Martin mode." default = 10 min = 1 endparam param mscale caption = "Martin scale" hint = "This is the scale for the Martin mode." default = 0.1 min = 1e-20 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fn1 caption = "First function" hint = "This function changes the overall shape of \ the trap." default = ident() endfunc func fn2 caption = "Second function" hint = "This function changes the overall shape of \ the trap." default = ident() endfunc func gn1 caption = "Gnarl function #1" hint = "This is the first function for the Gnarl \ formula only." default = sin() endfunc func gn2 caption = "Gnarl function #2" hint = "This is the second function for the Gnarl \ formula only." default = tan() endfunc func gn3 caption = "Gnarl function #3" hint = "This is the third function for the Gnarl \ formula only." default = cos() endfunc func fkt caption = "Additional Function" default = ident() endfunc } mt+akl-harlequin { ; ; First attempt to play with Mark Townsend's ; formulas. ; ; ; This formula is based on mt-harlequin ; Mark Townsend, Jan 13, 2000 ; which is based on the Paul Carlson orbit trap. ; ; At first glance, there is nearly no difference ; between mt+akl-harlequin in MinDist mode with Real/Imag on ; and mt-harlequin in default settings ; ; But change the settings... ; Or play with the lattices... ; ; Andreas Lober, Feb 10, 2000 ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex a = 0 complex _zz = 0 complex zStart = 0 loop: zStart = #z ; init zStart a = 0 ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif ; ; transformation ; if (@_pseudo) float _x = real(zStart) float _y = imag(zStart) if (@_pseudoMix) if (@_mixMode == 0) ; normal mix a = @m * atan(_x/_y) elseif (@_mixMode == 1) ; diff mix a = @m * atan((_x-_y)/_y) elseif (@_mixMode == 2) ; sum mix a = @m * atan((_x+_y)/_y) elseif (@_mixMode == 3) ; prod mix a = @m * atan(_x^2/_y) elseif (@_mixMode == 4) ; expo mix a = @m * atan(_x^_y/_y) endif else a = @m * atan(_y/_x) endif else a = @m * atan(zStart) endif if (@variation == 0) a = a * a + @c a = fn1(1 - a) / a elseif (@variation == 1) a = a * a + @c a = fn1(1 - a^2) elseif (@variation == 2) a = @m * fn1(a + @c)^2 elseif (@variation == 3) a = @m * fn1(1i*a + @c)^2 / fn1(a - @c) elseif (@variation == 4) a = @m * fn1(1i*a + @c)^2 * fn1(a - @c) elseif (@variation == 5) a = @m * fn1(1i*a + @c)^2 + fn1(a - @c) endif ; ; Transfer from MT->AKL ; _zz = a ; ; Calculate distances ; if (@with_zStart) _dist = cabs(_zz - zStart) _rd = real(_zz - zStart) _id = imag(_zz - zStart) else _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Harlequin, Dist. Method" param variation caption = "Variation" enum = "1" "2" "3" "4" "5" "6" default = 1 endparam param m caption = "Angle Multiplier" default = 2.0 endparam param c caption = "Harlequin Seed" default = (0,0) endparam param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param _pseudo caption = "Real/Imag" default = true hint = "Real/Imag is the default in MT-Harlequin" endparam param _pseudoMix caption = "Pseudo Mix Real and Imag" default = false hint = "only in use with Pseudo Elliptic" endparam param _mixMode caption = "Mix Mode for Pseudo Mix" enum = "Normal" "Difference" "Sum" "Product" "Exponent" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fn1 caption = "Harlequin Function" hint = "This function is used in all variations. \ sqr() is best with Real/Imag on\ tan() is best with Real/Imag off" default = sqr() endfunc func fkt caption = "Additional Function" default = ident() endfunc } pure_dist_method { ; ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; if (@lattice > 0) zStart = zStart + #z endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) default: title = "Pure Distance Method" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc } ; pure_dist_method stars_and_stripes { ; ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; if (@lattice > 0) zStart = zStart + #z endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif x = real(zStart) y = imag(zStart) zStart = ((real(@teilFkt((x^2+1e-20)/(y^2+1e-20)))%@teilung))/@teilung*400 _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) default: title = "Stars and Stripes, Dist. Meth." param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam param teilung caption = "Partitioning" default = 128 endparam func teilFkt caption = "Partitioning Function" default = round() endfunc func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc } ; stars_and_stripes stars_and_stripes2 { ; ; init: float _min = 1e20 float _max = -1 float _sum = 0 float _trap = 0 float wert = -1 bool _do_trap = TRUE float temp = 0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; if (@lattice >= 0) zStart = zStart + #z + #pixel endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif x = real(zStart) y = imag(zStart) wert = ((real(@teilFkt((x^2+1e-20)/(y^2+1e-20)))%@teilung))/@teilung*400 ; ; Calculate Min ; if @_mode == 0 && wert < _min _min = wert endif if @_mode == 1 && wert > _max _max = wert endif if @_mode == 2 _sum = _sum + wert endif ; ; Calculate the trap ; if @_mode == 4 && _do_trap && wert > @_trap_min && wert < @_trap_max _do_trap = false _trap = wert endif final: if @_mode == 0 temp = _min ; "Min" elseif @_mode == 1 temp = _max ; "Max" elseif @_mode == 2 temp = _sum ; "Sum" elseif @_mode == 3 temp = wert ; "Last" elseif @_mode == 4 temp = _trap ; "Trap" endif #index = real(@fkt(temp)) default: title = "Stars and Stripes #2" param _mode caption = "Dist. Mode" enum = "Min" "Max" "Sum" "Last" "Trap" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam param teilung caption = "Partitioning" default = 128 endparam func teilFkt caption = "Partitioning Function" default = round() endfunc func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc } ; stars_and_stripes2 deriv3 { ; ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; if (@lattice > 0) zStart = zStart + #z endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (zStart == #pixel) zStart = @derivFkt(#pixel) else zStart = (@derivFkt(zStart) - @derivFkt(#pixel))/(zStart-#pixel) endif ; Here comes the Joukowskij zStart = zStart^@exponent - @jouk/zStart _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) default: title = "Derivation #3" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param jouk caption = "Joukowskij Constant" default = (0.01,0.00) endparam param exponent caption = "Transfer Exponent" default = 1.0 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc func derivFkt caption = "Derivated Function" default = cotanh() endfunc } ; deriv3 hevia { ; update: 22.03.2000 ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex a = 0 complex b = 0 complex c = 0 complex d = 0 float x = 0 float y = 0 float xf = 0 float yf = 0 float xc = 0 float yc = 0 complex nenner = 0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; zStart = zStart + #z ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif ; calculate the "vector" x = real(zStart) y = imag(zStart) if (@vectorJouk != 0 && zStart != 0) zStart = zStart + @vectorJouk/zStart endif ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif ; matrix a = xf + 1i*yc b = xc + 1i*yc c = xf + 1i*yf d = xc + 1i*yf if(@operation == 2 || @operation == 3 || @operation == 4) zq = @fn2(zStart) else zq = 0 endif if (@operation == 0) ; linear ; matrix algebra zStart = a*x + b*y + 1i*(c*x+d*y) elseif (@operation == 1) ; elliptic nenner = c*zStart + d if (nenner == 0) nenner = nenner+0.001 endif zStart = (a*zStart + b)/nenner elseif (@operation == 2) ; Plane1 zStart = a*zStart + b*zq elseif (@operation == 3) ; Plane2 zStart = c*zStart + d*zq elseif (@operation == 4) ; Scalar Product zStart = a*zStart^2 + (b+c)*zStart*zq + d*zq^2 elseif (@operation == 5) ; Real Scalar zStart = a*x^2 + (b+c)*x*y + d*y^2 elseif (@operation == 5) ; Pseudo Scalar zStart = a*x^2 + b*x*y + 1i*(c*x*y + d*y^2) endif if (@exponent != 1) zStart = zStart^@exponent endif if (zStart != 0 && @jouk != 0) zStart = zStart + @jouk/zStart endif if (@pure) zStart = zStart + #pixel endif _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) default: title = "Hevia" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 1 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param operation caption = "Operation" enum = "Linear" "Elliptic" "Plane 1" "Plane 2" \ "Scalar Product" "Real Scalar" "Pseudo Scalar" default = 0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param zJouk caption = "Joukowskij: Lattice" default = (0.0,0.0) endparam param vectorJouk caption = "Joukowskij: Vector " default = (0.0,0.0) endparam param jouk caption = "Joukowskij: Constant" default = (0.01,0.00) endparam param pure caption = "With Pixel Addition" default = FALSE endparam param exponent caption = "Transfer Exponent" default = 1.0 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc func derivFkt caption = "Derivated Function" default = cotanh() endfunc func fn2 caption = "Operational Function" default = conj() hint = "Works with Operations Plane1/2 and Scalar Product" endfunc } ; hevia bezier { ; ; Kerry Mitchell 07jan00 ; ; Combined with Hevia module ; Andreas Lober 07mar2000 ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float x = 0 float y = 0 float xf = 0 float yf = 0 float xc = 0 float yc = 0 ; calculate the "vector" x = real(#z) y = imag(#z) ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif float x0=0 float y0=0 float x1=0 float y1=0 float x2=0 float y2=0 float x3=0 float y3=0 ;first point for Bezier if (@nbr == 0 || @nbr == 1 || @nbr == 2 || \ @nbr == 3 || @nbr == 4 || @nbr == 5) x0=xf y0=yc elseif (@nbr == 6 || @nbr == 7 || @nbr == 8 || \ @nbr == 9 || @nbr == 10 || @nbr == 11) x0=xc y0=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x0=xf y0=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x0=xc y0=yf endif ; second point for Bezier if (@nbr == 6 || @nbr == 7 || @nbr == 12 || \ @nbr == 13 || @nbr == 18 || @nbr == 19) x1=xf y1=yc elseif (@nbr == 0 || @nbr == 1 || @nbr == 14 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x1=xc y1=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x1=xf y1=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x1=xc y1=yf endif ; third point for Bezier if (@nbr == 8 || @nbr == 10 || @nbr == 14 || \ @nbr == 16 || @nbr == 21 || @nbr == 22) x2=xf y2=yc elseif (@nbr == 2 || @nbr == 4 || @nbr == 12 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x2=xc y2=yc elseif (@nbr == 0 || @nbr == 5 || @nbr == 6 || \ @nbr == 11 || @nbr == 19 || @nbr == 20) x2=xf y2=yf elseif (@nbr == 1 || @nbr == 3 || @nbr == 7 || \ @nbr == 9 || @nbr == 13 || @nbr == 15) x2=xc y2=yf endif ; fourth point for Bezier if (@nbr == 9 || @nbr == 11 || @nbr == 15 || \ @nbr == 17 || @nbr == 20 || @nbr == 23) x3=xf y3=yc elseif (@nbr == 3 || @nbr == 5 || @nbr == 13 || \ @nbr == 16 || @nbr == 19 || @nbr == 22) x3=xc y3=yc elseif (@nbr == 1 || @nbr == 4 || @nbr == 7 || \ @nbr == 10 || @nbr == 18 || @nbr == 21) x3=xf y3=yf elseif (@nbr == 0 || @nbr == 2 || @nbr == 6 || \ @nbr == 8 || @nbr == 12 || @nbr == 14) x3=xc y3=yf endif float cx=3*(x1-x0) float bx=3*(x2-x1)-cx float ax=x3-x0-cx-bx float cy=3*(y1-y0) float by=3*(y2-y1)-cy float ay=y3-y0-cy-by float t=0.0 float r=0.0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter=0 int iterfix=0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float x=0.0 float y=0.0 float u=0.0 float v=0.0 loop: iter=iter+1 u=real(#z) v=imag(#z) t=0.0 while (t <= 1.0) x = ((ax*t+bx)*t+cx)*t+x0 y = ((ay*t+by)*t+cy)*t+y0 if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r = (x-u)*(x-u) + (y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = #z cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t = t + @dt endwhile final: float temp = 0 if (@colorby == 0) ; Minimum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = 0.01*iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 15) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @randomness * real(#random) default: title = "Hevia meets Bezier" param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 1 endparam param nbr caption = "Neighbours" enum = "abcd" "abdc" "acbd" "acdb" "adbc" "adcb" \ "bacd" "badc" "bcad" "bcda" "bdac" "bdca" \ "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" \ "dabc" "dacb" "dbca" "dbac" "dcab" "dcba" default = 0 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param minMax caption = "Min/Max" default = FALSE endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "StepSize" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 2.0 endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param nexp caption = "Power" default = 0.5 min = 0.0 hint = "Decrease to make thinner lines" endparam func fkt caption = "Additional Function" default = ident() endfunc } hevier { ; ; Kerry Mitchell 07jan00 ; Combined with Hevia module ; Andreas Lober 07mar2000 ; Static parts from the init section ; placed into the loop section ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float xf = 0 float yf = 0 float xc = 0 float yc = 0 float x0 = 0 float y0 = 0 float x1 = 0 float y1 = 0 float x2 = 0 float y2 = 0 float x3 = 0 float y3 = 0 float cx = 0 float bx = 0 float ax = 0 float cy = 0 float by = 0 float ay = 0 float t = 0 float r = 0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter = 0 int iterfix = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float x = 0 float y = 0 float u = 0 float v = 0 complex zStart = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) loop: iter = iter+1 zStart = #z + @i_randomness * #random if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif ; calculate the "vector" x = real(zStart) y = imag(zStart) if (@vectorJouk != 0 && zStart != 0) zStart = zStart + @vectorJouk/zStart endif ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif ;first point for Bezier if (@nbr == 0 || @nbr == 1 || @nbr == 2 || \ @nbr == 3 || @nbr == 4 || @nbr == 5) x0=xf y0=yc elseif (@nbr == 6 || @nbr == 7 || @nbr == 8 || \ @nbr == 9 || @nbr == 10 || @nbr == 11) x0=xc y0=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x0=xf y0=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x0=xc y0=yf endif ; second point for Bezier if (@nbr == 6 || @nbr == 7 || @nbr == 12 || \ @nbr == 13 || @nbr == 18 || @nbr == 19) x1=xf y1=yc elseif (@nbr == 0 || @nbr == 1 || @nbr == 14 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x1=xc y1=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x1=xf y1=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x1=xc y1=yf endif ; third point for Bezier if (@nbr == 8 || @nbr == 10 || @nbr == 14 || \ @nbr == 16 || @nbr == 21 || @nbr == 22) x2=xf y2=yc elseif (@nbr == 2 || @nbr == 4 || @nbr == 12 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x2=xc y2=yc elseif (@nbr == 0 || @nbr == 5 || @nbr == 6 || \ @nbr == 11 || @nbr == 19 || @nbr == 20) x2=xf y2=yf elseif (@nbr == 1 || @nbr == 3 || @nbr == 7 || \ @nbr == 9 || @nbr == 13 || @nbr == 15) x2=xc y2=yf endif ; fourth point for Bezier if (@nbr == 9 || @nbr == 11 || @nbr == 15 || \ @nbr == 17 || @nbr == 20 || @nbr == 23) x3=xf y3=yc elseif (@nbr == 3 || @nbr == 5 || @nbr == 13 || \ @nbr == 16 || @nbr == 19 || @nbr == 22) x3=xc y3=yc elseif (@nbr == 1 || @nbr == 4 || @nbr == 7 || \ @nbr == 10 || @nbr == 18 || @nbr == 21) x3=xf y3=yf elseif (@nbr == 0 || @nbr == 2 || @nbr == 6 || \ @nbr == 8 || @nbr == 12 || @nbr == 14) x3=xc y3=yf endif cx=3*(x1-x0) bx=3*(x2-x1)-cx ax=x3-x0-cx-bx cy=3*(y1-y0) by=3*(y2-y1)-cy ay=y3-y0-cy-by t=0.0 r=0.0 if (@fixit == 1) ; Maximum rfix = -1 else rfix=1.0e20 endif x=0.0 y=0.0 u=real(zStart) v=imag(zStart) t = @loopStart while(t <= @loopEnd) x=((ax*t+bx)*t+cx)*t+x0 y=((ay*t+by)*t+cy)*t+y0 if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r=(x-u)*(x-u)+(y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = #z cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t=t+@dt endwhile final: float temp = 0 if (@colorby == 0) ; Fiximum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = 0.01*iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 15) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @f_randomness * real(#random) default: title = "Hevier Curve" param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 1 endparam param nbr caption = "Neighbours" enum = "abcd" "abdc" "acbd" "acdb" "adbc" "adcb" \ "bacd" "badc" "bcad" "bcda" "bdac" "bdca" \ "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" \ "dabc" "dacb" "dbca" "dbac" "dcab" "dcba" default = 0 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param loopStart caption = "Loop Start" default = 0.0 endparam param loopEnd caption = "Loop End" default = 1.0 endparam param minMax caption = "Min/Max" default = FALSE endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption= "StepSize" default=0.1 hint= "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min=0.0 max=2.0 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param vectorJouk caption = "Joukowskij: Vector " default = (0.0,0.0) endparam param curveJouk caption = "Joukowskij: Curvature" default = (0.0,0.0) endparam param nexp caption= "Power" default=0.5 min=0.0 hint= "decrease to make thinner lines" endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam func fkt caption = "Additional Function" default = ident() endfunc } hevier_dist { ; ; Kerry Mitchell 07jan00 ; ; Combined with Hevia module ; Andreas Lober 07mar2000 ; ; Static parts from the init section ; placed into the loop section ; ; "Color by" replaced by the ; AKL Distance Method ; ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 float x = 0 float y = 0 float xf = 0 float yf = 0 float xc = 0 float yc = 0 float x0=0 float y0=0 float x1=0 float y1=0 float x2=0 float y2=0 float x3=0 float y3=0 float cx=0 float bx=0 float ax=0 float cy=0 float by=0 float ay=0 float t=0 float r=0 ;float rmin=0 int iter=0 ;int itermin=0 ;complex zmin = (0.0,0.0) ;complex cmin = (0.0,0.0) float x=0 float y=0 float u=0 float v=0 complex zStart = 0 if (@initialisation == 0) ; init: zStart = @randomness * #random endif; loop: iter=iter+1 if (@initialisation == 1) ; loop: zStart = @randomness * #random endif; zStart = zStart + #z ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@rotDegree != 0) zStart = (zStart-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif ; calculate the "vector" x = real(zStart) y = imag(zStart) if (@vectorJouk != 0 && zStart != 0) zStart = zStart + @vectorJouk/zStart endif ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif ;first point for Bezier if (@nbr == 0 || @nbr == 1 || @nbr == 2 || \ @nbr == 3 || @nbr == 4 || @nbr == 5) x0=xf y0=yc elseif (@nbr == 6 || @nbr == 7 || @nbr == 8 || \ @nbr == 9 || @nbr == 10 || @nbr == 11) x0=xc y0=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x0=xf y0=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x0=xc y0=yf endif ; second point for Bezier if (@nbr == 6 || @nbr == 7 || @nbr == 12 || \ @nbr == 13 || @nbr == 18 || @nbr == 19) x1=xf y1=yc elseif (@nbr == 0 || @nbr == 1 || @nbr == 14 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x1=xc y1=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x1=xf y1=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x1=xc y1=yf endif ; third point for Bezier if (@nbr == 8 || @nbr == 10 || @nbr == 14 || \ @nbr == 16 || @nbr == 21 || @nbr == 22) x2=xf y2=yc elseif (@nbr == 2 || @nbr == 4 || @nbr == 12 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x2=xc y2=yc elseif (@nbr == 0 || @nbr == 5 || @nbr == 6 || \ @nbr == 11 || @nbr == 19 || @nbr == 20) x2=xf y2=yf elseif (@nbr == 1 || @nbr == 3 || @nbr == 7 || \ @nbr == 9 || @nbr == 13 || @nbr == 15) x2=xc y2=yf endif ; fourth point for Bezier if (@nbr == 9 || @nbr == 11 || @nbr == 15 || \ @nbr == 17 || @nbr == 20 || @nbr == 23) x3=xf y3=yc elseif (@nbr == 3 || @nbr == 5 || @nbr == 13 || \ @nbr == 16 || @nbr == 19 || @nbr == 22) x3=xc y3=yc elseif (@nbr == 1 || @nbr == 4 || @nbr == 7 || \ @nbr == 10 || @nbr == 18 || @nbr == 21) x3=xf y3=yf elseif (@nbr == 0 || @nbr == 2 || @nbr == 6 || \ @nbr == 8 || @nbr == 12 || @nbr == 14) x3=xc y3=yf endif cx=3*(x1-x0) bx=3*(x2-x1)-cx ax=x3-x0-cx-bx cy=3*(y1-y0) by=3*(y2-y1)-cy ay=y3-y0-cy-by t=0.0 r=0.0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif ;zfix = (0.0,0.0) ;cfix = (0.0,0.0) x=0.0 y=0.0 u=real(zStart) v=imag(zStart) t=0.0 while(t<=1.0) x=((ax*t+bx)*t+cx)*t+x0 y=((ay*t+by)*t+cy)*t+y0 if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif ;if (@lattice == 0) r=(x-u)*(x-u)+(y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r ;iterfix = iter ;zfix = #z ;cfix = x + 1i*y endif ;endif t=t+@dt endwhile if (@with_z == 0) if (@lattice == 0) _dist = rfix + 1/|#z| _rd = x + real(#z) _id = y + imag(#z) else zStart = zStart - x-1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 1) if (@lattice == 0) _dist = rfix + 0.1/|zStart| _rd = x + 0.1/real(zStart) _id = y + 0.1/imag(zStart) else zStart = 0.1/zStart + x + 1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 2) if (@lattice == 0) _dist = rfix _rd = x _id = y else zStart = x + 1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 3) if (@lattice == 0) _dist = rfix _rd = x _id = y else zStart = zStart - x-1i*y _dist = cabs(zStart) _rd = real(zStart) _id = imag(zStart) endif endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: float temp = 0 if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp)) + @randomness * real(#random) default: title = "Hevier, Dist. Meth." param fixit caption = "Fixit for Dist. Mode" enum = "Minimum" "Maximum" default = 0 endparam param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "Lower Border for Trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "Upper Border for Trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 1 endparam param nbr caption = "Neighbours" enum = "abcd" "abdc" "acbd" "acdb" "adbc" "adcb" \ "bacd" "badc" "bcad" "bcda" "bdac" "bdca" \ "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" \ "dabc" "dacb" "dbca" "dbac" "dcab" "dcba" default = 0 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param minMax caption = "Min/Max" default = FALSE endparam param with_z caption = "With #z Addition?" enum = "Yes" "Perhaps" "Maybe" "No" default = 2 endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "Step Size" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 2.0 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param vectorJouk caption = "Joukowskij: Vector " default = (0.0,0.0) endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param nexp caption= "Power" default=0.5 min=0.0 hint= "decrease to make thinner lines" endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 1 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param pure caption = "With Pixel Addition" default = FALSE endparam param exponent caption = "Transfer Exponent" default = 1.0 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param initialisation caption = "Initialisation" enum = "init:" "loop:" default = 1 endparam func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc func derivFkt caption = "Derivated Function" default = cotanh() endfunc func fn2 caption = "Operational Function" default = conj() hint = "Works with Operations Plane1/2 and Scalar Product" endfunc } ; hevier_dist lissajous-curve { ; ; Kerry Mitchell 07jan00 made the Original ; Bezier Curve ; ; prepared for Lissajous Curve ; by Andreas Lober March 2000 ; ; Limacon and Strophoid Curve added ; by Andreas Lober March 12, 2000 ; ; Thank you Gedeon Peteri ; for your inspiring home page ; ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float x0 = real(#z) float y0 = imag(#z) float t = 0.0 float r = 0.0 float x = 0.0 float y = 0.0 float u = 0.0 float v = 0.0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter = 0 int iterfix = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float loopEnd = @loop_count*#pi + @dt float x_fkt_t = 0.0 float y_fkt_t = 0.0 loop: iter = iter + 1 u = real(#z) v = imag(#z) t = 0.0 while (t <= loopEnd) if (@mode == 0) ; Classical x_fkt_t = sin(@x_loop*t) y_fkt_t = cos(@y_loop*t) elseif (@mode == 1) ; Arcus x_fkt_t = asin(@x_loop*t) y_fkt_t = acos(@y_loop*t) elseif (@mode == 2) ; Hyperbolicus x_fkt_t = sinh(@x_loop*t) y_fkt_t = cosh(@y_loop*t) elseif (@mode == 3) ; Ar Hyp x_fkt_t = asinh(@x_loop*t) y_fkt_t = acosh(@y_loop*t) elseif (@mode == 4) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = cotan(@y_loop*t) elseif (@mode == 5) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = atan(@y_loop*t) elseif (@mode == 6) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = cotanh(@y_loop*t) elseif (@mode == 7) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = atanh(@y_loop*t) elseif (@mode == 8) ; x_fkt_t = exp(@x_loop*t) y_fkt_t = log(@y_loop*t) elseif (@mode == 9) ; x_fkt_t = (@x_loop*t)^2 y_fkt_t = sqrt(@y_loop*t) endif if (@x_exp != 1) x_fkt_t = x_fkt_t^@x_exp endif if (@y_exp != 1) y_fkt_t = y_fkt_t^@y_exp endif if (@curve == 0) ; Lissajous x = @par1*x_fkt_t + x0 y = @par2*y_fkt_t + y0 elseif (@curve == 1) ; Limacon x = @par1*x_fkt_t*x_fkt_t + (@par1+@par2)*x_fkt_t + x0 y = @par1*x_fkt_t*y_fkt_t + (@par1+@par2)*y_fkt_t + y0 elseif (@curve == 2) ; Strophoid x = (1 - 2*@par1*x_fkt_t*x_fkt_t) + x0 y = (1 - 2*@par1*x_fkt_t*x_fkt_t)*y_fkt_t/x_fkt_t + y0 elseif (@curve == 3) ; Prod-Quot x = @par1*x_fkt_t*y_fkt_t + x0 y = @par2*y_fkt_t/x_fkt_t + y0 elseif (@curve == 4) ; Zykloid x = @par1*t - @par2*x_fkt_t + x0 y = @par1*t - @par2*y_fkt_t + y0 elseif (@curve == 5) ; Conchoid x = @par1 + @par2*x_fkt_t + x0 y = @par1*y_fkt_t/x_fkt_t + @par2*y_fkt_t + y0 elseif (@curve == 6) ; Cardioid x = @par1*x_fkt_t*(1 + @par2*x_fkt_t) + x0 y = @par1*y_fkt_t*(1 + @par2*x_fkt_t) + y0 elseif (@curve == 7) ; Cart x = @par1*t/(1 + @par2*x_fkt_t^3) + x0 y = @par1*t/(1 + @par2*y_fkt_t^3) + y0 elseif (@curve == 8) ; Ciss x = @par1*t^2/(1 + @par2*x_fkt_t^2) + x0 y = @par1*t^3/(1 + @par2*y_fkt_t^2) + y0 elseif (@curve == 9) ; Slope x = @par1*y_fkt_t*t + @par2*x_fkt_t^2+t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2+t + y0 elseif (@curve == 10) ; Dope x = @par1*y_fkt_t*t + @par2*x_fkt_t^2*t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2*t + y0 elseif (@curve == 11) ; Smile x = @par1*y_fkt_t*t + @par2*x_fkt_t^2 + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2 + y0 elseif (@curve >= 12 || @curve <= 15) ; Episphere, 13, BigEye, 15 float xy = 0 if (@curve == 12 || @curve == 13) xy = @par1*x_fkt_t^2 - @par2*y_fkt_t^2 else xy = @par1*x_fkt_t^2 / (@par2*y_fkt_t^2) endif if (@curve == 12 || @curve == 14) xy = atan2(xy) else xy = real(@fkt13(xy)) endif x = xy*x_fkt_t + x0 y = xy*y_fkt_t + y0 elseif (@curve == 16) ; Butterfly Crash x = @par1*y_fkt_t*t^2 + @par2*x_fkt_t^2*t + (@par1+@par2)*x_fkt_t^3 + x0 y = @par1*x_fkt_t*t^2 + @par2*y_fkt_t^2*t + (@par1+@par2)*y_fkt_t^3 + y0 endif if (@spiralExp != 0) x = x/t^@spiralExp y = y/t^@spiralExp endif if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r = (x-u)*(x-u) + (y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = #z cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t = t + @dt endwhile final: float temp = 0 if (@colorby == 0) ; Fiximum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 17) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @randomness * real(#random) default: title = "Lissajous and others" param curve caption = "Curve" enum = "Lissajous" "Limacon" "Strophoid" "Prod-Quot" \ "Cycloid" "Conchoid" "Cardioid" "Cart" "Ciss" "Slope" \ "Dope" "Smile" \ "Episphere" "13" "BigEye" "15" \ "Butterfly Crash" default = 0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param mode caption = "Curve Mode" enum = "Classical" "Arcus" "Hyperbolicus" "Ar Hyp" \ "Tango" "Tanga" "TangoHyp" "TangaHyp" \ "Exp/Log" "Sqr/Sqrt" default = 0 endparam param minMax caption = "Min/Max" default = FALSE endparam param spiralExp caption = "Exponent for Spirals" default = 0.0 min = 0.0 endparam param x_loop caption = "X Period" default = 1 min = 1 hint = "Choose a Prime != Y Period" endparam param y_loop caption = "Y Period" default = 1 min = 1 hint = "Choose a Prime != X Period" endparam param par1 caption = "X Shape" default = 1.0 min = 0.0 endparam param par2 caption = "Y Shape" default = 1.0 min = 0.0 endparam param loop_count caption = "Loop Count" default = 2.0 min = 0.0 endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "Step Size" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 1.0 endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param nexp caption = "Power" default = 0.5 min = 0.0 hint = "decrease to make thinner lines" endparam param x_exp caption = "X Exponent" default = 1.0 min = 0.0 endparam param y_exp caption = "Y Exponent" default = 1.0 min = 0.0 endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt13 caption = "Flavour for 13&15" default = log() hint = "Try out log, exp, ceil, atan" endfunc func fkt caption = "Additional Function" default = ident() endfunc } ; lissajous_curve lissajuice { ; ; Kerry Mitchell 07jan00 made the Original ; Bezier Curve ; ; prepared for Lissajous Curve ; by Andreas Lober March 2000 ; ; Static parts from the init section ; placed into the loop section ; ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float x0=real(#z) float y0=imag(#z) float t = 0 float r = 0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter = 0 int iterfix = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float x = 0 float y = 0 float u = 0 float v = 0 complex zStart = 0 float loopEnd = @loop_count*#pi + @dt float x_fkt_t = 0.0 float y_fkt_t = 0.0 loop: iter = iter+1 zStart = #z if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif ; initialize the inner loop t = 0.0 r = 0.0 if (@fixit == 1) ; Maximum rfix = -1 else rfix = 1.0e20 endif zfix = (0.0,0.0) cfix = (0.0,0.0) u=real(zStart) v=imag(zStart) ; inner loop while (t <= loopEnd) if (@mode == 0) ; Classical x_fkt_t = sin(@x_loop*t) y_fkt_t = cos(@y_loop*t) elseif (@mode == 1) ; Arcus x_fkt_t = asin(@x_loop*t) y_fkt_t = acos(@y_loop*t) elseif (@mode == 2) ; Hyperbolicus x_fkt_t = sinh(@x_loop*t) y_fkt_t = cosh(@y_loop*t) elseif (@mode == 3) ; Ar Hyp x_fkt_t = asinh(@x_loop*t) y_fkt_t = acosh(@y_loop*t) elseif (@mode == 4) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = cotan(@y_loop*t) elseif (@mode == 5) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = atan(@y_loop*t) elseif (@mode == 6) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = cotanh(@y_loop*t) elseif (@mode == 7) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = atanh(@y_loop*t) elseif (@mode == 8) ; x_fkt_t = exp(@x_loop*t) y_fkt_t = log(@y_loop*t) elseif (@mode == 9) ; x_fkt_t = (@x_loop*t)^2 y_fkt_t = sqrt(@y_loop*t) endif if (@x_exp != 1) x_fkt_t = x_fkt_t^@x_exp endif if (@y_exp != 1) y_fkt_t = y_fkt_t^@y_exp endif if (@curve == 0) ; Lissajous x = @par1*x_fkt_t + x0 y = @par2*y_fkt_t + y0 elseif (@curve == 1) ; Limacon x = @par1*x_fkt_t*x_fkt_t + (@par1+@par2)*x_fkt_t + x0 y = @par1*x_fkt_t*y_fkt_t + (@par1+@par2)*y_fkt_t + y0 elseif (@curve == 2) ; Strophoid x = (1 - 2*@par1*x_fkt_t*x_fkt_t) y = (1 - 2*@par1*x_fkt_t*x_fkt_t)*y_fkt_t/x_fkt_t elseif (@curve == 3) ; Prod-Quot x = @par1*x_fkt_t*y_fkt_t + x0 y = @par2*y_fkt_t/x_fkt_t + y0 elseif (@curve == 4) ; Zykloid x = @par1*t - @par2*x_fkt_t + x0 y = @par1*t - @par2*y_fkt_t + y0 elseif (@curve == 5) ; Conchoid x = @par1 + @par2*x_fkt_t + x0 y = @par1*y_fkt_t/x_fkt_t + @par2*y_fkt_t + y0 elseif (@curve == 6) ; Cardioid x = @par1*x_fkt_t*(1 + @par2*x_fkt_t) + x0 y = @par1*y_fkt_t*(1 + @par2*x_fkt_t) + y0 elseif (@curve == 7) ; Cart x = @par1*t/(1 + @par2*x_fkt_t^3) + x0 y = @par1*t/(1 + @par2*y_fkt_t^3) + y0 elseif (@curve == 8) ; Ciss x = @par1*t^2/(1 + @par2*x_fkt_t^2) + x0 y = @par1*t^3/(1 + @par2*y_fkt_t^2) + y0 elseif (@curve == 9) ; Kiss x = @par1*y_fkt_t*t + @par2*x_fkt_t^2+t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2+t + y0 elseif (@curve == 10) ; Kiss2 x = @par1*y_fkt_t*t + @par2*x_fkt_t^2*t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2*t + y0 elseif (@curve == 11) ; Kiss2 x = @par1*y_fkt_t*t + @par2*x_fkt_t^2 + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2 + y0 elseif (@curve >= 12 || @curve <= 15) ; Episphere, 13, BigEye, 15 float xy = 0 if (@curve == 12 || @curve == 13) xy = @par1*x_fkt_t^2 - @par2*y_fkt_t^2 else xy = @par1*x_fkt_t^2 / (@par2*y_fkt_t^2) endif if (@curve == 12 || @curve == 14) xy = atan2(xy) else xy = real(@fkt13(xy)) endif x = xy*x_fkt_t + x0 y = xy*y_fkt_t + y0 elseif (@curve == 16) ; Butterfly Crash x = @par1*y_fkt_t*t^2 + @par2*x_fkt_t^2*t + (@par1+@par2)*x_fkt_t^3 + x0 y = @par1*x_fkt_t*t^2 + @par2*y_fkt_t^2*t + (@par1+@par2)*y_fkt_t^3 + y0 endif if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r = (x-u)*(x-u) + (y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = zStart cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t = t + @dt endwhile final: float temp = 0 if (@colorby == 0) ; Fiximum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = 0.01*iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 15) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @f_randomness * real(#random) default: title = "Lissa's Juice" param curve caption = "Curve" enum = "Lissajous" "Limacon" "Strophoid" "Prod-Quot" \ "Cycloid" "Conchoid" "Cardioid" "Cart" "Ciss" "Slope" \ "Dope" "Smile" \ "Episphere" "13" "BigEye" "15" \ "Butterfly Crash" default = 0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param mode caption = "Curve Mode" enum = "Classical" "Arcus" "Hyperbolicus" "Ar Hyp" \ "Tango" "Tanga" "TangoHyp" "TangaHyp" \ "Exp/Log" "Sqr/Sqrt" default = 0 endparam param minMax caption = "Min/Max" default = FALSE endparam param x_loop caption = "X Period" default = 1 min = 1 hint = "Choose a Prime != Y Period" endparam param y_loop caption = "Y Period" default = 1 min = 1 hint = "Choose a Prime != X Period" endparam param par1 caption = "X Shape" default = 1.0 min = 0.0 endparam param par2 caption = "Y Shape" default = 1.0 min = 0.0 endparam param loop_count caption = "Loop Count" default = 2.0 min = 0.0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "Step Size" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 1.0 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param nexp caption = "Power" default = 0.5 min = 0.0 hint = "decrease to make thinner lines" endparam param x_exp caption = "X Exponent" default = 1.0 min = 0.0 endparam param y_exp caption = "Y Exponent" default = 1.0 min = 0.0 endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt13 caption = "Flavour for 13&15" default = log() hint = "Try out log, exp, ceil, atan" endfunc func fkt caption = "Additional Function" default = ident() endfunc } ; lissajuice lissajuice_dist { ; ; Kerry Mitchell 07jan00 made the Original ; Bezier Curve ; ; prepared for Lissajous Curve ; by Andreas Lober March 2000 ; ; Static parts from the init section ; placed into the loop section ; ; "Color by" replaced by the ; AKL Distance Method ; ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 ; ; Curve vars ; float x0=real(#z) float y0=imag(#z) float t = 0 float r = 0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif float x = 0 float y = 0 float u = 0 float v = 0 complex zStart = 0 float loopEnd = @loop_count*#pi + @dt float x_fkt_t = 0.0 float y_fkt_t = 0.0 int iter = 0 loop: iter = iter+1 zStart = #z + @i_randomness * #random if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif if (@rotDegree != 0) zStart = (zStart-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif ; initialize the inner loop t = 0.0 r = 0.0 if (@fixit == 1) ; Maximum rfix = -1 else rfix = 1.0e20 endif u=real(zStart) v=imag(zStart) while (t <= loopEnd) if (@mode == 0) ; Classical x_fkt_t = sin(@x_loop*t) y_fkt_t = cos(@y_loop*t) elseif (@mode == 1) ; Arcus x_fkt_t = asin(@x_loop*t) y_fkt_t = acos(@y_loop*t) elseif (@mode == 2) ; Hyperbolicus x_fkt_t = sinh(@x_loop*t) y_fkt_t = cosh(@y_loop*t) elseif (@mode == 3) ; Ar Hyp x_fkt_t = asinh(@x_loop*t) y_fkt_t = acosh(@y_loop*t) elseif (@mode == 4) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = cotan(@y_loop*t) elseif (@mode == 5) ; x_fkt_t = tan(@x_loop*t) y_fkt_t = atan(@y_loop*t) elseif (@mode == 6) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = cotanh(@y_loop*t) elseif (@mode == 7) ; x_fkt_t = tanh(@x_loop*t) y_fkt_t = atanh(@y_loop*t) elseif (@mode == 8) ; x_fkt_t = exp(@x_loop*t) y_fkt_t = log(@y_loop*t) elseif (@mode == 9) ; x_fkt_t = (@x_loop*t)^2 y_fkt_t = sqrt(@y_loop*t) endif if (@x_exp != 1) x_fkt_t = x_fkt_t^@x_exp endif if (@y_exp != 1) y_fkt_t = y_fkt_t^@y_exp endif if (@curve == 0) ; Lissajous x = @par1*x_fkt_t + x0 y = @par2*y_fkt_t + y0 elseif (@curve == 1) ; Limacon x = @par1*x_fkt_t*x_fkt_t + (@par1+@par2)*x_fkt_t + x0 y = @par1*x_fkt_t*y_fkt_t + (@par1+@par2)*y_fkt_t + y0 elseif (@curve == 2) ; Strophoid x = (1 - 2*@par1*x_fkt_t*x_fkt_t) y = (1 - 2*@par1*x_fkt_t*x_fkt_t)*y_fkt_t/x_fkt_t x = (1 - 2*@par1*x_fkt_t*x_fkt_t) + x0 y = (1 - 2*@par1*x_fkt_t*x_fkt_t)*y_fkt_t/x_fkt_t + y0 elseif (@curve == 3) ; Prod-Quot x = @par1*x_fkt_t*y_fkt_t + x0 y = @par2*y_fkt_t/x_fkt_t + y0 elseif (@curve == 4) ; Zykloid x = @par1*t - @par2*x_fkt_t + x0 y = @par1*t - @par2*y_fkt_t + y0 elseif (@curve == 5) ; Conchoid x = @par1 + @par2*x_fkt_t + x0 y = @par1*y_fkt_t/x_fkt_t + @par2*y_fkt_t + y0 elseif (@curve == 6) ; Cardioid x = @par1*x_fkt_t*(1 + @par2*x_fkt_t) + x0 y = @par1*y_fkt_t*(1 + @par2*x_fkt_t) + y0 elseif (@curve == 7) ; Cart x = @par1*t/(1 + @par2*x_fkt_t^3) + x0 y = @par1*t/(1 + @par2*y_fkt_t^3) + y0 elseif (@curve == 8) ; Ciss x = @par1*t^2/(1 + @par2*x_fkt_t^2) + x0 y = @par1*t^3/(1 + @par2*y_fkt_t^2) + y0 elseif (@curve == 9) ; Kiss x = @par1*y_fkt_t*t + @par2*x_fkt_t^2+t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2+t + y0 elseif (@curve == 10) ; Kiss2 x = @par1*y_fkt_t*t + @par2*x_fkt_t^2*t + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2*t + y0 elseif (@curve == 11) ; Kiss2 x = @par1*y_fkt_t*t + @par2*x_fkt_t^2 + x0 y = @par1*x_fkt_t*t + @par2*y_fkt_t^2 + y0 elseif (@curve >= 12 || @curve <= 15) ; Episphere, 13, BigEye, 15 float xy = 0 if (@curve == 12 || @curve == 13) xy = @par1*x_fkt_t^2 - @par2*y_fkt_t^2 else xy = @par1*x_fkt_t^2 / (@par2*y_fkt_t^2) endif if (@curve == 12 || @curve == 14) xy = atan2(xy) else xy = real(@fkt13(xy)) endif x = xy*x_fkt_t + x0 y = xy*y_fkt_t + y0 elseif (@curve == 16) ; Butterfly Crash x = @par1*y_fkt_t*t^2 + @par2*x_fkt_t^2*t + (@par1+@par2)*x_fkt_t^3 + x0 y = @par1*x_fkt_t*t^2 + @par2*y_fkt_t^2*t + (@par1+@par2)*y_fkt_t^3 + y0 endif if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r = (x-u)*(x-u) + (y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r ;iterfix = iter ;zfix = zStart ;cfix = x + 1i*y endif t = t + @dt endwhile if (@with_z == 0) if (@lattice == 0) _dist = rfix + 1/|#z| _rd = x + real(#z) _id = y + imag(#z) else zStart = zStart - x-1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 1) if (@lattice == 0) _dist = rfix + 0.1/|zStart| _rd = x + 0.1/real(zStart) _id = y + 0.1/imag(zStart) else zStart = 0.1/zStart + x + 1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 2) if (@lattice == 0) _dist = rfix _rd = x _id = y else zStart = x + 1i*y _dist = cabs(zStart - #z) _rd = real(zStart - #z) _id = imag(zStart - #z) endif elseif (@with_z == 3) if (@lattice == 0) _dist = rfix _rd = x _id = y else zStart = zStart - x-1i*y _dist = cabs(zStart) _rd = real(zStart) _id = imag(zStart) endif endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: float temp = 0 if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif #index = real(@fkt(temp^@nexp)) + @f_randomness * real(#random) default: title = "Lissa's Juice, Dist. Method" param curve caption = "Curve" enum = "Lissajous" "Limacon" "Strophoid" "Prod-Quot" \ "Cycloid" "Conchoid" "Cardioid" "Cart" "Ciss" "Slope" \ "Dope" "Smile" \ "Episphere" "13" "BigEye" "15" \ "Butterfly Crash" default = 0 endparam param fixit caption = "Fixit for Dist. Mode" enum = "Minimum" "Maximum" default = 0 endparam param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "Lower Border for Trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "Upper Border for Trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param mode caption = "Curve Mode" enum = "Classical" "Arcus" "Hyperbolicus" "Ar Hyp" \ "Tango" "Tanga" "TangoHyp" "TangaHyp" \ "Exp/Log" "Sqr/Sqrt" default = 0 endparam param minMax caption = "Min/Max" default = FALSE endparam param with_z caption = "With #z Addition?" enum = "Yes" "Perhaps" "Maybe" "No" default = 2 endparam param x_loop caption = "X Period" default = 1 min = 1 hint = "Choose a Prime != Y Period" endparam param y_loop caption = "Y Period" default = 1 min = 1 hint = "Choose a Prime != X Period" endparam param par1 caption = "X Shape" default = 1.0 min = 0.0 endparam param par2 caption = "Y Shape" default = 1.0 min = 0.0 endparam param loop_count caption = "Loop Count" default = 2.0 min = 0.0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 1 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "Step Size" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 1.0 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param nexp caption = "Power" default = 0.5 min = 0.0 hint = "decrease to make thinner lines" endparam param x_exp caption = "X Exponent" default = 1.0 min = 0.0 endparam param y_exp caption = "Y Exponent" default = 1.0 min = 0.0 endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam func fkt13 caption = "Flavour for 13&15" default = log() hint = "Try out log, exp, ceil, atan" endfunc func fkt caption = "Additional Function" default = ident() endfunc } ; lissajuice_dist hevia_polygon { ; ; Kerry Mitchell 07jan00 ; ; Combined with Hevia module ; Andreas Lober 17mar2000 ; init: float x = 0 float y = 0 float xf = 0 float yf = 0 float xc = 0 float yc = 0 ; calculate the "vector" x = real(#z) y = imag(#z) ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif float x0=0 float y0=0 float x1=0 float y1=0 float x2=0 float y2=0 float x3=0 float y3=0 ;first point for Bezier if (@nbr == 0 || @nbr == 1 || @nbr == 2 || \ @nbr == 3 || @nbr == 4 || @nbr == 5) x0=xf y0=yc elseif (@nbr == 6 || @nbr == 7 || @nbr == 8 || \ @nbr == 9 || @nbr == 10 || @nbr == 11) x0=xc y0=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x0=xf y0=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x0=xc y0=yf endif ; second point for Bezier if (@nbr == 6 || @nbr == 7 || @nbr == 12 || \ @nbr == 13 || @nbr == 18 || @nbr == 19) x1=xf y1=yc elseif (@nbr == 0 || @nbr == 1 || @nbr == 14 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x1=xc y1=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x1=xf y1=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x1=xc y1=yf endif ; third point for Bezier if (@nbr == 8 || @nbr == 10 || @nbr == 14 || \ @nbr == 16 || @nbr == 21 || @nbr == 22) x2=xf y2=yc elseif (@nbr == 2 || @nbr == 4 || @nbr == 12 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x2=xc y2=yc elseif (@nbr == 0 || @nbr == 5 || @nbr == 6 || \ @nbr == 11 || @nbr == 19 || @nbr == 20) x2=xf y2=yf elseif (@nbr == 1 || @nbr == 3 || @nbr == 7 || \ @nbr == 9 || @nbr == 13 || @nbr == 15) x2=xc y2=yf endif ; fourth point for Bezier if (@nbr == 9 || @nbr == 11 || @nbr == 15 || \ @nbr == 17 || @nbr == 20 || @nbr == 23) x3=xf y3=yc elseif (@nbr == 3 || @nbr == 5 || @nbr == 13 || \ @nbr == 16 || @nbr == 19 || @nbr == 22) x3=xc y3=yc elseif (@nbr == 1 || @nbr == 4 || @nbr == 7 || \ @nbr == 10 || @nbr == 18 || @nbr == 21) x3=xf y3=yf elseif (@nbr == 0 || @nbr == 2 || @nbr == 6 || \ @nbr == 8 || @nbr == 12 || @nbr == 14) x3=xc y3=yf endif float t=0.0 float r=0.0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter=0 int j = 0 int iterfix=0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float x=0.0 float y=0.0 float u=0.0 float v=0.0 loop: iter = iter+1 u = real(#z) v = imag(#z) j = @polygonStart while (j <= @polygonEnd) t = @loopStart while (t <= @loopEnd) if (j == 1) x = x0*(1-t)^@startDistortion + x1*t^@endDistortion y = y0*(1-t)^@startDistortion + y1*t^@endDistortion elseif (j == 2) x = x1*(1-t)^@startDistortion + x2*t^@endDistortion y = y1*(1-t)^@startDistortion + y2*t^@endDistortion elseif (j == 3) x = x2*(1-t)^@startDistortion + x3*t^@endDistortion y = y2*(1-t)^@startDistortion + y3*t^@endDistortion elseif (j == 4) x = x3*(1-t)^@startDistortion + x0*t^@endDistortion y = y3*(1-t)^@startDistortion + y0*t^@endDistortion endif if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r = (x-u)*(x-u) + (y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = #z cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t = t + @dt endwhile j = j+1 endwhile final: float temp = 0 if (@colorby == 0) ; Minimum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = 0.01*iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 15) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @randomness * real(#random) default: title = "Hevia Polygon" param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 0 endparam param nbr caption = "Neighbours" enum = "abcd" "abdc" "acbd" "acdb" "adbc" "adcb" \ "bacd" "badc" "bcad" "bcda" "bdac" "bdca" \ "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" \ "dabc" "dacb" "dbca" "dbac" "dcab" "dcba" default = 0 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param polygonStart caption = "Polygon Start" default = 1 min = 1 max = 4 endparam param polygonEnd caption = "Polygon End" default = 4 min = 1 max = 4 endparam param loopStart caption = "Loop Start" default = -0.3 endparam param loopEnd caption = "Loop End" default = 1.3 endparam param startDistortion caption = "Start Distorsion" default = 1.0 endparam param endDistortion caption = "End Distorsion" default = 1.0 endparam param minMax caption = "Min/Max" default = FALSE endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption = "StepSize" default = 0.1 hint = "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min = 0.0 max = 2.0 endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param randomness caption = "Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param nexp caption = "Power" default = 0.5 min = 0.0 hint = "Decrease to make thinner lines" endparam func fkt caption = "Additional Function" default = ident() endfunc } hevigon { ; ; Kerry Mitchell 07jan00 ; Combined with Hevia module ; Andreas Lober 07mar2000 ; Static parts from the init section ; placed into the loop section ; ; Coloring method by Andreas Lober ; based on the Bezier Curve by Kerry Mitchell ; (lkm.ucl) with further ideas from ; Mark Townsend's files and examples. ; ; Additional hints and inspirations by ; Michèle Dessureault and Damien Jones. ; ; A big Thank You to Michèle Dessureault, ; Ruth Antwine, Emily Garlick (Queri), ; Richard Molnar, and Peter Kubik, ; who accompanied me during the development ; of these 6 curves as beta testers: ; "Hevia meets Bezier" ; "Hevier Curve" ; "Hevier, Dist. Meth." ; "Lissajous and others" ; "Lissa's Juice" ; "Lissa's Juice, Dist. Method" ; ; Another big Thank You to Karen Trottier ; and Emily Garlick (Queri) for their ; encouraging emails. ; ; Last update on March 17, 2000 ; * all colouring methods based on the Bezier Curve ; got a Joukowskij constant. ; init: float xf = 0 float yf = 0 float xc = 0 float yc = 0 float x0 = 0 float y0 = 0 float x1 = 0 float y1 = 0 float x2 = 0 float y2 = 0 float x3 = 0 float y3 = 0 float t = 0 float r = 0 float rfix = 1.0e20 if (@fixit == 1) ; Maximum rfix = -1 endif int iter = 0 int j = 0 int iterfix = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) float x = 0 float y = 0 float u = 0 float v = 0 complex zStart = 0 complex zfix = (0.0,0.0) complex cfix = (0.0,0.0) loop: iter = iter+1 zStart = #z + @i_randomness * #random if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif ; calculate the "vector" x = real(zStart) y = imag(zStart) if (@vectorJouk != 0 && zStart != 0) zStart = zStart + @vectorJouk/zStart endif ; calculate the neighborhood if (@neighbourhood == 0) ; round xf = @neighbour*round(x) yf = @neighbour*round(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 1) ; floor/ceil xf = floor(@neighbour*x)/@neighbour yf = floor(@neighbour*y)/@neighbour xc = ceil(@neighbour*x)/@neighbour yc = ceil(@neighbour*y)/@neighbour elseif (@neighbourhood == 2) ; trunc xf = @neighbour*trunc(x) yf = @neighbour*trunc(y) xc = xf+@neighbour yc = yf+@neighbour elseif (@neighbourhood == 3) ; flow xf = @neighbour*x yf = @neighbour*y xc = xf+@neighbour yc = yf+@neighbour endif ;first point for Bezier if (@nbr == 0 || @nbr == 1 || @nbr == 2 || \ @nbr == 3 || @nbr == 4 || @nbr == 5) x0=xf y0=yc elseif (@nbr == 6 || @nbr == 7 || @nbr == 8 || \ @nbr == 9 || @nbr == 10 || @nbr == 11) x0=xc y0=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x0=xf y0=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x0=xc y0=yf endif ; second point for Bezier if (@nbr == 6 || @nbr == 7 || @nbr == 12 || \ @nbr == 13 || @nbr == 18 || @nbr == 19) x1=xf y1=yc elseif (@nbr == 0 || @nbr == 1 || @nbr == 14 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x1=xc y1=yc elseif (@nbr == 12 || @nbr == 13 || @nbr == 14 || \ @nbr == 15 || @nbr == 16 || @nbr == 17) x1=xf y1=yf elseif (@nbr == 18 || @nbr == 19 || @nbr == 20 || \ @nbr == 21 || @nbr == 22 || @nbr == 23) x1=xc y1=yf endif ; third point for Bezier if (@nbr == 8 || @nbr == 10 || @nbr == 14 || \ @nbr == 16 || @nbr == 21 || @nbr == 22) x2=xf y2=yc elseif (@nbr == 2 || @nbr == 4 || @nbr == 12 || \ @nbr == 15 || @nbr == 20 || @nbr == 21) x2=xc y2=yc elseif (@nbr == 0 || @nbr == 5 || @nbr == 6 || \ @nbr == 11 || @nbr == 19 || @nbr == 20) x2=xf y2=yf elseif (@nbr == 1 || @nbr == 3 || @nbr == 7 || \ @nbr == 9 || @nbr == 13 || @nbr == 15) x2=xc y2=yf endif ; fourth point for Bezier if (@nbr == 9 || @nbr == 11 || @nbr == 15 || \ @nbr == 17 || @nbr == 20 || @nbr == 23) x3=xf y3=yc elseif (@nbr == 3 || @nbr == 5 || @nbr == 13 || \ @nbr == 16 || @nbr == 19 || @nbr == 22) x3=xc y3=yc elseif (@nbr == 1 || @nbr == 4 || @nbr == 7 || \ @nbr == 10 || @nbr == 18 || @nbr == 21) x3=xf y3=yf elseif (@nbr == 0 || @nbr == 2 || @nbr == 6 || \ @nbr == 8 || @nbr == 12 || @nbr == 14) x3=xc y3=yf endif t=0.0 r=0.0 if (@fixit == 1) ; Maximum rfix = -1 else rfix=1.0e20 endif x=0.0 y=0.0 u=real(zStart) v=imag(zStart) j = @polygonStart while (j <= @polygonEnd) t = @loopStart while (t <= @loopEnd) if (j == 1) x = x0*(1-t)^@startDistortion + x1*t^@endDistortion y = y0*(1-t)^@startDistortion + y1*t^@endDistortion elseif (j == 2) x = x1*(1-t)^@startDistortion + x2*t^@endDistortion y = y1*(1-t)^@startDistortion + y2*t^@endDistortion elseif (j == 3) x = x2*(1-t)^@startDistortion + x3*t^@endDistortion y = y2*(1-t)^@startDistortion + y3*t^@endDistortion elseif (j == 4) x = x3*(1-t)^@startDistortion + x0*t^@endDistortion y = y3*(1-t)^@startDistortion + y0*t^@endDistortion endif if (@minMax) float xm = -1 float ym = -1 if (x < y) xm = x ym = y else xm = y ym = x endif x = xm y = ym endif if (@curveJouk != 0) x = x + real(@curveJouk)/x y = y + imag(@curveJouk)/y endif r=(x-u)*(x-u)+(y-v)*(y-v) if ((r < rfix && @fixit == 0) || (r > rfix && @fixit == 1)) rfix = r iterfix = iter zfix = #z cfix = x + 1i*y endif if (@rotDegree != 0) zfix = (zfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre cfix = (cfix-@rotCentre)*exp(iter*1i*#pi/180*@rotDegree) + @rotCentre endif t=t+@dt endwhile j = j+1 endwhile final: float temp = 0 if (@colorby == 0) ; Fiximum Distance temp = rfix elseif (@colorby == 1) ; Iteration@Fix temp = 0.01*iterfix + |atan(zfix)|/(2*#pi) elseif (@colorby >= 2 || @colorby <= 15) ; Angle@Fix / Angle@Calc ; Angel@Fix / Angel@Calc ; Real+@Fix / Real+@Calc ; Imag+@Fix / Imag+@Calc ; RaTan@Fix / RaTan@Calc ; IaTan@Fix / IaTan@Calc if (@colorby == 2) temp = atan2(zfix) elseif (@colorby == 3) temp = atan2(zfix-cfix*iterfix)*iterfix elseif (@colorby == 4) temp = |atan(zfix)| elseif (@colorby == 5) temp = |atan(zfix-cfix*iterfix)|*iterfix elseif (@colorby == 6) temp = real(zfix)*|atan(zfix)| elseif (@colorby == 7) temp = real(zfix-cfix*iterfix)*iterfix elseif (@colorby == 8) temp = imag(zfix)*|atan(zfix)| elseif (@colorby == 9) temp = imag(zfix-cfix*iterfix)*iterfix elseif (@colorby == 10) temp = real(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 11) temp = (real(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 12) temp = imag(zfix)*atan2(zfix) + |atan(zfix)| elseif (@colorby == 13) temp = (imag(zfix-cfix*iterfix)*atan2(zfix-cfix*iterfix) + \ |atan(zfix-cfix*iterfix)|)*iterfix elseif (@colorby == 14) ; temp = atan2(real(zfix-cfix*iterfix)^imag(zfix-cfix*iterfix)) elseif (@colorby == 15) ; temp = atan2(imag(zfix-cfix*iterfix)^real(zfix-cfix*iterfix)) endif temp = temp/(2*#pi) if (temp < 0) temp = temp + 1.0 endif endif #index = real(@fkt(temp^@nexp)) + @f_randomness * real(#random) default: title = "Hevigon" param neighbourhood caption = "Neighbourhood" enum = "round" "floor/ceil" "trunc" "flow" default = 1 endparam param nbr caption = "Neighbours" enum = "abcd" "abdc" "acbd" "acdb" "adbc" "adcb" \ "bacd" "badc" "bcad" "bcda" "bdac" "bdca" \ "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" \ "dabc" "dacb" "dbca" "dbac" "dcab" "dcba" default = 0 endparam param neighbour caption = "Neighbour Factor" default = 1.0 endparam param fixit caption = "Fixit for Color by" enum = "Minimum" "Maximum" default = 0 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" \ "Angle@Fix" "Angle@Calc" \ "Angel@Fix" "Angel@Calc" \ "Real+@Fix" "Real+@Calc" "Imag+@Fix" "Imag+@Calc" \ "RaTan@Fix" "RaTan@Calc" "IaTan@Fix" "IaTan@Calc" \ "réel^imag" "imag^réel" default = 0 endparam param polygonStart caption = "Polygon Start" default = 1 min = 1 max = 4 endparam param polygonEnd caption = "Polygon End" default = 4 min = 1 max = 4 endparam param loopStart caption = "Loop Start" default = -0.3 endparam param loopEnd caption = "Loop End" default = 1.3 endparam param startDistortion caption = "Start Distorsion" default = 1.0 endparam param endDistortion caption = "End Distorsion" default = 1.0 endparam param minMax caption = "Min/Max" default = FALSE endparam param rotDegree caption = "Degré de Rotation" default = 0.0 min = -359.99999 max = 359.99999 hint = "Does not work with Color by Fiximum Distance" endparam param rotCentre caption = "Centre de Rotation" default = (0.0,0.0) endparam param dt caption= "StepSize" default=0.1 hint= "Decrease for smoother line, increase \ to see dots. Should be between 0 & 1." min=0.0 max=2.0 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param vectorJouk caption = "Joukowskij: Vector " default = (0.0,0.0) endparam param curveJouk caption = "Joukowskij Curvature" default = (0.0,0.0) endparam param nexp caption= "Power" default=0.5 min=0.0 hint= "decrease to make thinner lines" endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam func fkt caption = "Additional Function" default = ident() endfunc } coord_vs_coord { ; ; ; Last update on April 30, 2000 ; * all colouring methods got masking, ; masking function, transformation of coordinate systems, ; and a loop for this transformation. ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 complex zStart = 0 int l_coord = @coordLoop int koord = @coord int l_coord_dist = @coordLoop_dist int coord_dist = @coord_dist loop: zStart = #z ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif complex zz_ = zStart int loop_i = 0 while (loop_i < l_coord) loop_i = loop_i + 1 if (@coordMode == 1) ; cyclic koord = (koord+1)%19 endif if (koord == 1) zz_ = cabs(zz_) + 1i*atan2(zz_) elseif (koord == 2) float rad = cabs(zz_) float phi = atan2(zz_) zz_ = rad*(sinh(phi) + 1i*cosh(phi)) elseif (koord == 3) float rad = cabs(zz_) float phi = atan2(zz_) zz_ = rad*(asin(phi) + 1i*acos(phi)) elseif (koord == 4) float rad = cabs(zz_) float phi = atan2(zz_) zz_ = rad*(asinh(phi) + 1i*acosh(phi)) elseif (koord == 5) zz_ = real(sin(zz_)) + 1i*cos(zz_) elseif (koord == 6) zz_ = real(sinh(zz_)) + 1i*cosh(zz_) elseif (koord == 7) zz_ = real(asin(zz_)) + 1i*acos(zz_) elseif (koord == 8) zz_ = real(asinh(zz_)) + 1i*acosh(zz_) elseif (koord == 9) zz_ = abs(zz_) + conj(zz_)/(|zz_|+1e-20) elseif (koord >= 10 && koord <= 19) if (zz_ != 0) float rad = cabs(zz_) float re = real(zz_)/rad float im = imag(zz_)/rad if (koord == 10) zz_ = re*zz_ + im*conj(zz_) elseif (koord == 11) zz_ = re*zz_ + im*flip(zz_) elseif (koord == 12) zz_ = re*sin(zz_) + im*cos(zz_) elseif (koord == 13) zz_ = re*sin(zz_) + 1i*im*cos(zz_) elseif (koord == 14) zz_ = re*asin(zz_) + im*acos(zz_) elseif (koord == 15) zz_ = re*asin(zz_) + 1i*im*acos(zz_) elseif (koord == 16) zz_ = re*sinh(zz_) + im*cosh(zz_) elseif (koord == 17) zz_ = re*sinh(zz_) + 1i*im*cosh(zz_) elseif (koord == 18) zz_ = re*asinh(zz_) + im*acosh(zz_) elseif (koord == 19) zz_ = re*asinh(zz_) + 1i*im*acosh(zz_) endif endif endif endwhile ; Schleife über die Koordinaten zStart = @startFct(zStart) if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Transformation = another pack of coordinates ; complex _zz = zStart int loop_i_dist = 0 while (loop_i_dist < l_coord_dist) loop_i_dist = loop_i_dist + 1 if (@coordMode_dist == 1) ; cyclic coord_dist = (coord_dist+1)%19 endif if (coord_dist == 1) _zz = cabs(_zz) + 1i*atan2(_zz) elseif (coord_dist == 2) float rad = cabs(_zz) float phi = atan2(_zz) _zz = rad*(sinh(phi) + 1i*cosh(phi)) elseif (coord_dist == 3) float rad = cabs(_zz) float phi = atan2(_zz) _zz = rad*(asin(phi) + 1i*acos(phi)) elseif (coord_dist == 4) float rad = cabs(_zz) float phi = atan2(_zz) _zz = rad*(asinh(phi) + 1i*acosh(phi)) elseif (coord_dist == 5) _zz = real(sin(_zz)) + 1i*cos(_zz) elseif (coord_dist == 6) _zz = real(sinh(_zz)) + 1i*cosh(_zz) elseif (coord_dist == 7) _zz = real(asin(_zz)) + 1i*acos(_zz) elseif (coord_dist == 8) _zz = real(asinh(_zz)) + 1i*acosh(_zz) elseif (coord_dist == 9) _zz = abs(_zz) + conj(_zz)/(|_zz|+1e-20) elseif (coord_dist >= 10 && coord_dist <= 19) if (_zz != 0) float rad = cabs(_zz) float re = real(_zz)/rad float im = imag(_zz)/rad if (coord_dist == 10) _zz = re*_zz + im*conj(_zz) elseif (coord_dist == 11) _zz = re*_zz + im*flip(_zz) elseif (coord_dist == 12) _zz = re*sin(_zz) + im*cos(_zz) elseif (coord_dist == 13) _zz = re*sin(_zz) + 1i*im*cos(_zz) elseif (coord_dist == 14) _zz = re*asin(_zz) + im*acos(_zz) elseif (coord_dist == 15) _zz = re*asin(_zz) + 1i*im*acos(_zz) elseif (coord_dist == 16) _zz = re*sinh(_zz) + im*cosh(_zz) elseif (coord_dist == 17) _zz = re*sinh(_zz) + 1i*im*cosh(_zz) elseif (coord_dist == 18) _zz = re*asinh(_zz) + im*acosh(_zz) elseif (coord_dist == 19) _zz = re*asinh(_zz) + 1i*im*acosh(_zz) endif endif endif endwhile ; Schleife über die Koordinaten ; ; Calculate distances ; if (@with_zStart == 0) _dist = cabs(_zz - zStart) _rd = real(_zz - zStart) _id = imag(_zz - zStart) elseif (@with_zStart == 1) _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) elseif (@with_zStart == 2) _dist = cabs(_zz - zz_) _rd = real(_zz - zz_) _id = imag(_zz - zz_) endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(zStart - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(zStart-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(zStart-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(zStart)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 32 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" endif float mask = real(@fm(temp)) if (@masking == 1) ; Lower if (mask < @threshold_l) #solid = true endif elseif (@masking == 2) ; Upper if (mask > @threshold_u) #solid = true endif elseif (@masking == 3) ; Between if (mask > @threshold_l && mask < @threshold_u) #solid = true endif elseif (@masking == 4) ; Outside if (mask < @threshold_l || mask > @threshold_u) #solid = true endif endif #index = real(@fkt(temp)) + @f_randomness * real(#random) default: title = "Coord vs. Coord" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" endparam param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param coord caption = "Coordinates" enum = "Rectangular" \ "Polar" "PolarH" "aPolar" "aPolarH" \ "sin/cos" "sinh/cosh" "asin/acos" "asinh/acosh" \ "z/inv(z)" "z/conj(z)" "z/flip(z)" \ "?sin/cos" "?sin/i*cos" "?asin/acos" "?asin/i*acos" \ "?sinh/cosh" "?sinh/i*cosh" "?asinh/acosh" "?asinh/i*acosh" default = 0 endparam param coordLoop caption = "# Coord Loops" default = 1 min = 1 endparam param coordMode caption = "Mode Coord Loop" enum = "Static" "Dynamic" default = 0 endparam param coord_dist caption = "D: Coordinates" enum = "Rectangular" \ "Polar" "PolarH" "aPolar" "aPolarH" \ "sin/cos" "sinh/cosh" "asin/acos" "asinh/acosh" \ "z/inv(z)" "z/conj(z)" "z/flip(z)" \ "?sin/cos" "?sin/i*cos" "?asin/acos" "?asin/i*acos" \ "?sinh/cosh" "?sinh/i*cosh" "?asinh/acosh" "?asinh/i*acosh" default = 0 endparam param coordLoop_dist caption = "D: # Coord Loops" default = 1 min = 1 endparam param coordMode_dist caption = "D: Mode Coord Loop" enum = "Static" "Dynamic" default = 0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 15 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param with_zStart caption = "zStart everywhere Y/N" enum = "Yes" "No" "Don't know" default = 2 hint = "Works with the lattices" endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param masking caption = "Masking" enum = "None" "Lower" "Upper" "Between" "Outside" default = 0 endparam param threshold_l caption = "Lower Mask Threshold" default = 0.5 endparam param threshold_u caption = "Upper Mask Threshold" default = 1.0 endparam func startFct caption = "Start Function" default = ident() endfunc func fkt caption = "Additional Function" default = ident() hint = "Last Transfer to Index" endfunc func fm caption = "Masking Function" default = ident() endfunc } turnaround { ; ; Written by Andreas Lober May 16, 2000 ; ; Thanks goes to Samuel Monnier ; and Mark Townsend for their ; kind permission ; and their highly inspirational ; formulas ; init: float _dist = 0 float _rdist = 0 float _idist = 0 float _tdist = 0 float _cdist = 0 float _qdist = 0 float _rd = 0 float _id = 0 float _min_dist = 1e20 float _max_dist = -1 float _min_rdist = 1e20 float _max_rdist = -1 float _min_idist = 1e20 float _max_idist = -1 float _min_tdist = 1e20 float _max_tdist = -1 float _min_cdist = 1e20 float _max_cdist = -1 float _min_qdist = 1e20 float _max_qdist = -1 float temp = -1 ; complex temp = (-1,0) ; ; Traps ; bool _do_trap = true float _trap = 0.01 bool _do_rtrap = true float _rtrap = 0.01 bool _do_itrap = true float _itrap = 0.01 bool _do_ttrap = true float _ttrap = 0.01 bool _do_ctrap = true float _ctrap = 0.01 ; ; Sums ; float _sum = 0 float _rsum = 0 float _isum = 0 float _tsum = 0 float _csum = 0 float _qsum = 0 ; ; Weighted Sums ; float _sum_w = 0 float _rsum_w = 0 float _isum_w = 0 float _tsum_w = 0 float _csum_w = 0 float _qsum_w = 0 ; ; Square-Weighted Sums ; float _sum_w2 = 0 float _rsum_w2 = 0 float _isum_w2 = 0 float _tsum_w2 = 0 float _csum_w2 = 0 float _qsum_w2 = 0 complex _zz = #z ; init _zz int iter = 0 complex zStart = 0 int l_coord = @coordLoop int koord = @coord float arg = 0 float testAngle1 = #pi/@corte1 float testAngle2 = 3*testAngle1 complex rotAngle1 = @corte2*1i*testAngle1 complex rotAngle2 = @corte2*1i*testAngle2 loop: zStart = #z ; init zStart int loop_i = 0 while (loop_i < l_coord) loop_i = loop_i + 1 if (@coordMode == 1) ; cyclic koord = (koord+1)%19 endif if (koord == 1) zStart = cabs(zStart) + 1i*atan2(zStart) elseif (koord == 2) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(sinh(phi) + 1i*cosh(phi)) elseif (koord == 3) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asin(phi) + 1i*acos(phi)) elseif (koord == 4) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asinh(phi) + 1i*acosh(phi)) elseif (koord == 5) zStart = real(sin(zStart)) + 1i*cos(zStart) elseif (koord == 6) zStart = real(sinh(zStart)) + 1i*cosh(zStart) elseif (koord == 7) zStart = real(asin(zStart)) + 1i*acos(zStart) elseif (koord == 8) zStart = real(asinh(zStart)) + 1i*acosh(zStart) elseif (koord == 9) zStart = abs(zStart) + conj(zStart)/(|zStart|+1e-20) elseif (koord >= 10 && koord <= 19) if (zStart != 0) float rad = cabs(zStart) float re = real(zStart)/rad float im = imag(zStart)/rad if (koord == 10) zStart = re*zStart + im*conj(zStart) elseif (koord == 11) zStart = re*zStart + im*flip(zStart) elseif (koord == 12) zStart = re*sin(zStart) + im*cos(zStart) elseif (koord == 13) zStart = re*sin(zStart) + 1i*im*cos(zStart) elseif (koord == 14) zStart = re*asin(zStart) + im*acos(zStart) elseif (koord == 15) zStart = re*asin(zStart) + 1i*im*acos(zStart) elseif (koord == 16) zStart = re*sinh(zStart) + im*cosh(zStart) elseif (koord == 17) zStart = re*sinh(zStart) + 1i*im*cosh(zStart) elseif (koord == 18) zStart = re*asinh(zStart) + im*acosh(zStart) elseif (koord == 19) zStart = re*asinh(zStart) + 1i*im*acosh(zStart) endif endif endif endwhile ; Schleife über die Koordinaten zStart = @startFct(zStart) if (@i_randomness != 0) zStart = zStart + @i_randomness * #random endif ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 endif _zz = zStart arg = atan2(_zz) if (abs(arg) < testAngle1) _zz = _zz*exp(rotAngle1) elseif (abs(arg) > testAngle2) _zz = _zz*exp(rotAngle2) else if (arg < 0) arg = arg + 2*#pi endif if (@turnMode == 0) _zz = @fn1(_zz)*arg elseif (@turnMode == 1) _zz = conj(@fn1(_zz)+1i*arg/(2*#pi)) elseif (@turnMode == 2 || @turnMode == 3 || @turnMode == 4) _zz = @fn1(_zz) float x = real(_zz)/arg float y = imag(_zz)/arg float xOld = 0 int iter2 = 0 while (iter2 < 5) iter2 = iter2+1 xOld = x if (@turnMode == 2) x = x - sin(y + sin(y)) y = y - sin(xOld + sin(xOld)) elseif (@turnMode == 3) x = x - sin(y + sin(y + sin(y))) y = y - sin(xOld + sin(xOld + sin(xOld))) else x = x - sin(y + log(y + cos(y))) y = y - sin(xOld + log(xOld + cos(xOld))) endif endwhile _zz = x + 1i*y endif endif iter = iter+1 ; ; Calculate distances ; if (@with_zStart) _dist = cabs(_zz - zStart) _rd = real(_zz - zStart) _id = imag(_zz - zStart) else _dist = cabs(_zz - #z) _rd = real(_zz - #z) _id = imag(_zz - #z) endif _rdist = abs(_rd) _idist = abs(_id) if _rd > _id _tdist = _rdist _cdist = _idist if _id == 0 _qdist = _rdist else _qdist = _rdist / _idist endif else _tdist = _idist _cdist = _rdist if _rd == 0 _qdist = _idist else _qdist = _idist / _rdist endif endif ; ; Calculate Min ; if @_mode == 0 && _dist < _min_dist _min_dist = _dist endif if @_mode == 1 && _rdist < _min_rdist _min_rdist = _rdist endif if @_mode == 2 && _idist < _min_idist _min_idist = _idist endif if @_mode == 3 && _tdist < _min_tdist _min_tdist = _tdist endif if @_mode == 4 && _tdist < _min_cdist _min_cdist = _cdist endif if @_mode == 29 && _qdist < _min_qdist _min_qdist = _qdist endif ; ; Calculate Max ; if @_mode == 5 && _dist > _max_dist _max_dist = _dist endif if @_mode == 6 && _rdist > _max_rdist _max_rdist = _rdist endif if @_mode == 7 && _rdist > _max_rdist _max_idist = _idist endif if @_mode == 8 && _tdist > _max_tdist _max_tdist = _tdist endif if @_mode == 9 && _cdist > _max_cdist _max_cdist = _cdist endif if @_mode == 30 && _qdist > _max_qdist _max_qdist = _qdist endif ; ; Calculate the traps ; if @_mode == 19 && _do_trap && _dist > @_trap_min && _dist < @_trap_max _do_trap = false _trap =_dist endif if @_mode == 20 && _do_rtrap && _rdist > @_trap_min && _rdist < @_trap_max _do_rtrap = false _rtrap =_rdist endif if @_mode == 21 && _do_itrap && _idist > @_trap_min && _idist < @_trap_max _do_itrap = false _itrap =_idist endif if @_mode == 22 && _do_ttrap && _tdist > @_trap_min && _tdist < @_trap_max _do_ttrap = false _ttrap =_tdist endif if @_mode == 23 && _do_ctrap && _cdist > @_trap_min && _cdist < @_trap_max _do_ctrap = false _ctrap =_cdist endif ; ; Calculate the sums ; if @_mode == 24 _sum = _sum + _dist endif if @_mode == 25 _rsum = _rsum + _rdist endif if @_mode == 26 _isum = _isum + _idist endif if @_mode == 27 _tsum = _tsum + _tdist endif if @_mode == 28 _csum = _csum + _cdist endif if @_mode == 31 _qsum = _qsum + _qdist endif ; ; Calculate the weighted sums ; if @_mode == 33 _sum_w = _sum + _dist/iter endif if @_mode == 34 _rsum_w = _rsum + _rdist/iter endif if @_mode == 35 _isum_w = _isum + _idist/iter endif if @_mode == 36 _tsum_w = _tsum + _tdist/iter endif if @_mode == 37 _csum_w = _csum + _cdist/iter endif if @_mode == 38 _qsum_w = _qsum + _qdist/iter endif ; ; Calculate the square-weighted sums ; if @_mode == 39 _sum_w2 = _sum + _dist/iter^2 endif if @_mode == 40 _rsum_w2 = _rsum + _rdist/iter^2 endif if @_mode == 41 _isum_w2 = _isum + _idist/iter^2 endif if @_mode == 42 _tsum_w2 = _tsum + _tdist/iter^2 endif if @_mode == 43 _csum_w2 = _csum + _cdist/iter^2 endif if @_mode == 44 _qsum_w2 = _qsum + _qdist/iter^2 endif final: if @_mode == 0 temp = _min_dist ; "Min Dist" elseif @_mode == 1 temp = _min_rdist ; "Min Real" elseif @_mode == 2 temp = _min_idist ; "Min Imag" elseif @_mode == 3 temp = _min_tdist ; "Min Triang" elseif @_mode == 4 temp = _min_cdist ; "Min Cubus" elseif @_mode == 5 temp = _max_dist ; "Max Dist" elseif @_mode == 6 temp = _max_rdist ; "Max Real" elseif @_mode == 7 temp = _max_idist ; "Max Imag" elseif @_mode == 8 temp = _max_tdist ; "Max Triang" elseif @_mode == 9 temp = _max_cdist ; "Max Cubus" elseif @_mode == 10 temp = cabs(_zz - #pixel) ; "Act Dist" elseif @_mode == 11 temp = abs(real(_zz-#pixel)) ; "Act Real" elseif @_mode == 12 temp = abs(imag(_zz-#pixel)) ; "Act Imag" elseif @_mode == 13 temp = _dist ; "Last Dist" elseif @_mode == 14 temp = _rdist ; "Last Real" elseif @_mode == 15 temp = _idist ; "Last Imag" elseif @_mode == 16 temp = _tdist ; "Last Triang" elseif @_mode == 17 temp = _cdist ; "Last Cubus" elseif @_mode == 18 temp = abs(cabs(_zz)-cabs(#pixel)) ; "Difference" elseif @_mode == 19 temp = _trap ; "Trap Dist" elseif @_mode == 20 temp = _rtrap ; "Trap Real" elseif @_mode == 21 temp = _itrap ; "Trap Imag" elseif @_mode == 22 temp = _ttrap ; "Trap Triang" elseif @_mode == 23 temp = _ctrap ; "Trap Cubus" elseif @_mode == 24 temp = _sum ; "Sum Dist" elseif @_mode == 25 temp = _rsum ; "Sum Real" elseif @_mode == 26 temp = _isum ; "Sum Imag" elseif @_mode == 27 temp = _tsum ; "Sum Triang" elseif @_mode == 28 temp = _csum ; "Sum Cubus" elseif @_mode == 29 temp = _min_qdist ; "Min MinQuot" elseif @_mode == 30 temp = _max_qdist ; "Max MinQuot" elseif @_mode == 31 temp = _qsum ; "Sum MinQuot" elseif @_mode == 32 temp = _qdist ; "Last MinQuot" elseif @_mode == 33 temp = _sum_w elseif @_mode == 34 temp = _rsum_w elseif @_mode == 35 temp = _isum_w elseif @_mode == 36 temp = _tsum_w elseif @_mode == 37 temp = _csum_w elseif @_mode == 38 temp = _qsum_w elseif @_mode == 39 temp = _sum_w2 elseif @_mode == 40 temp = _rsum_w2 elseif @_mode == 41 temp = _isum_w2 elseif @_mode == 42 temp = _tsum_w2 elseif @_mode == 43 temp = _csum_w2 elseif @_mode == 44 temp = _qsum_w2 endif float mask = real(@fm(temp)) if (@masking == 1) ; Lower if (mask < @threshold_l) #solid = true endif elseif (@masking == 2) ; Upper if (mask > @threshold_u) #solid = true endif elseif (@masking == 3) ; Between if (mask > @threshold_l && mask < @threshold_u) #solid = true endif elseif (@masking == 4) ; Outside if (mask < @threshold_l || mask > @threshold_u) #solid = true endif endif float to_index = real(@fkt(temp)) if (@randomness != 0) to_index = to_index + @randomness * real(#random) endif if (@txtr_gnarl != 0) _zz = _zz-trunc(_zz*@txtr_gnarl_scale)/@txtr_gnarl_scale float x = real(_zz) float y = imag(_zz) float xOld = 0 int iter3 = @txtr_gnarl_octaves while (iter3 > 0) iter3 = iter3-1 xOld = x x = x - sin(y + sin(y)) y = y - sin(xOld + sin(xOld)) endwhile float textureGnarl = 0 if (@txtr_gnarl_type == 0) textureGnarl = abs(x) elseif (@txtr_gnarl_type == 1) textureGnarl = abs(x)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 2) textureGnarl = abs(x-y) elseif (@txtr_gnarl_type == 3) textureGnarl = abs(x-y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 4) textureGnarl = abs(x+y)/2 elseif (@txtr_gnarl_type == 5) textureGnarl = abs(x*y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 6) textureGnarl = atan2(x+1i*y)/(2*#pi) if (textureGnarl < 0) textureGnarl = textureGnarl + 1 endif endif to_index = to_index + @txtr_gnarl*textureGnarl endif if (@txtr_PopCorn != 0) _zz = _zz-trunc(_zz*@txtr_PopCorn_scale)/@txtr_PopCorn_scale float x = real(_zz) float y = imag(_zz) float xOld = 0 int iter3 = @txtr_PopCorn_octaves while (iter3 > 0) iter3 = iter3-1 xOld = x x = x - sin(y + log(y + cos(y))) y = y - sin(xOld + log(xOld + cos(xOld))) ;x = x - sin(y + sin(y + sin(y))) ;y = y - sin(xOld + sin(xOld + sin(xOld))) endwhile float texturePopCorn = 0 if (@txtr_PopCorn_type == 0) texturePopCorn = abs(x) elseif (@txtr_PopCorn_type == 1) texturePopCorn = abs(x)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 2) texturePopCorn = abs(x-y) elseif (@txtr_PopCorn_type == 3) texturePopCorn = abs(x-y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 4) texturePopCorn = abs(x+y)/2 elseif (@txtr_PopCorn_type == 5) texturePopCorn = abs(x*y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 6) texturePopCorn = atan2(x+1i*y)/(2*#pi) if (texturePopCorn < 0) texturePopCorn = texturePopCorn + 1 endif endif to_index = to_index + @txtr_PopCorn*texturePopCorn endif #index = to_index default: title = "turnaround" param _mode caption = "Dist. Mode" enum = "Min Dist" "Min Real" "Min Imag" "Min Triang" "Min Cubus" \ "Max Dist" "Max Real" "Max Imag" "Max Triang" "Max Cubus" \ "Act Dist" "Act Real" "Act Imag" \ "Last Dist" "Last Real" "Last Imag" "Last Triang" "Last Cubus" \ "Difference" \ "Trap Dist" "Trap Real" "Trap Imag" "Trap Triang" "Trap Cubus" \ "Sum Dist" "Sum Real" "Sum Imag" "Sum Triang" "Sum Cubus" \ "Min MinQuot" "Max MinQuot" "Sum MinQuot" "Last MinQuot" \ "W-Sum Dist" "W-Sum Real" "W-Sum Imag" "W-Sum Triang" "W-Sum Cubus" \ "W^2-Sum Dist" "W^2-Sum Real" "W^2-Sum Imag" \ "W^2-Sum Triang" "W^2-Sum Cubus" endparam param turnMode caption = "Turnaround Mode" enum = "firth" "twooth" "threeth" "fourth" "fifth" default = 0 endparam func fkt caption = "Additional Function" default = ident() endfunc param _trap_min caption = "lower border for trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param _trap_max caption = "upper border for trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param coord caption = "Coordinates" enum = "Rectangular" \ "Polar" "PolarH" "aPolar" "aPolarH" \ "sin/cos" "sinh/cosh" "asin/acos" "asinh/acosh" \ "z/inv(z)" "z/conj(z)" "z/flip(z)" \ "?sin/cos" "?sin/i*cos" "?asin/acos" "?asin/i*acos" \ "?sinh/cosh" "?sinh/i*cosh" "?asinh/acosh" "?asinh/i*acosh" default = 0 endparam param coordLoop caption = "# Coord Loops" default = 1 min = 1 endparam param coordMode caption = "Mode Coord Loop" enum = "Static" "Dynamic" default = 0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (0.1,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (0.1,0.0) endparam param corte1 caption = "Old Cutting edges" default = 4.0 endparam param corte2 caption = "New Cutting edges" default = 2.0 endparam param with_zStart caption = "zStart everywhere Y/N" default = false hint = "Works with the lattices" endparam param i_randomness caption = "i: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param randomness caption = "f: Randomness" hint = "This adds a random texture to the coloring." default = 0.0 endparam param txtr_gnarl caption = "T: Gnarl Texture" hint = "This adds a Gnarl texture to the coloring." default = 0.0 endparam param txtr_gnarl_type caption = "T: Gnarl Type" enum = "x" "x/d" "x-y" "(x-y)/d" "(x+y)/2" "x*y/d" "Angle" default = 0 endparam param txtr_gnarl_scale caption = "T: Gnarl Scale" hint = "Scaling Factor for this Gnarl texture." default = 1.0 endparam param txtr_gnarl_octaves caption = "T: Gnarl Octaves" default = 5 min = 1 endparam param txtr_PopCorn caption = "T: PopCorn Texture" hint = "This adds a PopCorn texture to the coloring." default = 0.0 endparam param txtr_PopCorn_type caption = "T: PopCorn Type" enum = "x" "x/d" "x-y" "(x-y)/d" "(x+y)/2" "x*y/d" "Angle" default = 0 endparam param txtr_PopCorn_scale caption = "T: PopCorn Scale" hint = "Scaling Factor for this PopCorn texture." default = 1.0 endparam param txtr_PopCorn_octaves caption = "T: PopCorn Octaves" default = 5 min = 1 endparam param masking caption = "Masking" enum = "None" "Lower" "Upper" "Between" "Outside" default = 0 endparam param threshold_l caption = "Lower Mask Threshold" default = 0.5 endparam param threshold_u caption = "Upper Mask Threshold" default = 1.0 endparam func fn1 caption = "Turnaround" default = flip() endfunc func startFct caption = "Start Function" default = ident() endfunc func fkt caption = "Additional Function" default = ident() endfunc func fm caption = "Masking Function" default = ident() endfunc } MedialCut { init: complex zCalc = 0 float reCalc = 0 float imCalc = 0 float re1 = 0 float re2 = 0 float re3 = 0 float im1 = 0 float im2 = 0 float im3 = 0 int iter = 0 float rfix = 0 if (@fixit == 1) ; Min float rfix = 1e20 elseif (@fixit == 2) ; Max float rfix = -1e20 endif float r = 0 float granulation = 1000*@scale loop: iter = iter + 1 zCalc = @startFct(#z) zCalc = (round(zCalc*granulation)/granulation - round(zCalc*@scale)) * 1000 reCalc = real(zCalc) imCalc = imag(zCalc) re1 = trunc(reCalc/100) re2 = trunc(reCalc/10 - re1*10) re3 = trunc(reCalc/1 - re1*100 - re2*10) im1 = trunc(imCalc/100) im2 = trunc(imCalc/10 - im1*10) im3 = trunc(imCalc/1 - im1*100 - im2*10) float small = 0 float middl = 0 float large = 0 if (@calculate == 0) small = re1 middl = re2 large = re3 elseif (@calculate == 1) small = im1 middl = im2 large = im3 elseif (@calculate == 2) if (re1im1) small = re1 else small = im1 endif if (re2>im2) middl = re2 else middl = im2 endif if (re3>im3) large = re3 else large = im3 endif elseif (@calculate == 4) small = re1+im1 middl = re2+im2 large = re3+im3 elseif (@calculate == 5) small = re1*im1 middl = re2*im2 large = re3*im3 elseif (@calculate == 6) small = re1/im1 middl = re2/im2 large = re3/im3 elseif (@calculate == 7) small = im1/re1 middl = im2/re2 large = im3/re3 elseif (@calculate == 8) small = abs(im1-re1) middl = abs(im2-re2) large = abs(im3-re3) endif ; prevent those numbers from being zero: small = small + @smooth middl = middl + @smooth large = large + @smooth ;Golden Cut: small/large = large/whole float sm_mi = abs(small/middl) float mi_la = abs(middl/large) if (@watch == 0) r = abs(sm_mi-mi_la) elseif (@watch == 1) if (sm_mimi_la) r = sm_mi else r = mi_la endif elseif (@watch == 3) r = sm_mi + mi_la elseif (@watch == 4) r = 1/sm_mi + 1/mi_la elseif (@watch == 5) r = abs(1/sm_mi - 1/mi_la) endif if (@fixit == 0) ; Last rfix = r elseif (@fixit == 1) ; Min if (rfix>r) rfix = r endif elseif (@fixit == 2) ; Max if (rfix la_wh) r = sm_la else r = la_wh endif endif if (@fixit == 0) ; Last rfix = r elseif (@fixit == 1) ; Min if (rfix>r) rfix = r endif elseif (@fixit == 2) ; Max if (rfix 0) if (@skipMode == 1) ; skip first n if (iter > @skipConst) do_loop = TRUE else do_loop = FALSE endif elseif (@skipMode == 2) ; skip after n if (iter > @skipConst) do_loop = FALSE else do_loop = TRUE endif elseif (@skipMode == 3) ; skip every nth if (iter%@skipConst == 0) do_loop = FALSE else do_loop = TRUE endif elseif (@skipMode == 4) ; skip but the nth if (iter%@skipConst == 0) do_loop = TRUE else do_loop = FALSE endif endif endif ; skipMode > 0 else do_loop = FALSE endif ; no_trap if (do_loop) if (@init_z == 0) zStart = #z elseif (@init_z == 1) zStart = zStart + #z elseif (@init_z == 2) zStart = zStart + #z/iter elseif (@init_z == 3) zStart = zStart + #z/iter^2 elseif (@init_z == 4) zStart = zStart + #z + #pixel elseif (@init_z == 5) zStart = abs(#pixel - #z) elseif (@init_z == 6) zStart = (#pixel + #z)/2 endif; if (@fixit > 0) int loop_i = 0 while (loop_i < l_coord) loop_i = loop_i + 1 if (@coordMode == 1) ; cyclic koord = (koord+1)%19 endif if (koord == 1) zStart = cabs(zStart) + 1i*atan2(zStart) elseif (koord == 2) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(sinh(phi) + 1i*cosh(phi)) elseif (koord == 3) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asin(phi) + 1i*acos(phi)) elseif (koord == 4) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asinh(phi) + 1i*acosh(phi)) elseif (koord == 5) zStart = real(sin(zStart)) + 1i*cos(zStart) elseif (koord == 6) zStart = real(sinh(zStart)) + 1i*cosh(zStart) elseif (koord == 7) zStart = real(asin(zStart)) + 1i*acos(zStart) elseif (koord == 8) zStart = real(asinh(zStart)) + 1i*acosh(zStart) elseif (koord == 9) zStart = abs(zStart) + conj(zStart)/(|zStart|+1e-20) elseif (koord >= 10 && koord <= 19) if (zStart != 0) float rad = cabs(zStart) float re = real(zStart)/rad float im = imag(zStart)/rad if (koord == 10) zStart = re*zStart + im*conj(zStart) elseif (koord == 11) zStart = re*zStart + im*flip(zStart) elseif (koord == 12) zStart = re*sin(zStart) + im*cos(zStart) elseif (koord == 13) zStart = re*sin(zStart) + 1i*im*cos(zStart) elseif (koord == 14) zStart = re*asin(zStart) + im*acos(zStart) elseif (koord == 15) zStart = re*asin(zStart) + 1i*im*acos(zStart) elseif (koord == 16) zStart = re*sinh(zStart) + im*cosh(zStart) elseif (koord == 17) zStart = re*sinh(zStart) + 1i*im*cosh(zStart) elseif (koord == 18) zStart = re*asinh(zStart) + im*acosh(zStart) elseif (koord == 19) zStart = re*asinh(zStart) + 1i*im*acosh(zStart) endif endif endif endwhile ; Schleife über die Koordinaten ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice >= 21 && @lattice <= 23) float reL1 = real(@lattFac1) float imL1 = imag(@lattFac1) float reL2 = real(@lattFac2) float imL2 = imag(@lattFac2) float reZ = reL1*real(zStart) float imZ = imL1*imag(zStart) if (reL1 != 0) reZ = reZ%reL2 endif if (imL1 != 0) imZ = imZ%imL2 endif if (@lattice == 21) zStart = reZ + 1i*imZ elseif (@lattice == 22) zStart = reZ/@lattFac1 + 1i*imZ/@lattFac2 elseif (@lattice == 23) zStart = @lattFac1/reZ + 1i*@lattFac2/imZ endif endif ; lattices if (@turnMode) complex zRound = 0 complex zZ = zStart if (@turnScale != 0) complex zRound = round(zStart*@turnScale)/@turnScale complex zZ = zStart-zRound endif float targ = atan2(zZ) ; "Turn around" part taken from Sam if (abs(targ) < testAngle1) zStart = zZ*exp(rotAngle1)+zRound elseif (abs(targ) > testAngle2) zStart = zZ*exp(rotAngle2)+zRound endif endif ; @turnMode if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif zStart = @fn2(zStart) if (@mode == 0) rz = |real(zStart)| iz = |imag(zStart)| elseif (@mode == 1) rz = |real(zStart)| iz = rz elseif (@mode == 2) iz = |imag(zStart)| rz = iz elseif (@mode == 3) rz = |zStart| iz = rz elseif (@mode == 4) rz = atan2(zStart) if (rz < 0) rz = rz + 2*#pi endif iz = rz elseif (@mode == 5) rz = real(atan(zStart)) if (rz < 0) rz = rz + 2*#pi endif iz = imag(atan(zStart)) if (iz < 0) iz = iz + 2*#pi endif elseif (@mode == 6) rz = atan2(zStart) if (rz < 0) rz = rz + 2*#pi endif iz = |zStart| endif _rz = (rz - trunc(rz*startSnip)/startSnip)*endOfSnip _iz = (iz - trunc(iz*startSnip)/startSnip)*endOfSnip if (@withFinalTrunc) _rz = trunc(_rz) _iz = trunc(_iz) endif int j = @numOfTests while (j > 0) j = j-1 re1 = trunc(_rz/100) re2 = trunc(_rz/10 - re1*10) re3 = trunc(_rz/1 - re1*100 - re2*10) im1 = trunc(_iz/100) im2 = trunc(_iz/10 - im1*10) im3 = trunc(_iz/1 - im1*100 - im2*10) reTest = re1^3 + re2^3 + re3^2 imTest = im1^3 + im2^3 + im3^2 if (@calcMode == 0) re_R = |_rz| im_R = |_iz| elseif (@calcMode == 1) re_R = |_rz - reTest| im_R = |_iz - imTest| elseif (@calcMode == 2) re_R = |153 - reTest| im_R = |153 - imTest| endif _rz = reTest _iz = imTest endwhile ; j > 0 _rz = re_R _iz = im_R if (@fixit == 1) ; last mrz = _rz miz = _iz elseif (@fixit == 2) ; min if (_rz < mrz) mrz = _rz endif if (_iz < miz) miz = _iz endif elseif (@fixit == 3) ; max if (_rz > mrz) mrz = _rz endif if (_iz > miz) miz = _iz endif elseif (@fixit == 4) ; sum mrz = mrz + _rz miz = miz + _iz elseif (@fixit == 5) ; w-sum mrz = mrz + _rz/iter miz = miz + _iz/iter elseif (@fixit == 6) ; w2-sum float itmp = iter^2 mrz = mrz + _rz/itmp miz = miz + _iz/itmp elseif (@fixit == 7) ; wS-sum float itmp = sqrt(iter) mrz = mrz + _rz/itmp miz = miz + _iz/itmp elseif (@fixit == 8) ; g-sum float itmp = exp(-iter) mrz = mrz + _rz*itmp miz = miz + _iz*itmp elseif (@fixit == 9) ; g'-sum float itmp = exp(-iter)*iter mrz = mrz + _rz*itmp miz = miz + _iz*itmp elseif (@fixit == 10) ; ag-sum float itmp = exp(-iter)*(-1)^iter mrz = mrz + _rz*itmp miz = miz + _iz*itmp elseif (@fixit == 11) ; l-sum mrz = mrz + log(_rz) miz = miz + log(_iz) elseif (@fixit == 12) ; lw-sum mrz = mrz + log(_rz)/iter miz = miz + log(_iz)/iter elseif (@fixit == 13) ; lw2-sum float itmp = iter^2 mrz = mrz + log(_rz)/itmp miz = miz + log(_iz)/itmp endif endif if (@trapMode > 0) if (@trapMode == 1) if ( mrz > @lowerTrap && mrz < @upperTrap \ && miz > @lowerTrap && miz < @upperTrap ) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 2) if (cabs(zStart) > @lowerTrap && cabs(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 3) if (real(zStart) > @lowerTrap && real(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 4) if (imag(zStart) > @lowerTrap && imag(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 5) if (|real(zStart)| > @lowerTrap && |real(zStart)| < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 6) if (|imag(zStart)| > @lowerTrap && |imag(zStart)| < @upperTrap) no_trap = FALSE do_loop = FALSE endif endif ; At last trap the values if !do_loop trz = mrz tiz = miz endif endif endif ; do_loop final: if (@fixit == 0) ; final int loop_i = 0 while (loop_i < l_coord) loop_i = loop_i + 1 if (@coordMode == 1) ; cyclic koord = (koord+1)%19 endif if (koord == 1) zStart = cabs(zStart) + 1i*atan2(zStart) elseif (koord == 2) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(sinh(phi) + 1i*cosh(phi)) elseif (koord == 3) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asin(phi) + 1i*acos(phi)) elseif (koord == 4) float rad = cabs(zStart) float phi = atan2(zStart) zStart = rad*(asinh(phi) + 1i*acosh(phi)) elseif (koord == 5) zStart = real(sin(zStart)) + 1i*cos(zStart) elseif (koord == 6) zStart = real(sinh(zStart)) + 1i*cosh(zStart) elseif (koord == 7) zStart = real(asin(zStart)) + 1i*acos(zStart) elseif (koord == 8) zStart = real(asinh(zStart)) + 1i*acosh(zStart) elseif (koord == 9) zStart = abs(zStart) + conj(zStart)/(|zStart|+1e-20) elseif (koord >= 10 && koord <= 19) if (zStart != 0) float rad = cabs(zStart) float re = real(zStart)/rad float im = imag(zStart)/rad if (koord == 10) zStart = re*zStart + im*conj(zStart) elseif (koord == 11) zStart = re*zStart + im*flip(zStart) elseif (koord == 12) zStart = re*sin(zStart) + im*cos(zStart) elseif (koord == 13) zStart = re*sin(zStart) + 1i*im*cos(zStart) elseif (koord == 14) zStart = re*asin(zStart) + im*acos(zStart) elseif (koord == 15) zStart = re*asin(zStart) + 1i*im*acos(zStart) elseif (koord == 16) zStart = re*sinh(zStart) + im*cosh(zStart) elseif (koord == 17) zStart = re*sinh(zStart) + 1i*im*cosh(zStart) elseif (koord == 18) zStart = re*asinh(zStart) + im*acosh(zStart) elseif (koord == 19) zStart = re*asinh(zStart) + 1i*im*acosh(zStart) endif endif endif endwhile ; Schleife über die Koordinaten ; ; Start with the lattices ; if (@lattice == 1) zStart = round(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 2) zStart = trunc(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 3) zStart = floor(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 4) zStart = ceil(@lattFac1*zStart) - @lattFac2*zStart elseif (@lattice == 5) zStart = abs(@lattFac1*zStart) - @lattFac2*zStart^2 elseif (@lattice == 6) zStart = round(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 7) zStart = trunc(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 8) zStart = floor(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 9) zStart = ceil(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 10) zStart = abs(@lattFac1*zStart) \ - @lattFac2*sqrt(real(zStart)*imag(zStart)) elseif (@lattice == 11) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 12) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 13) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 14) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*zStart)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 15) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*zStart^2)^2) \ - @lattFac2*zStart^2 elseif (@lattice == 16) zStart = round((round(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 17) zStart = trunc((trunc(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 18) zStart = floor((floor(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 19) zStart = ceil((ceil(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice == 20) zStart = abs((abs(@lattFac1*zStart) \ - @lattFac1*sqrt(real(zStart)*imag(zStart)))^2) \ - @lattFac2*zStart^2 elseif (@lattice >= 21 && @lattice <= 23) float reL1 = real(@lattFac1) float imL1 = imag(@lattFac1) float reL2 = real(@lattFac2) float imL2 = imag(@lattFac2) float reZ = reL1*real(zStart) float imZ = imL1*imag(zStart) if (reL1 != 0) reZ = reZ%reL2 endif if (imL1 != 0) imZ = imZ%imL2 endif if (@lattice == 21) zStart = reZ + 1i*imZ elseif (@lattice == 22) zStart = reZ/@lattFac1 + 1i*imZ/@lattFac2 elseif (@lattice == 23) zStart = @lattFac1/reZ + 1i*@lattFac2/imZ endif endif ; lattices if (@turnMode) complex zRound = 0 complex zZ = zStart if (@turnScale != 0) complex zRound = round(zStart*@turnScale)/@turnScale complex zZ = zStart-zRound endif float targ = atan2(zZ) ; "Turn around" part taken from Sam if (abs(targ) < testAngle1) zStart = zZ*exp(rotAngle1)+zRound elseif (abs(targ) > testAngle2) zStart = zZ*exp(rotAngle2)+zRound endif endif ; @turnMode if (@zJouk != 0 && zStart != 0) zStart = zStart + @zJouk/zStart endif zStart = @fn2(zStart) if (@mode == 0) rz = |real(zStart)| iz = |imag(zStart)| elseif (@mode == 1) rz = |real(zStart)| iz = rz elseif (@mode == 2) iz = |imag(zStart)| rz = iz elseif (@mode == 3) rz = |zStart| iz = rz elseif (@mode == 4) rz = atan2(zStart) if (rz < 0) rz = rz + 2*#pi endif iz = rz elseif (@mode == 5) rz = real(atan(zStart)) if (rz < 0) rz = rz + 2*#pi endif iz = imag(atan(zStart)) if (iz < 0) iz = iz + 2*#pi endif elseif (@mode == 6) rz = atan2(zStart) if (rz < 0) rz = rz + 2*#pi endif iz = |zStart| endif mrz = (rz - trunc(rz*startSnip)/startSnip)*1000 miz = (iz - trunc(iz*startSnip)/startSnip)*1000 if (@withFinalTrunc) mrz = trunc(mrz) miz = trunc(miz) endif int j = @numOfTests while (j > 0) j = j-1 re1 = trunc(mrz/100) re2 = trunc(mrz/10 - re1*10) re3 = trunc(mrz/1 - re1*100 - re2*10) im1 = trunc(miz/100) im2 = trunc(miz/10 - im1*10) im3 = trunc(miz/1 - im1*100 - im2*10) reTest = re1^3 + re2^3 + re3^2 imTest = im1^3 + im2^3 + im3^2 if (@calcMode == 0) re_R = |mrz| im_R = |miz| elseif (@calcMode == 1) re_R = |mrz - reTest| im_R = |miz - imTest| elseif (@calcMode == 2) re_R = |153 - reTest| im_R = |153 - imTest| endif mrz = reTest miz = imTest endwhile ; j > 0 mrz = re_R miz = im_R if (@trapMode > 0) if (@trapMode == 1) if ( mrz > @lowerTrap && mrz < @upperTrap \ && miz > @lowerTrap && miz < @upperTrap ) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 2) if (cabs(zStart) > @lowerTrap && cabs(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 3) if (real(zStart) > @lowerTrap && real(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 4) if (imag(zStart) > @lowerTrap && imag(zStart) < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 5) if (|real(zStart)| > @lowerTrap && |real(zStart)| < @upperTrap) no_trap = FALSE do_loop = FALSE endif elseif (@trapMode == 6) if (|imag(zStart)| > @lowerTrap && |imag(zStart)| < @upperTrap) no_trap = FALSE do_loop = FALSE endif endif ; At last trap the values if !do_loop trz = mrz tiz = miz endif endif endif float temp = 0 if (@colorby == 0) temp = |zStart|*mrz elseif (@colorby == 1) temp = |zStart|*miz elseif (@colorby == 2) temp = |(mrz + 1i*miz)|/|zStart| elseif (@colorby == 3) temp = |mrz - 1i*miz|*|zStart| elseif (@colorby == 4) temp = mrz/|zStart| elseif (@colorby == 5) temp = miz/|zStart| elseif (@colorby == 6) temp = |(mrz + 1i*miz)|*|zStart| elseif (@colorby == 7) temp = |mrz - 1i*miz|/|zStart| elseif (@colorby == 8) temp = mrz elseif (@colorby == 9) temp = miz elseif (@colorby == 10) temp = |mrz + miz| elseif (@colorby == 11) temp = |mrz - miz| elseif (@colorby == 12) if (mrzmiz) temp = mrz/miz else temp = miz/mrz endif elseif (@colorby == 14) if (mrzmiz) temp = mrz else temp = miz endif endif float mask = 0 bool no_mask = true if (@masking > 0) if (@maskType == 0) ; Index mask = temp elseif (@maskType == 1) ; Re z mask = real(zStart) elseif (@maskType == 2) ; Im z mask = imag(zStart) elseif (@maskType == 3) ; Angle mask = atan2(zStart)/(2*#pi) if mask < 0 mask = mask + 1 endif mask = mask*360 elseif (@maskType == 4) ; Iteration mask = iter elseif (@maskType == 5) ; Re Mixel mask = real(zStart+#pixel)/2 elseif (@maskType == 6) ; Im Mixel mask = imag(zStart+#pixel)/2 elseif (@maskType == 7) ; Abs Mixel mask = cabs(zStart+#pixel)/2 elseif (@maskType == 8) ; Dist(z,Pixel) mask = cabs(zStart-#pixel) elseif (@maskType == 9) ; |z| mask = cabs(zStart) endif endif if (@masking == 1) ; Lower if (mask < @threshold_l) #solid = true no_mask = false endif elseif (@masking == 2) ; Upper if (mask > @threshold_u) #solid = true no_mask = false endif elseif (@masking == 3) ; Between if (mask > @threshold_l && mask < @threshold_u) #solid = true no_mask = false endif elseif (@masking == 4) ; Outside if (mask < @threshold_l || mask > @threshold_u) #solid = true no_mask = false endif else no_mask = true endif if (no_mask) float to_index = real(@fkt(temp)) complex _zz = zStart if (@base4txtr == 1) _zz = #pixel elseif (@base4txtr == 2) _zz = (#pixel+_zz)/2 elseif (@base4txtr == 3) _zz = abs(#pixel-_zz) elseif (@base4txtr == 4) _zz = cabs(#pixel-_zz) endif if (@colour_limit != 0) to_index = to_index%@colour_limit endif if (@f_randomness != 0) to_index = to_index + @f_randomness * real(#random) endif if (@txtr_gnarl != 0) complex zGnarl = _zz zGnarl = zGnarl-trunc(zGnarl*@txtr_gnarl_scale)/@txtr_gnarl_scale if (@txtr_gnarl_size != 0 && @txtr_gnarl_size != 1) zGnarl = zGnarl/@txtr_gnarl_size endif if (@reachThrough) _zz = zGnarl endif float x = real(zGnarl) float y = imag(zGnarl) float xOld = 0 int iter3 = @txtr_gnarl_octaves while (iter3 > 0) iter3 = iter3-1 xOld = x x = x - sin(y + sin(y)) y = y - sin(xOld + sin(xOld)) endwhile float textureGnarl = 0 if (@txtr_gnarl_type == 0) textureGnarl = abs(x) elseif (@txtr_gnarl_type == 1) textureGnarl = abs(x)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 2) textureGnarl = abs(x-y) elseif (@txtr_gnarl_type == 3) textureGnarl = abs(x-y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 4) textureGnarl = abs(x+y)/2 elseif (@txtr_gnarl_type == 5) textureGnarl = abs(x*y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_gnarl_type == 6) textureGnarl = atan2(x+1i*y)/(2*#pi) if (textureGnarl < 0) textureGnarl = textureGnarl + 1 endif elseif (@txtr_gnarl_type == 7) textureGnarl = sqrt(x^2+y^2) endif if (@txtr_Gnarl_limit != 0) textureGnarl = textureGnarl%@txtr_Gnarl_limit endif to_index = to_index + @txtr_gnarl*textureGnarl endif if (@txtr_PopCorn != 0) complex zPopCorn = _zz zPopCorn = zPopCorn-trunc(zPopCorn*@txtr_PopCorn_scale)/@txtr_PopCorn_scale if (@txtr_PopCorn_size != 0 && @txtr_PopCorn_size != 1) zPopCorn = zPopCorn/@txtr_PopCorn_size endif if (@reachThrough) _zz = zPopCorn endif float x = real(zPopCorn) float y = imag(zPopCorn) float xOld = 0 int iter3 = @txtr_PopCorn_octaves while (iter3 > 0) iter3 = iter3-1 xOld = x x = x - sin(y + log(y + cos(y))) y = y - sin(xOld + log(xOld + cos(xOld))) endwhile float texturePopCorn = 0 if (@txtr_PopCorn_type == 0) texturePopCorn = abs(x) elseif (@txtr_PopCorn_type == 1) texturePopCorn = abs(x)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 2) texturePopCorn = abs(x-y) elseif (@txtr_PopCorn_type == 3) texturePopCorn = abs(x-y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 4) texturePopCorn = abs(x+y)/2 elseif (@txtr_PopCorn_type == 5) texturePopCorn = abs(x*y)/(sqrt(x^2+y^2)+1e-20) elseif (@txtr_PopCorn_type == 6) texturePopCorn = atan2(x+1i*y)/(2*#pi) if (texturePopCorn < 0) texturePopCorn = texturePopCorn + 1 endif elseif (@txtr_PopCorn_type == 7) texturePopCorn = sqrt(x^2+y^2) endif if (@txtr_PopCorn_limit != 0) texturePopCorn = texturePopCorn%@txtr_PopCorn_limit endif to_index = to_index + @txtr_PopCorn*texturePopCorn endif if (@txtr_SFBM != 0) float mod = 1 float d1 = 0 float d2 = 0 float d3 = 0 float d4 = 0 float nindex = 0 float textureSFBM = 0 float scale = 0 cr1 = 0 cr2 = 0 cr3 = 0 cr4 = 0 float crp1 = 0 float crp2 = 0 float crp3 = 0 float crp4 = 0 complex tv1 = 0 complex tv2 = 0 complex tv3 = 0 complex tv4 = 0 complex seed = @txtr_SFBM_seed rotAngleFBM = exp(1i*pi/180*@txtr_SFBM_rot) if (@txtr_SFBM_scaledis == 4) ; min textureSFBM = 1e20 elseif (@txtr_SFBM_scaledis == 5) ; max textureSFBM = -1e20 endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; complex zSFBM = _zz zSFBM = zSFBM-trunc(zSFBM*@txtr_SFBM_scale)/@txtr_SFBM_scale if (@txtr_SFBM_size != 0 && @txtr_SFBM_size != 1) zSFBM = zSFBM/@txtr_SFBM_size endif if (@reachThrough) _zz = zSFBM endif int iter3 = 0 complex ttmp = 0 while (iter3 < @txtr_SFBM_octaves) scale = @txtr_SFBM_magn^iter3 zSFBM = zSFBM*rotAngleFBM iter3 = iter3 + 1 if @txtr_SFBM_mod == 1 mod = sqrt(iter3) endif zc = round(scale*zSFBM)/scale zc1 = zc + (.5,.5)/scale zc2 = zc + (-.5,.5)/scale zc3 = zc + (.5,-.5)/scale zc4 = zc + (-.5,-.5)/scale ttmp = seed/(mod*zc1+124), cr1 = ttmp-floor(ttmp) ttmp = seed/(mod*zc2+124), cr2 = ttmp-floor(ttmp) ttmp = seed/(mod*zc3+124), cr3 = ttmp-floor(ttmp) ttmp = seed/(mod*zc4+124), cr4 = ttmp-floor(ttmp) if (@txtr_SFBM_mode == 0) tv1 = (zSFBM - zc1)*scale tv2 = (zSFBM - zc2)*scale tv3 = (zSFBM - zc3)*scale tv4 = (zSFBM - zc4)*scale crp1 = real(cr1)*real(tv1) + imag(cr1)*imag(tv1) crp2 = real(cr2)*real(tv2) + imag(cr2)*imag(tv2) crp3 = real(cr3)*real(tv3) + imag(cr3)*imag(tv3) crp4 = real(cr4)*real(tv4) + imag(cr4)*imag(tv4) endif ttmp = zSFBM - zc d1 = real(ttmp)*scale + 0.5 d2 = 1 - d1 d3 = imag(ttmp)*scale + 0.5 d4 = 1 - d3 if (@txtr_SFBM_power != 1) d1 = d1^@txtr_SFBM_power d2 = d2^@txtr_SFBM_power d3 = d3^@txtr_SFBM_power d4 = d4^@txtr_SFBM_power endif if @txtr_SFBM_mode == 0 nindex = 10 + crp1*d1*d3 + crp3*d1*d4 + crp2*d2*d3 + crp4*d2*d4 elseif @txtr_SFBM_mode == 1 nindex = cabs(cr1*d1*d3 + cr3*d1*d4 + cr2*d2*d3 + cr4*d2*d4) endif if (@txtr_SFBM_scaledis == 0) textureSFBM = textureSFBM + nindex/scale elseif (@txtr_SFBM_scaledis == 1) textureSFBM = textureSFBM + nindex/sqrt(scale) elseif (@txtr_SFBM_scaledis == 2) textureSFBM = textureSFBM + nindex/(scale^(1/scale)) elseif (@txtr_SFBM_scaledis == 3) textureSFBM = textureSFBM + nindex/iter3 elseif (@txtr_SFBM_scaledis == 4) if (nindex < textureSFBM) textureSFBM = nindex endif elseif (@txtr_SFBM_scaledis == 5) if (nindex > textureSFBM) textureSFBM = nindex endif endif endwhile if (@txtr_SFBM_limit != 0) textureSFBM = textureSFBM%@txtr_SFBM_limit endif to_index = to_index + @txtr_SFBM*textureSFBM endif if (@txtr_primes != 0) complex zPrimes = _zz zPrimes = zPrimes-trunc(zPrimes*@txtr_Primes_scale)/@txtr_Primes_scale if (@txtr_Primes_size != 0 && @txtr_Primes_size != 1) zPrimes = zPrimes/@txtr_Primes_size endif if (@reachThrough) _zz = zPrimes endif float texturePrimes = 0 float trz = 0 float tiz = 0 float t_rz = 0 float t_iz = 0 float tstartSnip = 10^@txtr_primes_where2start float tendOfSnip = 10^(@txtr_primes_where2start+@txtr_primes_lengthOfSnip) if (@txtr_primes_mode == 0) trz = |real(zPrimes)| tiz = |imag(zPrimes)| elseif (@txtr_primes_mode == 1) trz = |real(zPrimes)| tiz = trz elseif (@txtr_primes_mode == 2) tiz = |imag(zPrimes)| trz = tiz elseif (@txtr_primes_mode == 3) trz = |zPrimes| tiz = trz elseif (@txtr_primes_mode == 4) trz = atan2(zPrimes) if (trz < 0) trz = trz + 2*#pi endif tiz = trz elseif (@txtr_primes_mode == 5) trz = real(atan(zPrimes)) if (trz < 0) trz = trz + 2*#pi endif tiz = imag(atan(zPrimes)) if (tiz < 0) tiz = tiz + 2*#pi endif elseif (@txtr_primes_mode == 6) trz = atan2(zPrimes) if (trz < 0) trz = trz + 2*#pi endif tiz = |zPrimes| endif t_rz = (trz - trunc(trz*tstartSnip)/tstartSnip)*tendOfSnip t_iz = (tiz - trunc(tiz*tstartSnip)/tstartSnip)*tendOfSnip if (@txtr_primes_withFinalTrunc) t_rz = trunc(t_rz) t_iz = trunc(t_iz) endif texturePrimes = 10*((t_rz%821) + (t_iz%823))/1644 if (@txtr_Primes_limit != 0) texturePrimes = texturePrimes%@txtr_Primes_limit endif to_index = to_index + @txtr_Primes*texturePrimes endif ; @txtr_primes != 0 if (@txtr_Gauss != 0) complex zGauss = _zz zGauss = zGauss-trunc(zGauss*@txtr_Gauss_scale)/@txtr_Gauss_scale if (@txtr_Gauss_size != 0 && @txtr_Gauss_size != 1) zGauss = zGauss/@txtr_Gauss_size endif if (@reachThrough) _zz = zGauss endif float textureGauss = 0 float t_d = cabs(zGauss) float t_r = real(zGauss) float t_i = imag(zGauss) if (@txtr_Gauss_type == 0) textureGauss = t_d elseif (@txtr_Gauss_type == 1) textureGauss = |t_r| elseif (@txtr_Gauss_type == 2) textureGauss = |t_i| elseif (@txtr_Gauss_type == 3) textureGauss = |t_i-t_r| elseif (@txtr_Gauss_type == 4) textureGauss = |t_i*t_r| elseif (@txtr_Gauss_type == 5) textureGauss = |t_i/t_r| elseif (@txtr_Gauss_type == 6) if (|t_i| < |t_r|) textureGauss = |t_i| else textureGauss = |t_r| endif elseif (@txtr_Gauss_type == 7) if (|t_i| > |t_r|) textureGauss = |t_i| else textureGauss = |t_r| endif elseif (@txtr_Gauss_type == 8) textureGauss = atan2(zGauss)/(2*#pi) if textureGauss < 0 textureGauss = textureGauss + 1 endif elseif (@txtr_Gauss_type == 9) textureGauss = (|t_i|+|t_r|+t_d)/3 elseif (@txtr_Gauss_type == 10) textureGauss = (|t_i|*|t_r|*t_d)^(1/3) endif if (@txtr_Gauss_limit != 0) textureGauss = textureGauss%@txtr_Gauss_limit endif to_index = to_index + @txtr_Gauss*textureGauss endif if (@txtr_Turn!= 0) complex zTurn = _zz zTurn = zTurn-trunc(zTurn*@txtr_Turn_scale)/@txtr_Turn_scale complex zTurned = zTurn float txtr_testAngle1 = #pi/@txtr_Turn_corte1 float txtr_testAngle2 = 3*testAngle1 complex txtr_rotAngle1 = @txtr_Turn_corte2*1i*testAngle1 complex txtr_rotAngle2 = @txtr_Turn_corte2*1i*testAngle2 if (@txtr_Turn_size != 0 && @txtr_Turn_size != 1) zTurn = zTurn/@txtr_Turn_size endif if (@reachThrough) _zz = zTurn endif float textureTurn = 0 float txtr_arg = atan2(zTurn) ; "Turn around" part taken from Sam if (abs(txtr_arg) < txtr_testAngle1) zTurned = zTurn*exp(txtr_rotAngle1) elseif (abs(txtr_arg) > txtr_testAngle2) zTurned = zTurn*exp(txtr_rotAngle2) endif textureTurn = |zTurn-zTurned| if (@txtr_Turn_limit != 0) textureTurn = textureTurn%@txtr_Turn_limit endif to_index = to_index + @txtr_Turn*textureTurn endif if (@txtr_Check!= 0) complex zChecked = round(_zz*@txtr_Check_scale) float textureCheck = 0 int checkFlag = 0 int testCheck = 0 int reChecked = trunc(real(zChecked)) int imChecked = trunc(imag(zChecked)) if (@txtr_Check_test == 0) testCheck = reChecked + imChecked elseif (@txtr_Check_test == 1) testCheck = reChecked * imChecked endif complex zCheckShape = _zz*@txtr_Check_scale complex zShapedCheck = zChecked - zCheckShape float reShapedCheck = real(zShapedCheck) float imShapedCheck = imag(zShapedCheck) if (testCheck%@txtr_Checker == 0) ; Condition for the checkers if (@txtr_Check_shape == 0) ; Squares only checkFlag = 1 elseif (@txtr_Check_shape == 1) ; Circle if (|zShapedCheck| < .2*@txtr_Check_shConst) ; additional condition checkFlag = 1 ; for circles endif elseif (@txtr_Check_shape == 2) if (abs (|reShapedCheck| - |imShapedCheck|) > .1*@txtr_Check_shConst) checkFlag = 1 endif elseif (@txtr_Check_shape == 3) checkFlag = 1 ; draw a square if (|zShapedCheck| < .2*@txtr_Check_shConst) ; cut out a circle checkFlag = 0 endif elseif (@txtr_Check_shape == 4) if (|reShapedCheck| - |imShapedCheck| > .05*@txtr_Check_shConst) ; segments checkFlag = 1 endif elseif (@txtr_Check_shape == 5) checkFlag = 1 ; draw a square if (|reShapedCheck| - |imShapedCheck| > .05*@txtr_Check_shConst) ; cut out segments checkFlag = 0 endif elseif (@txtr_Check_shape == 6) checkFlag = 1 ; draw a square if (|reShapedCheck| > .05*@txtr_Check_shConst) ; cut out horizontal lines checkFlag = 0 endif elseif (@txtr_Check_shape == 7) checkFlag = 1 ; draw a square if (|imShapedCheck| > .05*@txtr_Check_shConst) ; cut out vertical lines checkFlag = 0 endif elseif (@txtr_Check_shape == 8) checkFlag = 1 ; draw a square if ( |sin(imChecked*2*#pi) - sin(imag(zCheckShape)*2*#pi)| < .5*@txtr_Check_shConst) checkFlag = 0 ; cut out many vertical lines endif elseif (@txtr_Check_shape == 9) checkFlag = 1 ; draw a square if (|zShapedCheck| < .2*@txtr_Check_shConst) checkFlag = 0 ; cut out a circle if (|imShapedCheck| > .05*@txtr_Check_shConst) checkFlag = 1 ; fill in something endif endif elseif (@txtr_Check_shape == 10) if (|zShapedCheck| < .2*@txtr_Check_shConst) checkFlag = 1 ; draw a circle if (|imShapedCheck| < .01*@txtr_Check_shConst) checkFlag = 0 ; cut out horizontal if (|reShapedCheck| < .01*@txtr_Check_shConst) checkFlag = 1 ; fill in vertical endif endif endif elseif (@txtr_Check_shape == 11) checkFlag = 1 if (|imShapedCheck| > .01*@txtr_Check_shConst) checkFlag = 0 if (|reShapedCheck| < .01*@txtr_Check_shConst) checkFlag = 1 endif endif elseif (@txtr_Check_shape == 12) if (|imShapedCheck| > .01*@txtr_Check_shConst) checkFlag = 1 if (|reShapedCheck| < .01*@txtr_Check_shConst) checkFlag = 0 endif endif elseif (@txtr_Check_shape == 13) float txtr_arg = atan2(zShapedCheck)/(2*#pi) if (txtr_arg < 0) txtr_arg = txtr_arg + 1 endif if (abs(txtr_arg) < .25*#pi/@txtr_Check_shConst) checkFlag = 1 endif elseif (@txtr_Check_shape == 14) checkFlag = 1 float txtr_arg = atan2(zShapedCheck)/(2*#pi) if (txtr_arg < 0) txtr_arg = txtr_arg + 1 endif if (abs(txtr_arg) < .25*#pi/@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 15) checkFlag = 1 if (|zShapedCheck| > .1*@txtr_Check_shConst) checkFlag = 0 float txtr_arg = atan2(zShapedCheck)/(2*#pi) if (txtr_arg < 0) txtr_arg = txtr_arg + 1 endif if (abs(txtr_arg) < .25*#pi/@txtr_Check_shConst) checkFlag = 1 endif endif elseif (@txtr_Check_shape == 16) checkFlag = 1 if (|reShapedCheck| - |imShapedCheck| < 0.005*@txtr_Check_shConst || \ |reShapedCheck| + |imShapedCheck| < 0.005*@txtr_Check_shConst || \ |imShapedCheck| < 0.005*@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 17) checkFlag = 1 if ((reShapedCheck) - (imShapedCheck) > 0.1*@txtr_Check_shConst && \ (reShapedCheck) + (imShapedCheck) > 0.1*@txtr_Check_shConst && \ (imShapedCheck) < 0.1*@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 18) checkFlag = 1 if (abs(reShapedCheck) - abs(imShapedCheck) > 0.1*@txtr_Check_shConst && \ abs(reShapedCheck) + abs(imShapedCheck) > 0.1*@txtr_Check_shConst && \ abs(imShapedCheck) < 0.1*@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 19) checkFlag = 1 if (|reShapedCheck| - |imShapedCheck| < 0.1*@txtr_Check_shConst && \ |reShapedCheck| + |imShapedCheck| > 0.1*@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 20) checkFlag = 1 if ((reShapedCheck) - (imShapedCheck) > 0.1*@txtr_Check_shConst && \ (reShapedCheck) + (imShapedCheck) < 0.1*@txtr_Check_shConst && \ (imShapedCheck) < 0.1*@txtr_Check_shConst) checkFlag = 0 endif elseif (@txtr_Check_shape == 21) if (|reShapedCheck| - |imShapedCheck| < 0.005*@txtr_Check_shConst || \ |imShapedCheck| < 0.005*@txtr_Check_shConst) checkFlag = 1 endif elseif (@txtr_Check_shape == 22) checkFlag = 1 if (|sin(reShapedCheck*2*#pi) - cos(imShapedCheck*2*#pi) | > 0.5*@txtr_Check_shConst || \ |imShapedCheck| < 0.01*@txtr_Check_shConst) checkFlag = 0 endif endif endif ; testCheck%@txtr_Checker == 0 if (@txtr_Check_invert) checkFlag = 1 - checkFlag endif textureCheck = checkFlag if (@txtr_Check_col == 1 || @txtr_Check_col == 3) textureCheck = textureCheck*|zChecked| endif if (@txtr_Check_col == 2 || @txtr_Check_col == 3) textureCheck = textureCheck*#numiter endif if (@txtr_Check_col == 4) textureCheck = textureCheck*|zShapedCheck| endif if (@txtr_Check_limit != 0) textureCheck = textureCheck%@txtr_Check_limit endif to_index = to_index + @txtr_Check*textureCheck endif if (@txtr_Pick153 != 0) complex zPick153 = _zz float reCalcPick153 = 0 float imCalcPick153 = 0 float reTestPick153 = 0 float imTestPick153 = 0 float rePick153_1 = 0 float rePick153_2 = 0 float rePick153_3 = 0 float imPick153_1 = 0 float imPick153_2 = 0 float imPick153_3 = 0 float rePick153_R = 0 float imPick153_R = 0 if (@txtr_Pick153_scale != 0) zPick153 = zPick153-trunc(zPick153*@txtr_Pick153_scale)/@txtr_Pick153_scale endif float texturePick153 = 0 float granulation153 = 1000*@txtr_scale153 zCalcPick153 = (trunc(zPick153*granulation153)/granulation153 - trunc(zPick153*@txtr_scale153)) * 1000 reCalcPick153 = real(zCalcPick153) imCalcPick153 = imag(zCalcPick153) int j = @txtr_numOfTestsPick153 while (j > 0) j = j-1 rePick153_1 = trunc(reCalcPick153/100) rePick153_2 = trunc(reCalcPick153/10 - rePick153_1*10) rePick153_3 = trunc(reCalcPick153/1 - rePick153_1*100 - rePick153_2*10) imPick153_1 = trunc(imCalcPick153/100) imPick153_2 = trunc(imCalcPick153/10 - imPick153_1*10) imPick153_3 = trunc(imCalcPick153/1 - imPick153_1*100 - imPick153_2*10) reTestPick153 = rePick153_1^3 + rePick153_2^3 + rePick153_3^2 imTestPick153 = imPick153_1^3 + imPick153_2^3 + imPick153_3^2 rePick153_R = reCalcPick153 - reTestPick153 imPick153_R = imCalcPick153 - imTestPick153 reCalcPick153 = reTestPick153 imCalcPick153 = imTestPick153 endwhile ; j > 0 if (@txtr_Pick153_col == 0) texturePick153 = abs(rePick153_R)/500 elseif (@txtr_Pick153_col == 1) texturePick153 = abs(imPick153_R)/500 elseif (@txtr_Pick153_col == 2) texturePick153 = abs(rePick153_R+imPick153_R)/500 elseif (@txtr_Pick153_col == 3) texturePick153 = abs(rePick153_R)/500 + abs(imPick153_R)/500 elseif (@txtr_Pick153_col == 4) texturePick153 = abs(imPick153_R-rePick153_R)/250 elseif (@txtr_Pick153_col == 5) if abs(imPick153_R) < abs(rePick153_R) texturePick153 = abs(imPick153_R)/500 else texturePick153 = abs(rePick153_R)/500 endif elseif (@txtr_Pick153_col == 6) if abs(imPick153_R) > abs(rePick153_R) texturePick153 = abs(imPick153_R)/500 else texturePick153 = abs(rePick153_R)/500 endif elseif (@txtr_Pick153_col == 7) if abs(imPick153_R) < abs(rePick153_R) texturePick153 = abs(imPick153_R/rePick153_R) else texturePick153 = abs(rePick153_R/imPick153_R) endif elseif (@txtr_Pick153_col == 8) if abs(imPick153_R) > abs(rePick153_R) texturePick153 = abs(imPick153_R/rePick153_R) else texturePick153 = abs(rePick153_R/imPick153_R) endif elseif (@txtr_Pick153_col == 9) texturePick153 = abs(rePick153_R*imPick153_R)/250000 elseif (@txtr_Pick153_col == 10) texturePick153 = abs(rePick153_R*imPick153_R)/abs((rePick153_R+imPick153_R)*500) elseif (@txtr_Pick153_col == 11) texturePick153 = (rePick153_R+imPick153_R)^2/abs(rePick153_R*imPick153_R) elseif (@txtr_Pick153_col == 12) texturePick153 = (rePick153_R-imPick153_R)^2/(rePick153_R+imPick153_R)^2 endif if (@txtr_Pick153_limit != 0) texturePick153 = texturePick153%@txtr_Pick153_limit endif if (texturePick153 < 0) texturePick153 = 0 endif to_index = to_index + @txtr_Pick153*texturePick153 endif if (@txtr_SumDiv != 0) complex zSumDiv = _zz float reCalcSumDiv = 0 float imCalcSumDiv = 0 float reSumDiv_R = 0 float imSumDiv_R = 0 if (@txtr_SumDiv_scale != 0) zSumDiv = zSumDiv-trunc(zSumDiv*@txtr_SumDiv_scale)/@txtr_SumDiv_scale endif float textureSumDiv = 0 float granulationSumDiv = 1000*@txtr_scaleSumDiv zCalcSumDiv = (trunc(zSumDiv*granulationSumDiv)/granulationSumDiv - trunc(zSumDiv*@txtr_scaleSumDiv)) * 1000 reCalcSumDiv = real(zCalcSumDiv) imCalcSumDiv = imag(zCalcSumDiv) if (@txtr_SumDiv_mode == 0) reSumDiv_R = 0 imSumDiv_R = 0 elseif (@txtr_SumDiv_mode == 1) reSumDiv_R = reCalcSumDiv imSumDiv_R = imCalcSumDiv endif int j = 0 while (j abs(reSumDiv_R) textureSumDiv = abs(imSumDiv_R)/500 else textureSumDiv = abs(reSumDiv_R)/500 endif elseif (@txtr_SumDiv_col == 7) if abs(imSumDiv_R) < abs(reSumDiv_R) textureSumDiv = abs(imSumDiv_R/reSumDiv_R) else textureSumDiv = abs(reSumDiv_R/imSumDiv_R) endif elseif (@txtr_SumDiv_col == 8) if abs(imSumDiv_R) > abs(reSumDiv_R) textureSumDiv = abs(imSumDiv_R/reSumDiv_R) else textureSumDiv = abs(reSumDiv_R/imSumDiv_R) endif elseif (@txtr_SumDiv_col == 9) textureSumDiv = abs(reSumDiv_R*imSumDiv_R)/250000 elseif (@txtr_SumDiv_col == 10) textureSumDiv = abs(reSumDiv_R*imSumDiv_R)/abs((reSumDiv_R+imSumDiv_R)*500) elseif (@txtr_SumDiv_col == 11) textureSumDiv = (reSumDiv_R+imSumDiv_R)^2/abs(reSumDiv_R*imSumDiv_R) elseif (@txtr_SumDiv_col == 12) textureSumDiv = (reSumDiv_R-imSumDiv_R)^2/(reSumDiv_R+imSumDiv_R)^2 endif if (@txtr_SumDiv_limit != 0) textureSumDiv = textureSumDiv%@txtr_SumDiv_limit endif if (textureSumDiv < 0) textureSumDiv = 0 endif to_index = to_index + @txtr_SumDiv*textureSumDiv endif #index = to_index endif ; no_mask default: title = "Pick over 153" param numOfTests caption = "Number of Tests" default = 1 min = 1 endparam param calcMode caption = "Calculation Mode" enum = "direct" "testing" "guessing" default = 0 endparam param Mode caption = "Primes Mode (Watch)" enum = "Real,Imag" "Real" "Imag" "|z|" "Angle" "Angel" "Polar" default = 5 endparam param withFinalTrunc caption = "With Final Truncation" default = TRUE endparam param where2start caption = "Start of Snip" default = 1 endparam param lengthOfSnip caption = "Length of Snip" default = 1 min = 1 endparam param scale caption = "Scale" default = 1.0 min = 0 endparam param fixit caption = "Fixit for Color by" enum = "Final" "Last" "Minimum" "Maximum" "Sum" \ "W-Sum" "W^2-Sum" "WR-Sum" \ "G-Sum" "G'-Sum" "AG-Sum" \ "L-Sum" "LW-Sum" "LW^2-Sum" default = 1 endparam param colorby caption = "Color By" enum = "Real" "Imag" "!!!" "Diff" "!Real!" "!Imag!" "!" "!Diff!" \ "8" "9" "10" "11" "12" "13" "14" "15" endparam param trapMode caption = "Trap Mode" enum = "None" "Distance" "Cabs" "Real" "Imag" "|Real|" "|Imag|" endparam param lowerTrap caption = "Lower Border for Trap" default = 1.0 min = 0.0 hint = "Only usefull with Traps" endparam param upperTrap caption = "Upper Border for Trap" default = 2.0 min = 0.0 hint = "Only usefull with Traps" endparam param skipMode caption = "Skip Mode: Skip..." enum = "None" \ "...first n" "...after n" \ "...every nth" "...but the nth" endparam param skipConst caption = "Skip Constant" default = 3 min = 1 endparam param zJouk caption = "Joukowskij: Constant" default = (0.0,0.0) endparam param coord caption = "Coordinates" enum = "Rectangular" \ "Polar" "PolarH" "aPolar" "aPolarH" \ "sin/cos" "sinh/cosh" "asin/acos" "asinh/acosh" \ "z/inv(z)" "z/conj(z)" "z/flip(z)" \ "?sin/cos" "?sin/i*cos" "?asin/acos" "?asin/i*acos" \ "?sinh/cosh" "?sinh/i*cosh" "?asinh/acosh" "?asinh/i*acosh" default = 0 endparam param coordLoop caption = "# Coord Loops" default = 1 min = 1 endparam param coordMode caption = "Mode Coord Loop" enum = "Static" "Dynamic" default = 0 endparam param lattice caption = "Lattice Type" enum = "None" \ "round" "trunc" "floor" "ceil" "abs" \ "r-round" "r-trunc" "r-floor" "r-ceil" "r-abs" \ "round^2" "trunc^2" "floor^2" "ceil^2" "abs^2" \ "r-round^2" "r-trunc^2" "r-floor^2" "r-ceil^2" "r-abs^2" \ "Modulo" "Mod Quot" "Mod Inv" default = 0 endparam param lattFac1 caption = "Lattice Factor 1" default = (1.0,0.0) endparam param lattFac2 caption = "Lattice Factor 2" default = (1.0,0.0) endparam param colour_limit caption = "Colour Limitation" default = 0.0 min = 0.0 max = 400.0 endparam param init_z caption = "Z Initialisation" enum = "Always New" \ "Sum Up" "W-Sum Up" "W^2-Sum Up" \ "Summm" "Pixel" "Mixel" default = 0 endparam param turnMode caption = "L: Turnaround Mode" default = false endparam param turnScale caption = "L: Turn Scale" default = 1.0 min = 0.0 endparam param corte1 caption = "L: Turnaround #1" default = 4.0 endparam param corte2 caption = "L: Turnaround #2" default = 2.0 endparam param l_randomness caption = "L: Randomness" hint = "This adds a randomness in the outlines." default = 0.0 endparam param f_randomness caption = "T: Random Texture" hint = "This adds a random texture to the coloring." default = 0.0 endparam param base4txtr caption = "Texture Base" enum = "Z" "Pixel" "Mixel" "Diff(Z,Pixel)" "Dist(Z,Pixel)" default = 0 endparam param reachThrough caption = "T: Reach Through Scales" default = false hint = "Reaches the Scale and Pattern Size from one \ Texture to the next. Every Texture changes all \ that follow." endparam param txtr_gnarl caption = "T: Gnarl Texture" hint = "This adds a Gnarl texture to the coloring." default = 0.0 endparam param txtr_gnarl_type caption = "T: Gnarl Type" enum = "x" "x/d" "x-y" "(x-y)/d" "(x+y)/2" "x*y/d" "Angle" "d" default = 0 endparam param txtr_gnarl_scale caption = "T: Gnarl Scale" hint = "Scaling Factor for this Gnarl texture." default = 1.0 endparam param txtr_gnarl_size caption = "T: Gnarl Pattern Size" default = 1.0 endparam param txtr_gnarl_limit caption = "T: Gnarl Limitation" default = 0.0 min = 0.0 endparam param txtr_gnarl_octaves caption = "T: Gnarl Octaves" default = 5 min = 1 endparam param txtr_PopCorn caption = "T: PopCorn Texture" hint = "This adds a PopCorn texture to the coloring." default = 0.0 endparam param txtr_PopCorn_type caption = "T: PopCorn Type" enum = "x" "x/d" "x-y" "(x-y)/d" "(x+y)/2" "x*y/d" "Angle" "d" default = 0 endparam param txtr_PopCorn_scale caption = "T: PopCorn Scale" hint = "Scaling Factor for this PopCorn texture." default = 1.0 endparam param txtr_PopCorn_size caption = "T: PopCorn Pattern Size" default = 1.0 endparam param txtr_PopCorn_limit caption = "T: PopCorn Limitation" default = 0.0 min = 0.0 endparam param txtr_PopCorn_octaves caption = "T: PopCorn Octaves" default = 5 min = 1 endparam param txtr_SFBM caption = "T: SFBM Texture" hint = "This adds a SFBM texture to the coloring." default = 0.0 endparam param txtr_SFBM_mode caption = "T: SFBM Noise type" default = 1 enum = "Perlin's" "Raw... (Sam's)" endparam param txtr_SFBM_scale caption = "T: SFBM Scale" hint = "Scaling Factor for this SFBM texture." default = 1.0 endparam param txtr_SFBM_scaledis caption = "T: SFBM Scale Distribution" default = 0 enum = "1/scale" "1/sqrt(scale)" "Fancy" "1/i" endparam param txtr_SFBM_size caption = "T: SFBM Pattern Size" default = 0.1 endparam param txtr_SFBM_magn caption = "T: SFBM Magnification Step" default = 1.2 endparam param txtr_SFBM_limit caption = "T: SFBM Limitation" default = 0.0 min = 0.0 endparam param txtr_SFBM_rot caption = "T: SFBM Rotation Step" default = 28.0 endparam param txtr_SFBM_power caption = "T: SFBM Power" default = 1.0 endparam param txtr_SFBM_mod caption = "Vary Random Numbers?" default = 1 enum = "No" "Use sqrt(i)" endparam param txtr_SFBM_seed caption = "T: SFBM Seed" default = 123094 endparam param txtr_SFBM_octaves caption = "T: SFBM Octaves" default = 5 min = 1 endparam param txtr_Primes caption = "T: Primes Texture" hint = "This adds a Primes texture to the coloring." default = 0.0 endparam param txtr_Primes_scale caption = "T: Primes Scale" hint = "Scaling Factor for this Primes texture." default = 1.0 endparam param txtr_Primes_size caption = "T: Primes Pattern Size" default = 0.5 endparam param txtr_primes_withFinalTrunc caption = "With Final Truncation" default = TRUE endparam param txtr_primes_where2start caption = "T: Start of Snip" default = 1 min = 0 endparam param txtr_primes_lengthOfSnip caption = "T: Length of Snip" default = 1 min = 1 endparam param txtr_primes_Mode caption = "T: Primes Mode" enum = "Real,Imag" "Real" "Imag" "|z|" "Angle" "Angel" "Polar" default = 5 endparam param txtr_primes_limit caption = "T: Primes Limitation" default = 0.0 min = 0.0 endparam param txtr_Gauss caption = "T: Gauss Texture" hint = "This adds a Gauss texture to the coloring." default = 0.0 endparam param txtr_Gauss_type caption = "T: Gauss Type" enum = "d" "x" "y" "x-y" "x*y" "y/x" "min x,y" "max x,y" "Angle" \ "Pyth. am" "Pyth. gm" default = 0 endparam param txtr_Gauss_scale caption = "T: Gauss Scale" hint = "Scaling Factor for this Gauss texture." default = 1.0 endparam param txtr_Gauss_size caption = "T: Gauss Pattern Size" default = 1.0 endparam param txtr_Gauss_limit caption = "T: Gauss Limitation" default = 0.0 min = 0.0 endparam param txtr_Turn caption = "T: Turn Texture" hint = "This adds a Turn texture to the coloring." default = 0.0 endparam param txtr_Turn_scale caption = "T: Turn Scale" hint = "Scaling Factor for this Turn texture." default = 1.0 endparam param txtr_Turn_size caption = "T: Turn Pattern Size" default = 1.0 endparam param txtr_Turn_limit caption = "T: Turn Limitation" default = 0.0 min = 0.0 endparam param txtr_Turn_corte1 caption = "T: Turnaround #1" default = 4.0 endparam param txtr_Turn_corte2 caption = "T: Turnaround #2" default = 2.0 endparam param txtr_Check caption = "T: Checker Texture" hint = "This adds a Check texture to the coloring." default = 0.0 endparam param txtr_Check_scale caption = "T: Checker Scale" hint = "Scaling Factor for this Check texture." default = 1.0 endparam param txtr_Checker caption = "T: Checker Modulus" default = 2 min = 2 endparam param txtr_Check_test caption = "T: Checker Test Mode" enum = "Sum" "Prod" default = 1 endparam param txtr_Check_shape caption = "T: Checker Shape" enum = "Square" "Circle" \ "Square in Circle" "Circle in Square" \ "Segment" "Time" \ "H Bricks" "V Bricks" \ "I Ging" "I Went" \ "Broken Circle" \ "Cross" "Anti-Cross" \ "Bite" "Anti-Bite" "Mooon" "Trianguli" "Nose" \ "Broken Square" "BonBon" "Quizzle" "Hipster" "Broken Net" default = 0 endparam param txtr_Check_shConst caption = "T: Chk-Sh-Const" default = 1.0 endparam param txtr_Check_col caption = "T: Checker Color Mode" enum = "Flag" "Magn" "Iter" "Magn*Iter" "Dist Center" default = 0 endparam param txtr_Check_invert caption = "T: Inverse Checkers?" default = false endparam param txtr_Check_limit caption = "T: Checker Limitation" default = 0.0 min = 0.0 endparam param txtr_Pick153 caption = "T: Pick153 Texture" hint = "This adds a Pick153 texture to the coloring." default = 0.0 endparam param txtr_Pick153_scale caption = "T: Pick153 Scale" hint = "Scaling Factor for this Pick153 texture." default = 1.0 endparam param txtr_scale153 caption = "T: Calc Scale 153" hint = "Scaling Factor for Calculation." default = 1.0 endparam param txtr_numOfTestsPick153 caption = "T: Pick153 Tests" hint = "Pick153 texture." default = 1 endparam param txtr_Pick153_col caption = "T: Pick153 Color Mode" enum = "Real" "Imag" "Sum" "Abs Sum" "Diff" "Min" "Max" "MinQuot" "MaxQuot" "Prod" "Prod/Sum" "11" "12" "13" default = 2 endparam param txtr_Pick153_limit caption = "T: Pick153 Limitation" default = 0.0 min = 0.0 endparam param txtr_SumDiv caption = "T: SumDiv Texture" hint = "This adds a SumDiv texture to the coloring." default = 0.0 endparam param txtr_SumDiv_scale caption = "T: SumDiv Scale" hint = "Scaling Factor for this SumDiv texture." default = 1.0 endparam param txtr_scaleSumDiv caption = "T: SumDiv Pattern Size" hint = "Scaling Factor for Calculation." default = 1.0 endparam param txtr_SumDiv_col caption = "T: SumDiv Color Mode" enum = "Real" "Imag" "Sum" "Abs Sum" "Diff" "Min" "Max" "MinQuot" "MaxQuot" "Prod" "Prod/Sum" "11" "12" "13" default = 2 endparam param txtr_SumDiv_mode caption = "T: SumDiv Calc Mode" enum = "Sum" "Quot" default = 0 endparam param txtr_SumDiv_limit caption = "T: SumDiv Limitation" default = 0.0 min = 0.0 endparam param masking caption = "Masking" enum = "None" "Lower" "Upper" "Between" "Outside" default = 0 endparam param maskType caption = "Mask Type" enum = "Index" "Re z" "Im z" "Angle" "Iteration" \ "Re Mixel" "Im Mixel" "Abs Mixel" \ "Dist(z,Pixel)" "|z|" default = 0 endparam param threshold_l caption = "Lower Mask Threshold" default = 0.5 endparam param threshold_u caption = "Upper Mask Threshold" default = 1.0 endparam func fn2 caption = "After Lattice Function" default = ident() endfunc func fkt caption = "Additional Function" default = ident() endfunc } Dividers { init: complex zCalc = 0 float reCalc = 0 float imCalc = 0 ;float reTest = 0 ;float imTest = 0 ;float re1 = 0 ;float re2 = 0 ;float re3 = 0 ;float im1 = 0 ;float im2 = 0 ;float im3 = 0 int iter = 0 float FixRe = 1e20 float FixIm = 1e20 if (@watch == 1) ; max FixRe = -1e20 FixIm = -1e20 endif float snipLength = 10^@length float granulation = snipLength*@scale float re_R = 0 float im_R = 0 loop: iter = iter + 1 zCalc = (trunc(#z*granulation)/granulation - trunc(#z/@scale)) * snipLength reCalc = real(zCalc) imCalc = imag(zCalc) re_R = reCalc im_R = imCalc int j = 0 while (j FixRe FixRe = re_R endif if im_R > FixIm FixIm = im_R endif endif final: float temp = 0 if (@colorby == 0) temp = |#z|*FixRe elseif (@colorby == 1) temp = |#z|*FixIm elseif (@colorby == 2) temp = |(FixRe + 1i*FixIm)|/|#z| elseif (@colorby == 3) temp = |FixRe - 1i*FixIm|*|#z| elseif (@colorby == 4) temp = FixRe/|#z| elseif (@colorby == 5) temp = FixIm/|#z| elseif (@colorby == 6) temp = |(FixRe + 1i*FixIm)|*|#z| elseif (@colorby == 7) temp = |FixRe - 1i*FixIm|/|#z| elseif (@colorby == 8) temp = FixRe elseif (@colorby == 9) temp = FixIm elseif (@colorby == 10) temp = |FixRe + FixIm| elseif (@colorby == 11) temp = |FixRe - FixIm| elseif (@colorby == 12) if (FixReFixIm) temp = FixRe/FixIm else temp = FixIm/FixRe endif elseif (@colorby == 14) if (FixReFixIm) temp = FixRe else temp = FixIm endif endif #index = real(@fkt(temp)) default: title = "Dividers" param numOfTests caption = "Number of Tests" default = 1 min = 1 endparam param watch caption = "Watch" enum = "Min" "Max" endparam param colorby caption = "Color By" enum = "Real" "Imag" "!!!" "Diff" "!Real!" "!Imag!" "!" "!Diff!" \ "8" "9" "10" "11" "12" "13" "14" "15" endparam param scale caption = "Scale" default = 1.0 min = 0 endparam param length caption = "Length" default = 1 min = 1 endparam func fkt caption = "Additional Function" default = ident() endfunc } sumOfDiv { init: complex zCalc = 0 float reCalc = 0 float imCalc = 0 float reTest = 0 float imTest = 0 float re1 = 0 float re2 = 0 float re3 = 0 float im1 = 0 float im2 = 0 float im3 = 0 int iter = 0 float FixRe = 1e20 float FixIm = 1e20 if (@watch == 1) ; max FixRe = -1e20 FixIm = -1e20 endif float snipLength = 10^@length float granulation = snipLength*@scale float re_R = 0 float im_R = 0 loop: iter = iter + 1 zCalc = (trunc(#z*granulation)/granulation - trunc(#z*@scale)) * snipLength reCalc = real(zCalc) imCalc = imag(zCalc) int j = 0 while (j FixRe FixRe = re_R endif if im_R > FixIm FixIm = im_R endif endif final: float temp = 0 if (@colorby == 0) temp = |#z|*FixRe elseif (@colorby == 1) temp = |#z|*FixIm elseif (@colorby == 2) temp = |(FixRe + 1i*FixIm)|/|#z| elseif (@colorby == 3) temp = |FixRe - 1i*FixIm|*|#z| elseif (@colorby == 4) temp = FixRe/|#z| elseif (@colorby == 5) temp = FixIm/|#z| elseif (@colorby == 6) temp = |(FixRe + 1i*FixIm)|*|#z| elseif (@colorby == 7) temp = |FixRe - 1i*FixIm|/|#z| elseif (@colorby == 8) temp = FixRe elseif (@colorby == 9) temp = FixIm elseif (@colorby == 10) temp = |FixRe + FixIm| elseif (@colorby == 11) temp = |FixRe - FixIm| elseif (@colorby == 12) if (FixReFixIm) temp = FixRe/FixIm else temp = FixIm/FixRe endif elseif (@colorby == 14) if (FixReFixIm) temp = FixRe else temp = FixIm endif endif #index = real(@fkt(temp)) default: title = "Sum of Dividers" param numOfTests caption = "Number of Tests" default = 1 min = 1 endparam param watch caption = "Watch" enum = "Min" "Max" endparam param colorby caption = "Color By" enum = "Real*z" "Imag*z" "Sum/z" "Diff*z" "Real/z" "Imag/z" "Sum*z" "Diff/z" \ "Real" "Imag" "Sum" "Div" "MinQuot" "MaxQuot" "Min" "Max" endparam param scale caption = "Scale" default = 1.0 min = 0 endparam param length caption = "Length" default = 1 min = 1 endparam func fkt caption = "Additional Function" default = ident() endfunc } MedialSmooth { init: complex zCalc = 0 complex zOld = 0 complex zOldOld = 0 ;float reCalc = 0 ;float imCalc = 0 float small = 0 float large = 0 float whole = 0 int iter = 0 float rfix = 0 if (@fixit == 1) ; Min float rfix = 1e20 elseif (@fixit == 2) ; Max float rfix = -1e20 endif float r = 0 loop: iter = iter + 1 zOldOld = zOld zOld = zCalc if (@globalDither != 0) zCalc = round(#z*@globalDither)/@globalDither else zCalc = #z endif if (iter > 2) zCalc = @startFct(zCalc) if (@calculate == 0) small = abs(real(zOldOld)) large = abs(real(zOld)) whole = abs(real(zCalc)) elseif (@calculate == 1) small = abs(imag(zOldOld)) large = abs(imag(zOld)) whole = abs(imag(zCalc)) elseif (@calculate == 2) small = cabs(zOldOld) large = cabs(zOld) whole = cabs(zCalc) elseif (@calculate == 3) float zwo_pi = 2*#pi small = atan2(zOldOld) large = atan2(zOld) whole = atan2(zCalc) if (small <= 0) small = small+zwo_pi endif if (large <= 0) large = large+zwo_pi endif if (whole <= 0) whole = whole+zwo_pi endif elseif (@calculate == 4) float zwo_pi = 2*#pi small = cabs(atan(zOldOld)) large = cabs(atan(zOld)) whole = cabs(atan(zCalc)) endif ; prevent those numbers from being zero: small = small + @smooth large = large + @smooth whole = whole + @smooth float sm_la = small/large float la_wh = large/whole if (sm_la < 0) sm_la = sm_la + iter endif if (la_wh < 0) la_wh = la_wh + iter endif if (@watch == 0) r = abs(sm_la - la_wh) elseif (@watch == 1) r = sm_la + la_wh elseif (@watch == 2) r = abs(1/sm_la - 1/la_wh) elseif (@watch == 3) r = 1/sm_la + 1/la_wh elseif (@watch == 4) if (sm_la < la_wh) r = sm_la else r = la_wh endif elseif (@watch == 5) if (sm_la > la_wh) r = sm_la else r = la_wh endif endif if (@fixit == 0) ; Last rfix = r elseif (@fixit == 1) ; Min if (rfix>r) rfix = r endif elseif (@fixit == 2) ; Max if (rfix 1) gcd = round(reCalc/imCalc) chk = reCalc - gcd*imCalc if (chk > 1) reCalc = imCalc imCalc = gcd endif endwhile gcd = gcd + @smooth chk = chk + @smooth if (@watch == 0) ; gcd r = gcd elseif (@watch == 1) ; MinQ GCD/Iter if (gcd < iter) r = gcd/iter else r = iter/gcd endif elseif (@watch == 2) ; MaxQ GCD/Iter if (gcd > iter) r = gcd/iter else r = iter/gcd endif elseif (@watch == 3) ; DCG+Reti r = 1/gcd + 1/iter elseif (@watch == 4) ; DCG-Reti r = abs(1/gcd - 1/iter) elseif (@watch == 5) ; CHK r = chk elseif (@watch == 6) ; MinQ CHK/Iter if (chk < iter) r = chk/iter else r = iter/chk endif elseif (@watch == 7) ; MaxQ CHK/Iter if (chk > iter) r = chk/iter else r = iter/chk endif elseif (@watch == 8) ; CHK+Iter r = chk + iter elseif (@watch == 9) ; KHC+Reti r = 1/chk + 1/iter elseif (@watch == 10) ; KHC-Reti r = abs(1/chk - 1/iter) elseif (@watch == 11) ; MinQ CHK/GCD if (chk < gcd) r = chk/gcd else r = gcd/chk endif elseif (@watch == 12) ; MaxQ CHK/GCD if (chk > gcd) r = chk/gcd else r = gcd/chk endif elseif (@watch == 13) ; CHK+GCD r = chk + gcd elseif (@watch == 14) ; KHC+DCG r = 1/chk + 1/gcd elseif (@watch == 15) r = abs(1/chk - 1/gcd) ; KHC-DCG endif if (@fixit == 0) ; Last rfix = r elseif (@fixit == 1) ; Min if (rfix>r) rfix = r endif elseif (@fixit == 2) ; Max if (rfix= 1-@thick && d <= 1+@thick ) #solid = TRUE else to_index = 1/log(dd^2 + 1) endif if (@f_randomness_percentage != 0) to_index = to_index + \ (to_index%400)*@f_randomness_percentage/100 \ * real(#random) endif if (@f_randomness != 0) to_index = to_index + @f_randomness * real(#random) endif #index = to_index default: title = "Distances" param thick caption = "Thickness" default = .1 endparam param finiti caption = "Finiti" default = 10.0 endparam param l_randomness caption = "L: Randomness" hint = "This adds a randomness in the outlines." default = 0.0 endparam param f_randomness caption = "T: Random Texture" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness_percentage caption = "T: Rndm Textr Percentage" hint = "This adds a random texture to the coloring, \ values are in percent of the index value." default = 0.0 endparam func xFunc caption = "X Function" default = ident() endfunc func yFunc caption = "Y Function" default = ident() endfunc } akl-distances-loop { init: float rFix = 0 float iFix = 0 float iter = 0 float min_lim = real(@limit) float lim_offset = abs(min_lim - imag(@limit)) loop: complex zStart = #z ; L-Randomness if (@l_randomness != 0) zStart = zStart + @l_randomness * #random endif float x = real(zStart) float y = imag(zStart) float d = abs(real(@xFunc(x)) - real(@yFunc(y))) float dd = round(d*@finiti)/@finiti iter = iter + 1 if ( d < min_lim + lim_offset/iter) d = d elseif ( d > min_lim + lim_offset/iter ) d = 1/log(dd^2 + 1) else d = -1 endif if (d > 0) if (@fixit == 0) ; min if (iter == 1 || d < rFix) rFix = d iFix = iter endif elseif (@fixit == 1) ; max if (iter == 1 || d > rFix) rFix = d iFix = iter endif elseif (@fixit == 2) ; sum rFix = rFix + d iFix = iFix + iter*(round(d)+.1) elseif (@fixit == 3) ; w-sum rFix = rFix + d/iter iFix = (iFix + iter*(round(d)+.1))/iter elseif (@fixit == 4) ; g-sum rFix = rFix + d/(2^iter) iFix = (iFix + iter*(round(d)+.1))/(2^iter) elseif (@fixit == 5) ; a-sum rFix = rFix + (-1)^iter*d/(2^iter) iFix = iFix + (-1)^iter*(round(d)+.1)/(2^iter) endif endif final: float to_index = 0 if (@colorby == 0) to_index = rFix elseif (@colorby == 1) to_index = iFix endif if (@f_randomness_percentage != 0) to_index = to_index + \ (to_index%400)*@f_randomness_percentage/100 \ * real(#random) endif if (@f_randomness != 0) to_index = to_index + @f_randomness * real(#random) endif #index = to_index default: title = "Distances Loop" param limit caption = "Limit Min/MAx" default = (.5,1.0) endparam param finiti caption = "Finiti" default = 10.0 endparam param fixit caption = "Fixit" enum = "Min" "Max" "Sum" "W-Sum" "G-Sum" "A-Sum" default = 2 endparam param colorby caption = "Color By ..." enum = "Fiximum Distance" "Iteration@Fix" default = 0 endparam param l_randomness caption = "L: Randomness" hint = "This adds a randomness in the outlines." default = 0.0 endparam param f_randomness caption = "T: Random Texture" hint = "This adds a random texture to the coloring." default = 0.0 endparam param f_randomness_percentage caption = "T: Rndm Textr Percentage" hint = "This adds a random texture to the coloring, \ values are in percent of the index value." default = 0.0 endparam func xFunc caption = "X Function" default = ident() endfunc func yFunc caption = "Y Function" default = ident() endfunc }