diff options
| -rw-r--r-- | Makefile | 25 | ||||
| -rw-r--r-- | config.c | 1 | ||||
| -rw-r--r-- | config.h | 3 | ||||
| -rwxr-xr-x | gen-pow-imagery | 253 | ||||
| -rwxr-xr-x | generate-samples | 50 | ||||
| -rw-r--r-- | mbrot-gen.c | 39 | ||||
| -rw-r--r-- | raw-to-png.cpp | 111 | 
7 files changed, 482 insertions, 0 deletions
| diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6e18fac --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +all: config mbrot-gen raw-to-png raw-to-png-bw + +mbrot-gen: +	- gcc -o mbrot-gen mbrot-gen.c ./config.so -lm -Wall + +raw-to-png: +	- g++ -o raw-to-png raw-to-png.cpp -lm -lGL -lX11 -lpthread -Wall + +raw-to-png-bw: +	- g++ -o raw-to-png-bw raw-to-png.cpp -DBW -lm -lGL -lX11 -lpthread -Wall + + +clean: clean-config clean-exec +clean-exec: +	- rm mbrot-gen raw-to-png -f + +clean-config: +	- rm config.so -f + +config: +	- gcc -shared -o config.so config.c + + +samples: +	- ./generate-samples diff --git a/config.c b/config.c new file mode 100644 index 0000000..f2c8a32 --- /dev/null +++ b/config.c @@ -0,0 +1 @@ +unsigned int SIZE=1120;unsigned int ITERATIONS=50;float POWER=2.00; diff --git a/config.h b/config.h new file mode 100644 index 0000000..12b650d --- /dev/null +++ b/config.h @@ -0,0 +1,3 @@ +unsigned int SIZE; +unsigned int ITERATIONS; +float POWER; diff --git a/gen-pow-imagery b/gen-pow-imagery new file mode 100755 index 0000000..1d785e3 --- /dev/null +++ b/gen-pow-imagery @@ -0,0 +1,253 @@ +#!/bin/sh + +OUT_DIR="pow_imagery" + +mkdir -p $OUT_DIR + + + +make_sample () { +	N="$1-$2-$3pow" + +	if [ -e $OUT_DIR/$N.png ]; then +		echo $OUT_DIR/$N : Already exists, skipping. +	else  +		# Configure the generator +		echo unsigned int SIZE=$1\;unsigned int ITERATIONS=$2\;float POWER=$3\; > config.c +		make config +	 +		# Generate raw data +		./mbrot-gen > $OUT_DIR/$N.raw +	 +		# Make normal colour image +		./raw-to-png $OUT_DIR/$N.raw $1 $1 +		mv 0,0.png $OUT_DIR/$N.png +	 +		# Make (hypnotic) bw image to show boundaries clearly +		./raw-to-png-bw $OUT_DIR/$N.raw $1 $1 +		mv 0,0.png $OUT_DIR/$N-bw.png + +		rm $OUT_DIR/$N.raw +	fi +} + +make_sample 560 50 0.01 +make_sample 560 50 0.02 +make_sample 560 50 0.03 +make_sample 560 50 0.04 +make_sample 560 50 0.05 +make_sample 560 50 0.06 +make_sample 560 50 0.07 +make_sample 560 50 0.08 +make_sample 560 50 0.09 +make_sample 560 50 0.10 + +make_sample 560 50 0.11 +make_sample 560 50 0.12 +make_sample 560 50 0.13 +make_sample 560 50 0.14 +make_sample 560 50 0.15 +make_sample 560 50 0.16 +make_sample 560 50 0.17 +make_sample 560 50 0.18 +make_sample 560 50 0.19 + +make_sample 560 50 0.20 +make_sample 560 50 0.21 +make_sample 560 50 0.22 +make_sample 560 50 0.23 +make_sample 560 50 0.24 +make_sample 560 50 0.25 +make_sample 560 50 0.26 +make_sample 560 50 0.27 +make_sample 560 50 0.28 +make_sample 560 50 0.29 + +make_sample 560 50 0.30 +make_sample 560 50 0.31 +make_sample 560 50 0.32 +make_sample 560 50 0.33 +make_sample 560 50 0.34 +make_sample 560 50 0.35 +make_sample 560 50 0.36 +make_sample 560 50 0.37 +make_sample 560 50 0.38 +make_sample 560 50 0.39 + +make_sample 560 50 0.40 +make_sample 560 50 0.41 +make_sample 560 50 0.42 +make_sample 560 50 0.43 +make_sample 560 50 0.44 +make_sample 560 50 0.45 +make_sample 560 50 0.46 +make_sample 560 50 0.47 +make_sample 560 50 0.48 +make_sample 560 50 0.49 + +make_sample 560 50 0.50 +make_sample 560 50 0.51 +make_sample 560 50 0.52 +make_sample 560 50 0.53 +make_sample 560 50 0.54 +make_sample 560 50 0.55 +make_sample 560 50 0.56 +make_sample 560 50 0.57 +make_sample 560 50 0.58 +make_sample 560 50 0.59 + +make_sample 560 50 0.60 +make_sample 560 50 0.61 +make_sample 560 50 0.62 +make_sample 560 50 0.63 +make_sample 560 50 0.64 +make_sample 560 50 0.65 +make_sample 560 50 0.66 +make_sample 560 50 0.67 +make_sample 560 50 0.68 +make_sample 560 50 0.69 + +make_sample 560 50 0.70 +make_sample 560 50 0.71 +make_sample 560 50 0.72 +make_sample 560 50 0.73 +make_sample 560 50 0.74 +make_sample 560 50 0.75 +make_sample 560 50 0.76 +make_sample 560 50 0.77 +make_sample 560 50 0.78 +make_sample 560 50 0.79 + +make_sample 560 50 0.80 +make_sample 560 50 0.81 +make_sample 560 50 0.82 +make_sample 560 50 0.83 +make_sample 560 50 0.84 +make_sample 560 50 0.85 +make_sample 560 50 0.86 +make_sample 560 50 0.87 +make_sample 560 50 0.88 +make_sample 560 50 0.89 + +make_sample 560 50 0.90 +make_sample 560 50 0.91 +make_sample 560 50 0.92 +make_sample 560 50 0.93 +make_sample 560 50 0.94 +make_sample 560 50 0.95 +make_sample 560 50 0.96 +make_sample 560 50 0.97 +make_sample 560 50 0.98 +make_sample 560 50 0.99 + +make_sample 560 50 1.00 +make_sample 560 50 1.01 +make_sample 560 50 1.02 +make_sample 560 50 1.03 +make_sample 560 50 1.04 +make_sample 560 50 1.05 +make_sample 560 50 1.06 +make_sample 560 50 1.07 +make_sample 560 50 1.08 +make_sample 560 50 1.09 + +make_sample 560 50 1.10 +make_sample 560 50 1.11 +make_sample 560 50 1.12 +make_sample 560 50 1.13 +make_sample 560 50 1.14 +make_sample 560 50 1.15 +make_sample 560 50 1.16 +make_sample 560 50 1.17 +make_sample 560 50 1.18 +make_sample 560 50 1.19 + +make_sample 560 50 1.20 +make_sample 560 50 1.21 +make_sample 560 50 1.22 +make_sample 560 50 1.23 +make_sample 560 50 1.24 +make_sample 560 50 1.25 +make_sample 560 50 1.26 +make_sample 560 50 1.27 +make_sample 560 50 1.28 +make_sample 560 50 1.29 + +make_sample 560 50 1.30 +make_sample 560 50 1.31 +make_sample 560 50 1.32 +make_sample 560 50 1.33 +make_sample 560 50 1.34 +make_sample 560 50 1.35 +make_sample 560 50 1.36 +make_sample 560 50 1.37 +make_sample 560 50 1.38 +make_sample 560 50 1.39 + +make_sample 560 50 1.40 +make_sample 560 50 1.41 +make_sample 560 50 1.42 +make_sample 560 50 1.43 +make_sample 560 50 1.44 +make_sample 560 50 1.45 +make_sample 560 50 1.46 +make_sample 560 50 1.47 +make_sample 560 50 1.48 +make_sample 560 50 1.49 + +make_sample 560 50 1.50 +make_sample 560 50 1.51 +make_sample 560 50 1.52 +make_sample 560 50 1.53 +make_sample 560 50 1.54 +make_sample 560 50 1.55 +make_sample 560 50 1.56 +make_sample 560 50 1.57 +make_sample 560 50 1.58 +make_sample 560 50 1.59 + +make_sample 560 50 1.60 +make_sample 560 50 1.61 +make_sample 560 50 1.62 +make_sample 560 50 1.63 +make_sample 560 50 1.64 +make_sample 560 50 1.65 +make_sample 560 50 1.66 +make_sample 560 50 1.67 +make_sample 560 50 1.68 +make_sample 560 50 1.69 + +make_sample 560 50 1.70 +make_sample 560 50 1.71 +make_sample 560 50 1.72 +make_sample 560 50 1.73 +make_sample 560 50 1.74 +make_sample 560 50 1.75 +make_sample 560 50 1.76 +make_sample 560 50 1.77 +make_sample 560 50 1.78 +make_sample 560 50 1.79 + +make_sample 560 50 1.80 +make_sample 560 50 1.81 +make_sample 560 50 1.82 +make_sample 560 50 1.83 +make_sample 560 50 1.84 +make_sample 560 50 1.85 +make_sample 560 50 1.86 +make_sample 560 50 1.87 +make_sample 560 50 1.88 +make_sample 560 50 1.89 + +make_sample 560 50 1.90 +make_sample 560 50 1.91 +make_sample 560 50 1.92 +make_sample 560 50 1.93 +make_sample 560 50 1.94 +make_sample 560 50 1.95 +make_sample 560 50 1.96 +make_sample 560 50 1.97 +make_sample 560 50 1.98 +make_sample 560 50 1.99 + +make_sample 560 50 2.00 diff --git a/generate-samples b/generate-samples new file mode 100755 index 0000000..54ccc71 --- /dev/null +++ b/generate-samples @@ -0,0 +1,50 @@ +#!/bin/sh + +OUT_DIR="samples" + +mkdir -p $OUT_DIR + + + +make_sample () { +	# Configure the generator +	echo unsigned int SIZE=$1\;unsigned int ITERATIONS=$2\;float POWER=$3\; > config.c +	make config + +	# Generate raw data +	./mbrot-gen > $OUT_DIR/$1-$2-$3pow.raw + +	# Make normal colour image +	./raw-to-png $OUT_DIR/$1-$2-$3pow.raw $1 $1 +	mv 0,0.png $OUT_DIR/$1-$2.png + +	# Make (hypnotic) bw image to show boundaries clearly +	./raw-to-png-bw $OUT_DIR/$1-$2-$3pow.raw $1 $1 +	mv 0,0.png $OUT_DIR/$1-$2-$3-pow-bw.png + +	rm $OUT_DIR/$1-$2-$3pow.raw +} + +make_sample   35 10 2 +make_sample   70 10 2 +make_sample  140 10 2 +make_sample  280 10 2 +make_sample  560 10 2 +make_sample 1120 10 2 +make_sample 2240 10 2 + +make_sample   35 50 2 +make_sample   70 50 2 +make_sample  140 50 2 +make_sample  280 50 2 +make_sample  560 50 2 +make_sample 1120 50 2 +make_sample 2240 50 2 + +make_sample   35 100 2 +make_sample   70 100 2 +make_sample  140 100 2 +make_sample  280 100 2 +make_sample  560 100 2 +make_sample 1120 100 2 +make_sample 2240 100 2 diff --git a/mbrot-gen.c b/mbrot-gen.c new file mode 100644 index 0000000..cb79f54 --- /dev/null +++ b/mbrot-gen.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <complex.h> +#include <math.h> +#include "config.h" + +int main(int argc, char **argv) +{ +	unsigned int x, y, i; +	float a,b; +	float complex z,c; + +	fprintf(stderr, "Creating %dx%d image (raw format)\n",SIZE,SIZE); + +	y = 0; +	for (b = -1.75f; y < SIZE; b+=(3.5f/SIZE)) +	{ +		x = 0; +		for (a = -2.5f; x < SIZE; a+=(3.5f/SIZE)) +		{ +			z = 0; +			c = a+I*b; +			for (i = 0; i < ITERATIONS; i++) +			{ +				if (cabsf(z) >= 2) +					break; + +				z = cpow(z,POWER)+c; +			} + +			printf("%c",( (255*i)/ITERATIONS ) ); +			x++; +		} +		y++; +		if ( (y%10) == 0 ) +			fprintf(stderr,"\r%.3f%%",y/(float)SIZE*100); +	} +	fprintf(stderr,"\n"); +	return 0; +} diff --git a/raw-to-png.cpp b/raw-to-png.cpp new file mode 100644 index 0000000..0a6746e --- /dev/null +++ b/raw-to-png.cpp @@ -0,0 +1,111 @@ +#include <iostream> +#include <stdio.h> +#include <CImg.h> + +//#define TILE_WIDTH 200 +//#define TILE_HEIGHT 200 + +//#define IMAGE_WIDTH 12200 +//#define IMAGE_HEIGHT 12200 + +using namespace cimg_library; + +int main(int argc, char **argv) +{ +	unsigned int TILE_SIZE, IMAGE_SIZE, x, y, tile_x, tile_y; +	char out_name[] = "________.png"; + +	if (argc != 4) +	{ +		printf("%s in_file image_square tile_square\n",argv[0]); +		return 1; +	} + +	IMAGE_SIZE = atoi(argv[2]); +	TILE_SIZE = atoi(argv[3]); + + +	unsigned char *buf = (unsigned char*)malloc(TILE_SIZE); + +	FILE *fp = fopen(argv[1],"r"); +	if (!fp) +	{ +		printf("ERROR: Cannot open file\n"); +		return 1; +	} + +	CImg<unsigned char> buffer(TILE_SIZE, TILE_SIZE,1,3,1); +	for (tile_y = 0; tile_y < IMAGE_SIZE/TILE_SIZE; tile_y++) +	{ +		for (tile_x = 0; tile_x < IMAGE_SIZE/TILE_SIZE; tile_x++) +		{ +			// Seek to data for start of this tile +			#define DATA_Y (tile_y * (TILE_SIZE * TILE_SIZE) * (IMAGE_SIZE / TILE_SIZE)) +			#define DATA_X (tile_x * TILE_SIZE) + +			fseek(fp, DATA_Y+DATA_X, SEEK_SET); + +			printf("Creating tile (%d,%d)...\n", tile_x, tile_y); + +			for (y = 0; y < TILE_SIZE; y++) +			{ +				fread(buf, TILE_SIZE, 1, fp); +				for (x = 0; x < TILE_SIZE; x++) +				{ +#ifdef BW +					if (buf[x] % 2) +					{ +						buffer(x,y,0) = buffer(x,y,1) = buffer(x,y,2) = 255; +					} else { +						buffer(x,y,0) = buffer(x,y,1) = buffer(x,y,2) = 0; +					} +#else +					buffer(x,y,0) = 0; +					buffer(x,y,1) = buf[x]; +					buffer(x,y,2) = 0; +#endif +				} +				// Seek and wrap around to next Y pos for tile +				fseek(fp, IMAGE_SIZE-TILE_SIZE, SEEK_CUR); +			} +			sprintf(out_name,"%d,%d.png",tile_x,tile_y); +			buffer.save(out_name); +		} +	} +	fclose(fp); +	free(buf); +} + + + + + + + + + + + + + + + + + + + + + +//#ifdef BLACK +//					if (buf[x] == 255) +//					{ +//						buffer(x,y,0) = 0; +//						buffer(x,y,1) = 0; +//						buffer(x,y,2) = 0; +//					} else { +//#endif + +//#ifdef BLACK +//					} +//#endif +//				printf("%d,%d\n",x,y); | 
