aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Phillips <dbphillipsnz@gmail.com>2015-08-13 10:37:31 +1200
committerDavid Phillips <dbphillipsnz@gmail.com>2015-08-13 10:38:05 +1200
commit7f0f089f4dc98d8c6cc145f7355acf1a5ef9e53a (patch)
tree3b31ca31c43d02415296e412aa03d5ad4398b35e
parent2ad2848d4ee3a9bda31b0e41d05fa9dcdc48ab54 (diff)
downloadfractal-gen-7f0f089f4dc98d8c6cc145f7355acf1a5ef9e53a.tar.xz
Decomposed horrible loaded for loops, removed tricorn
-rw-r--r--Makefile3
-rw-r--r--algorithms/burning-ship-lattice.c10
-rw-r--r--algorithms/burning-ship.c10
-rw-r--r--algorithms/mandelbrot.c13
-rw-r--r--algorithms/tricorn.c57
5 files changed, 26 insertions, 67 deletions
diff --git a/Makefile b/Makefile
index 55fbc83..b3ce7ae 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,11 @@ symlinks: fractal-gen
ln -sf $< mandelbrot-gen
ln -sf $< burning-ship-gen
ln -sf $< burning-ship-lattice-gen
- ln -sf $< tricorn-gen
fractal-gen: fractal-gen.o \
algorithms/mandelbrot.o \
algorithms/burning-ship.o \
algorithms/burning-ship-lattice.o \
- algorithms/tricorn.o
$(CC) -o $@ $^ -lm -lpthread
@@ -23,7 +21,6 @@ clean: clean-object
mandelbrot-gen \
burning-ship-gen \
burning-ship-lattice-gen \
- tricorn-gen \
-f
clean-object:
diff --git a/algorithms/burning-ship-lattice.c b/algorithms/burning-ship-lattice.c
index b197ac7..5497635 100644
--- a/algorithms/burning-ship-lattice.c
+++ b/algorithms/burning-ship-lattice.c
@@ -37,9 +37,13 @@ void *generate_burning_ship_lattice_section(void *section)
double top = -0.082f;
double left = -1.8f;
- for (y = d->core, b = (d->core*(size_units/size)+top); y < size; b+=((cores*size_units)/size), y+=cores)
+ /* FIXME document this */
+ b = (d->core*(size_units/size)+top);
+
+ for (y = d->core; y < size; y += cores)
{
- for (x = clust_id, a = (clust_id*(size_units/size)+left); x < size; a+=((clust_total*size_units)/size), x+=clust_total)
+ a = clust_id*(size_units/size)+left; /* FIXME document this */
+ for (x = clust_id; x < size; x+=clust_total)
{
z = 0;
c = a+I*b;
@@ -51,7 +55,9 @@ void *generate_burning_ship_lattice_section(void *section)
z = cpow( cabsf(crealf(z)) + I*cabsf(cimagf(z)) , power) + c;
}
d->data[d->idx++] = (255*i)/iterat;
+ a += (clust_total*size_units)/size;
}
+ b += (cores*size_units)/size;
}
return NULL;
}
diff --git a/algorithms/burning-ship.c b/algorithms/burning-ship.c
index 1dcafac..c36c8c5 100644
--- a/algorithms/burning-ship.c
+++ b/algorithms/burning-ship.c
@@ -37,9 +37,13 @@ void *generate_burning_ship_section(void *section)
double top = -2.2f;
double left = -2.2f;
- for (y = d->core, b = (d->core*(size_units/size)+top); y < size; b+=((cores*size_units)/size), y+=cores)
+ /* FIXME document this */
+ b = (d->core*(size_units/size)+top);
+
+ for (y = d->core; y < size; y += cores)
{
- for (x = clust_id, a = (clust_id*(size_units/size)+left); x < size; a+=((clust_total*size_units)/size), x+=clust_total)
+ a = clust_id*(size_units/size)+left; /* FIXME document this */
+ for (x = clust_id; x < size; x+=clust_total)
{
z = 0;
c = a+I*b;
@@ -51,7 +55,9 @@ void *generate_burning_ship_section(void *section)
z = cpow( cabsf(crealf(z)) + I*cabsf(cimagf(z)) , power) + c;
}
d->data[d->idx++] = (255*i)/iterat;
+ a += (clust_total*size_units)/size;
}
+ b += (cores*size_units)/size;
}
return NULL;
}
diff --git a/algorithms/mandelbrot.c b/algorithms/mandelbrot.c
index 28bb188..8225d8c 100644
--- a/algorithms/mandelbrot.c
+++ b/algorithms/mandelbrot.c
@@ -37,12 +37,17 @@ void *generate_mandelbrot_section(void *section)
double top = -1.75f;
double left = -2.5f;
- for (y = d->core, b = (d->core*(size_units/size)+top); y < size; b+=((cores*size_units)/size), y+=cores)
+
+ /* FIXME document this */
+ b = (d->core*(size_units/size)+top);
+
+ for (y = d->core; y < size; y += cores)
{
- for (x = clust_id, a = (clust_id*(size_units/size)+left); x < size; a+=((clust_total*size_units)/size), x+=clust_total)
+ a = clust_id*(size_units/size)+left; /* FIXME document this */
+ for (x = clust_id; x < size; x+=clust_total)
{
z = 0;
- c = a+I*b;
+ c = a + I*b;
for (i = 0; i < iterat; i++)
{
if (cabsf(z) >= 2)
@@ -51,7 +56,9 @@ void *generate_mandelbrot_section(void *section)
z = cpow(z , power) + c;
}
d->data[d->idx++] = (255*i)/iterat;
+ a += (clust_total*size_units)/size;
}
+ b += (cores*size_units)/size;
}
return NULL;
}
diff --git a/algorithms/tricorn.c b/algorithms/tricorn.c
deleted file mode 100644
index 07a0d3c..0000000
--- a/algorithms/tricorn.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Part of fractal-gen - Generate iteration-based fractals in PNM format
- * Copyright (c) 2015 David Phillips <dbphillipsnz@gmail.com>
- * All rights reserved
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "../fractal-gen.h"
-
-void *generate_tricorn_section(void *section)
-{
- data_section *d = (data_section*)section;
- unsigned int x,y,i;
- double a,b;
- double complex z,c;
- double size_units = 4.f;
- double top = -2.f;
- double left = -2.3f;
-
- for (y = d->core, b = (d->core*(size_units/size)+top); y < size; b+=((cores*size_units)/size), y+=cores)
- {
- for (x = clust_id, a = (clust_id*(size_units/size)+left); x < size; a+=((clust_total*size_units)/size), x+=clust_total)
- {
- z = 0;
- c = a+I*b;
- for (i = 0; i < iterat; i++)
- {
- if (cabsf(z) >= 2)
- break;
-
- z = cpow(z , power) + c;
- }
- d->data[d->idx++] = (255*i)/iterat;
- }
- }
- return NULL;
-}