• May 18, 2021, 03:28:15 PM

Login with username, password and session length

Recent Posts

Pages: [1] 2 3 ... 10
1
Downloads / Re: New program: GAPFix Fractal (now with Windows binary)
« Last post by bernds on Today at 05:09:30 AM »
I've updated the github repository again. This time, the major focus was to improve stripe colouring. In another thread, Claude and Iso provided help which allowed me to mostly eliminate the banding artifacts when zooming in. Then, I came up with an idea to improve rendering of Julia sets. One problem when rendering with SAC is that most of the high contrast areas are further away from the center of the set, at low iteration counts, but these are not the interesting parts of the image - the good parts can end up as a dull middle grey. I've added a new feature to create a fade-in effect, where contrast is reduced for low iteration counts, allowing details in the center to be more visible. I'm attaching a before/after image.

Another new feature is to move the location without changing the zoom: alt-click and move.
2
Share a fractal / Re: Mandelbrot variant: z^i+z
« Last post by iRyanBell on Today at 04:42:08 AM »
This should get it in the ballpark:

Code: [Select]
func dist(a complex128, b complex128) float64 {
return math.Sqrt(math.Pow(real(a)-real(b),2)+math.Pow(imag(a)-imag(b),2))
}

func computeColor(w int, h int, canvasX int, canvasY int, mI int) float64 {
x := 4*zoom*(float64(canvasX)/float64(w)) - (2 * zoom) + panX
y := 4*zoom*(float64(canvasY)/float64(h)) - (2 * zoom) + panY
z := complex(x, y)
c := z

min1 := 100000.0
min2 := min1
bounds := 0.0
shade := 0.0

orbit := complex(0.0, 0.0)

i := 0
for i <= mI {
z = cmplx.Pow(z, complex(float64(i), 0))+c

trap := dist(z, orbit);

if trap < min1 {
min2 = min1
min1 = trap
} else if trap < min2 {
min2 = trap
}

bounds = -min1 / min2
shade += math.Exp(-cmplx.Abs(z))

i += 1
}

return bounds*math.Pow(shade,.125)
}

From here, it's playing with the initial `i` value, the constant, and rendering / orbit trap methods.

For the RGB values, I've done a linear interpolation across the min/max bounds:

Code: [Select]
shadeMin := math.MaxFloat64
shadeMax := -math.MaxFloat64
var shadeBuffer [SIZE][SIZE]float64

for y := 0; y < SIZE; y++ {
for x := 0; x < SIZE; x++ {
shade := computeColor(int(SIZE), int(SIZE), x, y, maxIter)
shadeBuffer[y][x] = shade

if shade <= shadeMin {
shadeMin = shade
} else if shade >= shadeMax {
shadeMax = shade
}
}
}

for y := 0; y < SIZE; y++ {
for x := 0; x < SIZE; x++ {
shade := (shadeBuffer[y][x] - shadeMin) / (shadeMax - shadeMin)
canvas[y][x] = color.Gray{uint8(shade * math.MaxUint8)}
}
}
3
Share a fractal / Re: Mandelbrot variant: z^i+z
« Last post by 3DickUlus on Today at 02:58:23 AM »
complex math or standard math ?

standard mul where z =z*z == z.real = (z.real*z.real) and z.img = (z.img * z.img)
or
complex mul where z=z*z ==  z.real = (z.real*z.real - z.img*z.img) and z.img = (z.real*z.img + z.img * z.real)

???
4
Image Threads / Re: Spirals
« Last post by pauldelbrot on Yesterday at 09:48:29 PM »
The Storm Without
5
Kalles Fraktaler / Re: Kalles Fraktaler 2.15
« Last post by Microfractal on Yesterday at 09:23:05 PM »
Oh jpg files working..

Only used png files =P
6
Kalles Fraktaler / Re: Kalles Fraktaler 2.15
« Last post by Microfractal on Yesterday at 09:12:11 PM »
Not working :(
7
Kalles Fraktaler / Re: Kalles Fraktaler 2.15
« Last post by claude on Yesterday at 09:00:32 PM »
Oh! There is a bug, the number of colours is not updated properly.  So the workaround seems to be:

1. open colors dialog
2. select from image
3. load your image
4. without doing anything else, close colors dialog with close button in the window decoration
5. open colors dialog again

A pain but hopefully this helps.  Fixed in the next release.
8
Share a fractal / Re: Some old stuff, maybe fractal nostalgia
« Last post by Alef on Yesterday at 08:52:32 PM »
More:

Peterson
Two headed mandelbrot. Of corse this can be parametiresed.
z=z^2 * c^0.1 + c;

Fractovia
Proposed flag of the state Fractovia (so long agou that this can't be found in net).
z=0.9 * z * atanh(z) + c

Star
Good only for generation of fractal stars. Sides is power - 1.
z=z/K-z^N+1/C

Collatz Conjecture
https://en.wikipedia.org/wiki/Collatz_conjecture
From wikipedia, some mathematical theory.
c=0.25*(2+7*c-(2+5*c)*cos(pi*c));
z=c;

Algorithms using zold variable:
During iteration:
oldestz=oldz;
oldz=z;
z=z*z+c

Manowar
z=z+oldz;
Phoenix
z=z+oldz*distortion;
Simurgh
z=z+oldz*distortion+oldestz*distortion2;

distortion  = 0.5
distortion2 = 0.25
Code: [Select]
; Simurgh/Phoenix/Double Mandelbrot Family
;
; This fractal type encompasses many variants in the
; Mandelbrot family of fractals. The basic Mandelbrot
; equation is:
;
;     z[n+1] = z[n]^a + c
;
; where z[0]=0, a=2 and c varies with pixel location. The
; Phoenix fractal discovered by Shigehiro Ushiki in 1988
; is avariation of this, where the input of two iterations
; is used:
;
;     z[n+1] = z[n]^a + c*z[n]^d + p*z[n-1]
;
; The classical Phoenix fractal is the julia form, where
; z[0] varies with pixel, d=0, c=0.56667, and p=-0.5. Note
; that if d=0 and p=0, the classical Mandelbrot equation
; is still there. So Phoenix fractals are a superset of
; the Mandelbrot fractals.
;
; The Simurgh fractal is a fairly straightforward extension
; of the idea I wrote in November 1999; it uses three
; iterations as input:
;
;     z[n+1] = z[n]^a + c*z[n]^d + p*z[n-1] + q*z[n-2]
;
; If q=0, the Phoenix equation emerges, so again Simurgh
; fractals are a superset of Phoenix fractals.
;
; A different direction of extension to the classical
; Mandelbrot extension is DoubleMandel, which uses two
; separately-scaled z[n] terms:
;
;     z[n+1] = s*z[n]^a + t*z[n]^b + c
;
; We can include this extension into the Simurgh equation:
;
;     z[n+1] = s*z[n]^a + t*z[n]^b + c*z[n]^d + p*z[n-1] + q*z[n-2]
;
; This becomes the Simurgh equation when s=1 and t=0, so
; again it is a superset. The above equation is the one used
; in this formula.
Damien M. Jones

Spider
initialisation:
c = pixel;
z = c;
p = c;   
w=0.5;      //+-1/100 gives results.
iteration loop:
z=sqr(z)+c+p;   // (but maybe z=sqr(z)+c;)
c=w*c+z;

Glynn formula
; formula by Earl Glynn in Computers and the Imagination
initialisation:
z=pixel
loop:
z = z ^ 1.5 - 0.2
Could be considered julia set of z= z^1.5 +c . Nice trees.


;ChebyshevT4
Could be good for buddhabrot, mandelbrot like
z = c*(sqr(z)*(sqr(z)*8+8)+1)

;Chebyshev4Axolotl
Good for buddhabrot, mandelbrot like
z = (sqr(z)*(35 * sqr(z) - 30) + 3) / 8 + c

4th modulus Mbrot
Good for buddhabrot but alsou barnsley like cutted, suny julias
z=sqr(z)
z=(z^4+z^4)^0.25+c

;Rotated Mandelbrot
Kind of hairy mandelbrot
z=z^2+c
z=sqr(z)/cabs(z)

Carlson continiued fraction function
lots of disconected mandelbrot stuff
v = z^Power + c;
z = v - (1/(v + 1/(v + 1/(v + 1/(v + 1/(v + 1))))));

;z = z^z - z^5 + c;  //by Clifford A. Pickover
Not very good I think.

z = real(z)/cos(imag(z)) + 1i*( imag(z)/cos(real(z))) + c; //thorn fractal aka "Secant Sea"
Could be very good. Area filling glyph like.


;Pinwheels
z = (1, 0.5) * sin(z) + c;
Spirals. This could be parameterised, multiplication by imaginary value is rotation.



Moon like Nova fractals. Nova luna probably could generate same more paterns and anti-luna must be Nova.
Copied from no longer aviable formula file of Chaos Pro, would take some time to rewrite in more universal formal.
Code: [Select]
comment{The follwing fractals were derived from Heron's formula for
calculating square roots with an added perturbation. You should switch
off periodicity algorithms, when using them. As default value for the
power (p1) I have used p1 = 2, though complex powers are possibly
even more interesting.

Bernd Lehnhoff 2004
!nospam!f.b.!nospam!lehnhoff!nospam!@gmx!nospam!.de
}


Luna {
  parameter complex p1, p2, p3;
  parameter int settype;
  complex c, u, v;
  real r;
  void init(void)
  {
    if (((real(p1)==0) || (real(p1)==1)) && (imag(p1)==0))
    {
      p1 = 2;
    }
    if ((real(p2)==0) && (imag(p2)==0))
    {
      p2 = 0.5;
    }
    if (settype=="Mandel")
    {
      c = pixel;
    }
    else
    {
      c = p3;
    }
    v = pixel;
  }
  void loop(void)
  {
    u = v;
    v = u - u / p1 * (1 - (c / u)^p1) + p2;
    r = log10(|v - u|);
  }
  bool bailout(void)
  {
    return(r >= -12);
  }
  void description(void)
  {
    this.title = "Luna";

    settype.caption = "Set type";
    settype.enum = "Mandel\nJulia";
    settype.default = 0;

    p1.caption = "Degree of root";
    p1.default = (2,0);
    p1.hint = "Change this value as you like (<> 0 and <> 1).";

    p2.caption = "Perturbation";
    p2.default = (0.5,0);
    p2.hint = "Change this value as you like.\nIt must not be equal to zero!";

    p3.caption = "Radicand";
    p3.default = (1,0);
    p3.hint = "Change this value as you like.\nIt should not be equal to zero!";
    p3.visible = (settype=="Julia");
  }
}


NovaLuna {
  parameter complex p1, p2, p3;
  parameter int settype;
  complex c, d, u, v, w;
  real r;

  void init(void)
  {
    if (((real(p1)==0) || (real(p1)==1)) && (imag(p1)==0))
    {
      p1 = 2;
    }
    if ((real(p2)==0) && (imag(p2)==0))
    {
      p2 = 0.5;
    }
    if (settype=="Mandel")
    {
      c = pixel;
    }
    else
    {
      c = p3;
    }
    v = pixel;
    d = .5 * (p1 - 1) / p1;
  }
  void loop(void)
  {
    u = v;
    w = 1 - (c / u)^p1;
    v = u - u / p1 * w * (1 + d * w) + p2;
    r = log10(|v - u|);
  }
  bool bailout(void)
  {
    return(r >= -12);
  }
  void description(void)
  {
    this.title = "NovaLuna";

    settype.caption = "Set type";
    settype.enum = "Mandel\nJulia";
    settype.default = 0;

    p1.caption = "Degree of root";
    p1.default = (2,0);
    p1.hint = "Change this value as you like (<> 0 and <> 1).";

    p2.caption = "Perturbation";
    p2.default = (0.5,0);
    p2.hint = "Change this value as you like.\nIt must not be equal to zero!";

    p3.caption = "Radicand";
    p3.default = (1,0);
    p3.hint = "Change this value as you like.\nIt should not be equal to zero!";
    p3.visible = (settype=="Julia");
  }
}


Lyra {
  parameter complex p1, p2, p3;
  parameter int settype;
  complex c, d, u, v;
  real r;

  void init(void)
  {
    if (((real(p1)==0) || (real(p1)==1)) && (imag(p1)==0))
    {
      p1 = 2;
    }
    if ((real(p2)==0) && (imag(p2)==0))
    {
      p2 = 0.5;
    }
    if (settype=="Mandel")
    {
      c = pixel;
    }
    else
    {
      c = p3;
    }
    v = pixel;
    d = p1 - 1;
  }
  void loop(void)
  {
    u = v;
    v = (p1 * u) / ((u / c)^p1 + d) + p2;
    r = log10(|v - u|);
  }
  bool bailout(void)
  {
    return(r >= -12);
  }
  void description(void)
  {
    this.title = "Lyra";

    settype.caption = "Set type";
    settype.enum = "Mandel\nJulia";
    settype.default = 0;

    p1.caption = "Degree of root";
    p1.default = (2,0);
    p1.hint = "Change this value as you like (<> 0 and <> 1).";

    p2.caption = "Perturbation";
    p2.default = (0.5,0);
    p2.hint = "Change this value as you like.\nIt must not be equal to zero!";

    p3.caption = "Radicand";
    p3.default = (1,0);
    p3.hint = "Change this value as you like.\nIt should not be equal to zero!";
    p3.visible = (settype=="Julia");
  }
}


AntiLuna {
  parameter complex p1, p2, p3;
  parameter int settype;
  complex c, u, v;
  real r;

  void init(void)
  {
    if (((real(p1)==0) || (real(p1)==1)) && (imag(p1)==0))
    {
      p1 = 2;
    }
    if ((real(p3)==0) && (imag(p3)==0))
    {
      p3 = 1;
    }
    if (settype=="Mandel")
    {
      c = pixel - p3;
    }
    else
    {
      if ((real(p2)==0) && (imag(p2)==0))
      {
        p2 = 0.5;
      }
      c = p2 - p3;
      if (c==0)
      {
        c = p3 / 2;
      }
    }
    v = pixel;
  }
  void loop(void)
  {
    u = v;
    v = u - u / p1 * (1 - (p3 / u)^p1) + c;
    r = log10(|v - u|);
  }
  bool bailout(void)//
  {
    return(r >= -12);
  }
  void description(void)
  {
    this.title = "Anti-Luna";

    settype.caption = "Set type";
    settype.enum = "Mandel\nJulia";
    settype.default = 0;

    p1.caption = "Degree of root";
    p1.default = (2,0);
    p1.hint = "Change this value as you like (<> 0 and <> 1).";

    p2.caption = "Perturbation";
    p2.default = (0.5,0);
    p2.hint = "Change this value as you like.\nIt must not be equal to zero!";
    p2.visible = (settype=="Julia");

    p3.caption = "Radicand";
    p3.default = (1,0);
    p3.hint = "Change this value as you like.\nIt should not be equal to zero!";
  }
}


SinusLuna {
  parameter complex p1, p2;
  parameter int settype;
  complex c, u, v;
  real r;

  void init(void)
  {
    if (((real(p1)==0) || (real(p1)==1)) && (imag(p1)==0))
    {
      p1 = 2;
    }
    if ((real(p2)==0) && (imag(p2)==0))
    {
      p2 = 0.5;
    }
    if (settype=="Mandel")
    {
      c = sin(pixel);
    }
    else
    {
      c = sin(p2);
    }
    v = pixel;
  }
  void loop(void)
  {
    u = v;
    v = u - (sin(u) - c) / cos(u) + p2;
    r = log10(|v - u|);
  }
  bool bailout(void)//**
  {
    return(r >= -12);
  }
  void description(void)
  {
    this.title = "Sinus-Luna";

    settype.caption = "Set type";
    settype.enum = "Mandel\nJulia";
    settype.default = 0;

    p1.caption = "Degree of root";
    p1.default = (2,0);
    p1.hint = "Change this value as you like (<> 0 and <> 1).";

    p2.caption = "Perturbation";
    p2.default = (0.5,0);
    p2.hint = "Change this value as you like.\nIt must not be equal to zero!";
    p2.visible = (settype=="Julia");
  }
}
9
Kalles Fraktaler / Re: Kalles Fraktaler 2.15
« Last post by Microfractal on Yesterday at 08:45:09 PM »
Thanks :)
10
Kalles Fraktaler / Re: Kalles Fraktaler 2.15
« Last post by claude on Yesterday at 08:43:22 PM »
I'll see what I can do about that. EDIT it works for me, it sets the number of colours to the width of the image (or 1024 if it is wider) and fills the palette with a diagonal through the image.  So a 1024x1 image should allow 1:1 pixel->palette mapping.  Supported formats in released KF seem to be BMP, JPEG, GIF, I'll try adding PNG to the list.

Meanwhile I redid the Newton-Raphson zooming dialog and fiddled with the Transformation dialog too.  Some new zooming features, time will tell if they are useful or not.
Pages: [1] 2 3 ... 10