DEVELOPMENT ENVIRONMENT

~alex/mandelbrot-set-gen

7f5e734f41ff771a1336de4772b7b9ba6e7a8459 — Alejandro Laguna a month ago 9c93210
refactor: separate functions into files
5 files changed, 56 insertions(+), 45 deletions(-)

M Makefile
A include/mandelbrot.h
A src/color.c
M src/main.c
A src/math.c
M Makefile => Makefile +1 -1
@@ 1,7 1,7 @@
CC = gcc
CFLAGS = -Wall -Wextra -Werror -g3 -I include/
 
SRC = src/main.c
SRC = src/main.c src/color.c src/math.c
OBJ = $(SRC:.c=.o)
OUT = mandelbrot


A include/mandelbrot.h => include/mandelbrot.h +12 -0
@@ 0,0 1,12 @@
#ifndef MANDELBROT_H
#define MANDELBROT_H

// math.c
int mandelbrot_iterations(double cr, double ci, int max_iter);

// color.c
// TODO: color struct or something
void get_color(int iter, int max_iter, int* r, int* g, int* b);


#endif

A src/color.c => src/color.c +9 -0
@@ 0,0 1,9 @@
void get_color(int iter, int max_iter, int* r, int* g, int* b) {
    if (iter == max_iter) {
        *r = *g = *b = 0; // black inside the set
        return;
    }
    double t = (double)iter / max_iter;
    int gray = (int)((1.0 - t) * 255); // whiter the furthest it was
    *r = *g = *b = gray;
}

M src/main.c => src/main.c +1 -44
@@ 1,49 1,6 @@
#include "mandelbrot.h"
#include <stdio.h>

// the mandelbrot set, basically, is a set of points on the complex plane -
// those points are found using the following equation:
//
// z = z^2 + c
//
// c is an initial point on this complex plane. if the value of z is bigger than
// 2 (which means that it's distance from the origin is larger than 2), it means
// the value is out of the set.
//
// but what's going on with all the shapes and colors? this is a recursive
// function.
//
// we start with z as 0, and then with the equation we get a new z, and then put
// that new z onto the equation and we do that over and over. if z doesn't grow
// over 2, then c is part of the set. if it does pass 2, we know for how many
// iterations we have checked and we color based on that

int mandelbrot_iterations(double cr, double ci, int max_iter) {
    double zr = 0.0, zi = 0.0;
    int iter = 0;
    while (iter < max_iter) {
        double zr2 = zr * zr;
        double zi2 = zi * zi;
        // avoids checking for sqrt
        if (zr2 + zi2 > 4.0) {
            break;
        }
        zi = 2.0 * zr * zi + ci;
        zr = zr2 - zi2 + cr;
        iter++;
    }
    return iter;
}

void get_color(int iter, int max_iter, int* r, int* g, int* b) {
    if (iter == max_iter) {
        *r = *g = *b = 0; // black inside the set
        return;
    }
    double t = (double)iter / max_iter;
    int gray = (int)((1.0 - t) * 255); // whiter the furthest it was
    *r = *g = *b = gray;
}

int main() {
    int width = 800;
    int height = 600;

A src/math.c => src/math.c +33 -0
@@ 0,0 1,33 @@
// the mandelbrot set, basically, is a set of points on the complex plane -
// those points are found using the following equation:
//
// z = z^2 + c
//
// c is an initial point on this complex plane. if the value of z is bigger than
// 2 (which means that it's distance from the origin is larger than 2), it means
// the value is out of the set.
//
// but what's going on with all the shapes and colors? this is a recursive
// function.
//
// we start with z as 0, and then with the equation we get a new z, and then put
// that new z onto the equation and we do that over and over. if z doesn't grow
// over 2, then c is part of the set. if it does pass 2, we know for how many
// iterations we have checked and we color based on that

int mandelbrot_iterations(double cr, double ci, int max_iter) {
    double zr = 0.0, zi = 0.0;
    int iter = 0;
    while (iter < max_iter) {
        double zr2 = zr * zr;
        double zi2 = zi * zi;
        // avoids checking for sqrt
        if (zr2 + zi2 > 4.0) {
            break;
        }
        zi = 2.0 * zr * zi + ci;
        zr = zr2 - zi2 + cr;
        iter++;
    }
    return iter;
}