From 7f0f089f4dc98d8c6cc145f7355acf1a5ef9e53a Mon Sep 17 00:00:00 2001
From: David Phillips <dbphillipsnz@gmail.com>
Date: Thu, 13 Aug 2015 10:37:31 +1200
Subject: Decomposed horrible loaded for loops, removed tricorn

---
 Makefile                          |  3 ---
 algorithms/burning-ship-lattice.c | 10 +++++--
 algorithms/burning-ship.c         | 10 +++++--
 algorithms/mandelbrot.c           | 13 ++++++---
 algorithms/tricorn.c              | 57 ---------------------------------------
 5 files changed, 26 insertions(+), 67 deletions(-)
 delete mode 100644 algorithms/tricorn.c

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;
-}
-- 
cgit v1.1