Skip to content

Instantly share code, notes, and snippets.

@cieplak
Forked from DavidBuchanan314/cursed_mandelbrot.c
Created November 14, 2018 01:03
Show Gist options
  • Save cieplak/b0faddec694043ee63bdf1da4c3622df to your computer and use it in GitHub Desktop.
Save cieplak/b0faddec694043ee63bdf1da4c3622df to your computer and use it in GitHub Desktop.

Revisions

  1. @DavidBuchanan314 DavidBuchanan314 revised this gist Nov 13, 2018. 1 changed file with 2 additions and 4 deletions.
    6 changes: 2 additions & 4 deletions cursed_mandelbrot.c
    Original file line number Diff line number Diff line change
    @@ -1,10 +1,8 @@
    #include <stdio.h>

    #define W 64
    #define SQ(x) (x)*(x)

    #define SQ(x) ((x)*(x))

    #define M0(x,y) (SQ(x)+SQ(y)<4)?0:0xe0
    #define M0(x,y) SQ(x)+SQ(y)<4?0:0xe0
    #define M1(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M0(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0)):0xc0
    #define M2(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M1(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0xa0
    #define M3(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M2(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0x80
  2. @DavidBuchanan314 DavidBuchanan314 revised this gist Nov 13, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion cursed_mandelbrot.c
    Original file line number Diff line number Diff line change
    @@ -37,7 +37,7 @@ static const unsigned char pixels[] = {
    };

    int main() {
    fputs("P5\n"W" "W"\n255\n", stdout);
    fputs("P5\n64 64\n255\n", stdout);
    fwrite(pixels, sizeof(pixels), 1, stdout);
    return 0;
    }
  3. @DavidBuchanan314 DavidBuchanan314 revised this gist Nov 13, 2018. 1 changed file with 0 additions and 2 deletions.
    2 changes: 0 additions & 2 deletions cursed_mandelbrot.c
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,5 @@
    #include <stdio.h>

    typedef float f;

    #define W 64

    #define SQ(x) ((x)*(x))
  4. @DavidBuchanan314 DavidBuchanan314 revised this gist Nov 13, 2018. No changes.
  5. @DavidBuchanan314 DavidBuchanan314 created this gist Nov 13, 2018.
    45 changes: 45 additions & 0 deletions cursed_mandelbrot.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    #include <stdio.h>

    typedef float f;

    #define W 64

    #define SQ(x) ((x)*(x))

    #define M0(x,y) (SQ(x)+SQ(y)<4)?0:0xe0
    #define M1(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M0(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0)):0xc0
    #define M2(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M1(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0xa0
    #define M3(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M2(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0x80
    #define M4(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M3(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0x60
    #define M5(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M4(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0x40
    #define M6(x,y,x0,y0) (SQ(x)+SQ(y)<4)?M5(SQ(x)-SQ(y)+(x0),2*(x)*(y)+(y0),x0,y0):0x20

    #define XF(x) (x)/20-2.2
    #define YF(y) (y)/20-1.6

    #define C1(x,y) M4(XF(x), YF(y), XF(x), YF(y)),
    // ^- change this to 5 or 6 to increase detail

    #define C2(x,y) C1(x,y) C1(x+1,y)
    #define C4(x,y) C2(x,y) C2(x+2,y)
    #define C8(x,y) C4(x,y) C4(x+4,y)
    #define C16(x,y) C8(x,y) C8(x+8,y)
    #define C32(x,y) C16(x,y) C16(x+16,y)
    #define C64(x,y) C32(x,y) C32(x+32,y)

    #define R2(y) C64(0.0,y) C64(0.0,y+1)
    #define R4(y) R2(y) R2(y+2)
    #define R8(y) R4(y) R4(y+4)
    #define R16(y) R8(y) R8(y+8)
    #define R32(y) R16(y) R16(y+16)
    #define R64(y) R32(y) R32(y+32)

    static const unsigned char pixels[] = {
    R64(0.0)
    };

    int main() {
    fputs("P5\n"W" "W"\n255\n", stdout);
    fwrite(pixels, sizeof(pixels), 1, stdout);
    return 0;
    }