www.pudn.com > Tierazon-v29.zip > FDimension.cpp
// FDimension.cpp #include "stdafx.h" #include "Tierazon.h" #include "TierazonDoc.h" #include "TierazonView.h" #include "mainfrm.h" #include#include "external.h" void CTierazonView::FDimension() { //static nCount = 0; //if (i >= NMAX) //i = NMAX - 1; NMAX = i; // Set up to Calculate the Fractal Dimension //if (i <= NMAX) //{ // // Finish out the array with the last value // for (i2 = i ; 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 (NMAX >= 128 && nCount++ < 5) //{ // sprintf (cstr, "NMAX = %d, x_rmin=%f, x_rmax=%f, y_rmin=%f, y_rmax=%f", // NMAX, x_rmin, x_rmax, y_rmin, y_rmax); // AfxMessageBox(cstr); //} x_mean = x_mean / NMAX; y_mean = y_mean / NMAX; x_std = 0; y_std = 0; for (i2 = 0 ; i2 .0001 && nDIter_x++ < NMAX_Save-2) //while (fabs(da - dm) > .0001 && nDIter_x++ < 10000) { // Calculate Fractal Dimension (real) da = dm; cFDx = (cRng_x/(cx_std*cNMAX*cFDx)).clog()/denominator; dm = cFDx.real(); if (nDIter_x == 1) dFDx_0 = 2.0 - dm; } dFDx = cFDx.real(); if (dFDx <= .5) dFDx = 1 / (1 - dFDx); else dFDx = 1 / dFDx; //////////////////////////////////////////////////////////// // Imaginary //////////////////////////////////////////////////////////// dm = 99; da = 0; nDIter_y = 1; denominator = log((double)(1.0/(double)NMAX)); //while (fabs(da - dm) > .0001 && nDIter_y++ < NMAX_Save-2) //while (fabs(da - dm) > .0001 && nDIter_y++ < 10000) { // Calculate Fractal Dimension (real) da = dm; cFDy = (cRng_y/(cy_std*cNMAX*cFDy)).clog()/denominator; dm = cFDy.real(); if (nDIter_y == 1) dFDy_0 = 2.0 - dm; } dFDy = cFDy.real(); if (dFDy <= .5) dFDy = 1 / (1 - dFDy); else dFDy = 1 / dFDy; //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// // Apply Fractal Dimension to a color switch (nFDOption) { // case 0: // // Addition // jrw = (int) ((dFDx+dFDy) * 100 * dBay100); // break; case 1: // Fractal Dimension Real Initial (FD_0) jrw = (int) (dFDx_0 * 200.0 * dBay100); rj = gj = bj = (dFDx_0 * 200.0 * dBay100); break; case 2: // Fractal Dimension Imginary Initial (FD_0) jrw = (int) (dFDy_0 * 200.0 * dBay100); rj = gj = bj = (dFDy_0 * 200.0 * dBay100); break; case 3: // (FD_0) Addition jrw = (int) ((dFDx_0+dFDy_0) * 200 * dBay100); rj = ((dFDx_0+dFDy_0) * 200 * dBay100); gj = ((dFDx_0) * 200 * dBay100); bj = ((dFDy_0) * 200 * dBay100); break; case 4: // (FD_0) Sum of magnitude jrw = (int) ((dFDx_0*dFDx_0+dFDy_0*dFDy_0) * 200 * dBay100); rj = ((dFDx_0*dFDx_0+dFDy_0*dFDy_0) * 200 * dBay100); gj = ((dFDx_0*dFDx_0) * 200 * dBay100); bj = ((dFDy_0*dFDy_0) * 200 * dBay100); break; case 5: // (FD_0) Multiplication jrw = (int) (dFDx_0 * dFDy_0 * 200 * dBay100); rj = (dFDx_0 * dFDy_0 * 200 * dBay100); gj = (dFDx_0 * 200 * dBay100); bj = (dFDx_0 * 200 * dBay100); break; case 6: // Fractal Dimension Real jrw = (int) (dFDx * 200.0 * dBay100); rj = gj = bj = (int) (dFDx * 200.0 * dBay100); break; case 7: // Fractal Dimension Imaginary jrw = (int) (dFDy * 200.0 * dBay100); rj = gj = bj = (dFDy * 200.0 * dBay100); break; case 8: // FD Addition jrw = (int) ((dFDx+dFDy) * 200 * dBay100); rj = ((dFDx+dFDy) * 200 * dBay100); gj = ((dFDx) * 200 * dBay100); bj = ((dFDy) * 200 * dBay100); break; case 9: // FD Sum of magnitude jrw = (int) ((dFDx*dFDx+dFDy*dFDy) * 200 * dBay100); rj = ((dFDx*dFDx+dFDy*dFDy) * 200 * dBay100); gj = ((dFDx*dFDx) * 200 * dBay100); bj = ((dFDy*dFDy) * 200 * dBay100); break; case 10: // FD Multiplication jrw = (int) (dFDx * dFDy * 200 * dBay100); rj = (dFDx * dFDy * 200 * dBay100); gj = (dFDx * 200 * dBay100); bj = (dFDx * 200 * dBay100); break; default: AfxMessageBox("FD Error"); break; } i += abs(jrw); NMAX = NMAX_Save; return; break; case 28: // Standard deviation case 34: // Strands Std case 36: if (i < 2) { rj = gj = bj = i = 0; NMAX = NMAX_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]; } 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 { jrw = (int) (log((x_std + y_std)/2) * 30 * dBay100); // 10 //rj = (int) (log((x_std + y_std)/2) * 30 * dBay100); // 10 rj = (log((x_std)) * 30 * dBay100); // 10 gj = (log((y_std)) * 30 * dBay100); // 10 bj = (log((x_std + y_std)/2) * 30 * dBay100); // 10 } i += abs(jrw); NMAX = NMAX_Save; return; } }