www.pudn.com > Tierazon-v29.zip > rsx_fdim_19.c


/////////////////////////////////////////////////////////////// 
// rsx_file.c 
// 
// By: stephen c. ferguson 
// http://home1.gte.net/itriazon/ 
// email: itriazon@gte.net 
// 
///////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////// 
 
#define STRICT 
#define WIN32_LEAN_AND_MEAN 
#include  
#include  
#include "rsx_file.h" 
 
void FDimension() 
{ 
 
	maxit_save = maxit; 
	if (bDimensionVariant) 
		i = maxit = n_color - 2; 
	else 
		i = maxit = n_color;	 
 
	// Set up to Calculate the Fractal Dimension 
 
	// Initialize the mean with zero 
	x_mean = 0; 
	y_mean = 0; 
 
	__real__ z_mean = 0; 
	__imag__ z_mean = 0; 
 
	// Initialize the range	with the first value 
	x_rmin = pXTemp[0];	// x range min 
	x_rmax = pXTemp[0];	// x range max 
	y_rmin = pYTemp[0];	// y range min 
	y_rmax = pYTemp[0];	// y range max 
 
	__real__ z_rmin = x_rmin; 
	__imag__ z_rmin = y_rmin; 
 
	__real__ z_rmax = x_rmax; 
	__imag__ z_rmax = y_rmax; 
 
	switch(filter) 
	{ 
		case 27:			// Fractal Dimension 
		case 33: 
		case 35: 
		case 37: 
		case 38: 
			if (i < 1) 
			{ 
				rj = gj = bj = i = 0; 
				maxit = maxit_save; 
				return; 
			} 
			 
			for (i2 = 0 ; i2 x_rmax) 
					x_rmax = pXTemp[i2]; 
 
				// Get min y 
				if (pYTemp[i2] < y_rmin) 
					y_rmin = pYTemp[i2]; 
 
				// Get max y 
				if (pYTemp[i2] > y_rmax) 
					y_rmax = pYTemp[i2]; 
 
			} 
 
			x_mean = x_mean / maxit; 
			y_mean = y_mean / maxit; 
 
			x_std = 0; 
			y_std = 0; 
 
			for (i2 = 0 ; i2 x_rmax) 
					x_rmax = pXTemp[i2]; 
 
				// Get min y 
				if (pYTemp[i2] < y_rmin) 
					y_rmin = pYTemp[i2]; 
 
				// Get max y 
				if (pYTemp[i2] > y_rmax) 
					y_rmax = pYTemp[i2]; 
			} 
 
			if (i != 0) 
			{ 
				x_mean = x_mean / (double)i; 
				y_mean = y_mean / (double)i; 
			} 
 
			x_std = 0; 
			y_std = 0; 
 
			for (i2 = 0 ; i21) 
			{ 
				x_std = (x_std / i); 
				y_std = (y_std / i); 
			} 
			else 
			{ 
				x_std = 0; 
				y_std = 0; 
			}				 
 
			if (x_std == 0 && y_std == 0) 
			{ 
				jrw = 0; 
				rj = gj = bj = 0; 
			} 
			else 
			{ 
				rj = (log((x_std)) * 30 * dFactor); // 10 
				gj = (log((y_std)) * 30 * dFactor); // 10 
				bj = (log((x_std + y_std)/2) * 30 * dFactor); // 10 
			} 
									 
			maxit = maxit_save; 
			return; 
	} 
}