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


///////////////////////////////////////////////////// 
// 
// Filters.c 
// By: stephen c. ferguson 
// http://home1.gte.net/itriazon/ 
// email: itriazon@gte.net 
// 
///////////////////////////////////////////////////// 
 
#include  
#include "Talis_F.h" 
 
#define DUAL_BFACTOR 3 
#define OFFSET_COLOR 64 
 
////////////////////////////////////////////////////// 
// Filters 
////////////////////////////////////////////////////// 
inline void Do_Filter() 
{ 
 switch (filter) 
 { 
   case 1:  // Stalks I 
     if (ABS(__real__ z) < dStrands) 
     { 
       xsav = __real__ z; 
       n_color_x = n_color; 
     } 
 
     if (ABS(__imag__ z) < dStrands) 
     { 
       ysav = __imag__ z; 
       n_color_y = n_color; 
     } 
     break; 
 
   case 2:  // Bubbles I 
   case 8:  // Bubbles II 
     if (sum_sqrs_z() < dStrands) 
     { 
       zsav = sum_sqrs_z(); 
       n_color_z = n_color; 
     } 
     break; 
 
   case 3: 
     if (sum_sqrs_z() >= 1e6) 
       return; 
 
     xtot = xtot + ABS(__real__ z); 
     xavg = xtot/n_color; 
     xdif = xavg - xsav; 
     xsav = xavg; 
     if (ABS(xdif) < dStrands) 
       d_color_x = ABS(xdif); 
 
     ytot = ytot + ABS(__imag__ z); 
     yavg = ytot/n_color; 
     ydif = yavg - ysav; 
     ysav = yavg; 
     if (ABS(ydif) < dStrands) 
       d_color_y = ABS(ydif); 
     break; 
 
   case 4: 
     if (sum_sqrs_z() >= 1e6) 
       return; 
 
     ztot = ztot + sum_sqrs_z(); 
     zavg = ztot/n_color; 
     zdif = zavg - zsav; 
     zsav = zavg; 
     if (ABS(zdif) < dStrands) 
       d_color_z = ABS(zdif); 
     break; 
 
	 case 5:  // log(log(...)) 
     break; 
 
   case 6:  // Bubbles I 
     if (sum_sqrs_z() < dStrands) 
     { 
       zsav = sum_sqrs_z(); 
       n_color_z = n_color; 
     } 
     break; 
 
   case 7:  // dual bubbles 
     if (sum_sqrs_z() < dStrands) 
     { 
       zsav = sum_sqrs_z(); 
       n_color_z = n_color; 
     } 
 
     if (sum_sqrs_z() < dStrands/DUAL_BFACTOR) 
     { 
       { 
         zsav1 = sum_sqrs_z(); 
         n_color_z1 = n_color; 
       } 
     } 
 
     break; 
 
   case 9:  // Stalks II 
     if (ABS(__real__ z) < dStrands) 
     { 
       //if (ABS(xsav) < ABS(__real__ z)) 
       { 
         xsav = __real__ z; 
         n_color_x = n_color; 
       } 
     } 
 
     if (ABS(__imag__ z) < dStrands) 
     { 
       //if (ABS(ysav) < ABS(__imag__ z)) 
       { 
         ysav = __imag__ z; 
         n_color_y = n_color; 
       } 
     } 
     break; 
 
   case 10:  // Rings I 
     ssq1 = sqrt(sum_sqrs_z()); 
     if (ssq1 < dStrands_HI && ssq1 > dStrands_LO && zsav < ssq1) 
     //if (ssq1 < dStrands_HI && ssq1 > dStrands_LO) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
     } 
     break; 
 
   case 11:  // Rings II 
   case 12:  // Rings III 
     ssq1 = 1/sum_sqrs_z(); 
     if (ssq1 < dStrands_HI && ssq1 > dStrands_LO && zsav < ssq1) 
     //if (ssq1 < dStrands_HI && ssq1 > dStrands_LO) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
     } 
     break; 
 
   case 13: // Hi Lo I 
     dzx = ABS(__real__ z); 
     dzy = ABS(__imag__ z); 
 
     if (dzx < dStrands_HI_cx && 
         dzx > dStrands_LO_cx) 
     { 
       xtot = dzx; 
       n_color_x = n_color; 
     } 
 
     if (dzy < dStrands_HI_cy && 
         dzy > dStrands_LO_cy) 
     { 
       ytot = dzy; 
       n_color_y = n_color; 
     } 
 
     break; 
 
   case 14:  // testing 
     ssq1 = (sqrt((sum_sqrs_z()))); 
 
     //if (ssq1 < dStrands_HI && ssq1 > dStrands_LO && zsav < ssq1) 
     if (ssq1 < dStrands_HI && ssq1 > dStrands_LO) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       //dzx = __real__ z; 
       //dzy = __imag__ z; 
     } 
     break; 
 
 
   case 17: 
     //ssq1 = sum_sqrs_z(); 
     if ((ABS(__real__ z)) < dStrands && xtot == 0) 
     { 
        xtot = 1; 
        xsav += atan(ABS(__real__ z / __imag__ z))* 
                atan(ABS(__imag__ z / __real__ z)); 
        n_color_x = n_color; 
     } 
 
     if ((ABS(__imag__ z)) < dStrands && ytot == 0) 
     { 
        ytot = 1; 
        ysav += atan(ABS(__real__ z / __imag__ z))* 
                atan(ABS(__imag__ z / __real__ z)); 
        n_color_y = n_color; 
     } 
 
     break; 
 
   case 18: 
     if (sum_sqrs_z() < dStrands) 
     { 
       zsav += atan(ABS(__real__ z / __imag__ z))* 
                atan(ABS(__imag__ z / __real__ z))*2; 
     } 
     break; 
 
   case 19:  // 
   	 ssq1 = sqrt(sum_sqrs_z()); 
     if (ssq1 < dStrands && ssq1 > zsav) 
     { 
       ztot += atan(ABS(__real__ z / __imag__ z))* 
               atan(ABS(__imag__ z / __real__ z))*4*dFactor_2; 
       zsav = ssq1; 
       n_color_z = n_color; 
     } 
 
     break; 
 
   case 20: 
   	 ssq1 = sqrt(sum_sqrs_z()); 
     if (ssq1 < dStrands && ssq1 > zsav) 
     { 
       ztot += atan(ABS(__real__ z / __imag__ z))* 
                atan(ABS(__imag__ z / __real__ z))*4*dFactor_2; 
       zsav = ssq1; 
       n_color_z = n_color; 
     } 
     break; 
 
   case 21:  // Flowers I 
     ssq1 = sum_sqrs_z(); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       ztot = atan(ABS(__real__ z / __imag__ z))* 
               atan(ABS(__imag__ z / __real__ z))*100; 
 
       dif_test = (ztot+(dStrands - zsav)*1000*dFactor_2);  // 1300 
       if (dif_test < m_lower || dif_test > m_upper) 
       { 
         ztot = 0; 
         zsav = 0; 
         n_color_z = 0; 
       } 
     } 
     break; 
 
   case 22:  // Flowers II 
     ssq1 = sum_sqrs_z(); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       ztot = (atan(ABS(__real__ z / __imag__ z))- 
               atan(ABS(__imag__ z / __real__ z)))*30; 
 
       dif_test = ztot + (dStrands - zsav)*1000*dFactor_2; 
       if (dif_test < m_lower || dif_test > m_upper) 
       { 
         ztot = 0; 
         zsav = 0; 
         n_color_z = 0; 
       } 
     } 
     break; 
 
   case 23:  // Flowers III 
     ssq1 = sum_sqrs_z(); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       ztot = (atan(ABS(__real__ z / __imag__ z)))*30; 
       dt = __real__ z * __imag__ z; 
 
       dif_test = ztot + (dStrands - zsav)*1000*dFactor_2; 
       if (dif_test < m_lower || dif_test > m_upper) 
       { 
         ztot = 0; 
         zsav = 0; 
         n_color_z = 0; 
       } 
     } 
     break; 
 
   case 24:  // Flowers IV 
     ssq1 = sum_sqrs_z(); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       ztot = atan(ABS(__real__ z / __imag__ z))* 
               atan(ABS(__imag__ z / __real__ z))*100; 
       dt = __real__ z * __imag__ z; 
 
       dif_test = ztot+(dStrands - zsav)*1000*dFactor_2;  // 1300 
       if (dif_test < m_lower || dif_test > m_upper) 
       { 
         ztot = 0; 
         zsav = 0; 
         n_color_z = 0; 
       } 
     } 
     break; 
 
   case 25:  // Flowers V 
     ssq1 = sum_sqrs_z(); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       zsav = ssq1; 
       n_color_z = n_color; 
       ztot = (sin(__real__ z * __real__ z*100)* 
               sin(__imag__ z * __imag__ z*100))*100; 
       dt = __real__ z * __imag__ z; 
 
			 dif_test = ztot + (dStrands - zsav)*1000*dFactor_2; 
       if (dif_test < m_lower || dif_test > m_upper)  // 40 
       { 
         ztot = 0; 
         zsav = 0; 
         n_color_z = 0; 
       } 
     } 
     break; 
 
   case 26:  // testing 
   	 ssq1 = sqrt(sum_sqrs_z()); 
     if (ssq1 < dStrands && zsav == 0) 
     { 
       ztot += atan(ABS(__real__ z / __imag__ z))* 
               atan(ABS(__imag__ z / __real__ z))*4*dFactor_2; 
       zsav = ssq1; 
       n_color_z = n_color; 
     } 
 
     break; 
 
   default:  // last z values (gradients) 
     // Case 15, 16, 17 
     break; 
 } 
} 
 
void Filter_Complete() 
{ 
	n_color = 0; 
  switch (filter) 
  { 
    case 1: 
 
			/* 
      if (n_color_x)			 
			{ 
        xtot = (dStrands - ABS(xsav))*10000*dFactor; 
				n_color = n_color_x; 
			} 
 
      if (n_color_y) 
			{ 
        ytot = (dStrands - ABS(ysav))*10000*dFactor; 
				n_color = n_color_y; 
			} 
			*/ 
 
      break; 
 
    case 2: 
      if (n_color_z) 
      { 
        ztot = (dStrands - zsav)*1000*dFactor; 
        if (n_color < maxit) 
          n_color = (n_color + ztot)/2; 
        else 
          n_color += (n_color + ztot)/2; 
      } 
      break; 
 
    case 3: 
      if (d_color_x) 
        xtot = (dStrands - d_color_x)*10000*dFactor; 
 
      if (d_color_y) 
        ytot = (dStrands - d_color_y)*10000*dFactor; 
 
      n_color = n_color + (xtot + ytot)/2; 
      break; 
 
    case 4:  // Moving average II 
      if (d_color_z) 
        ztot = (dStrands - d_color_z)*10000*dFactor; 
 
      n_color = n_color + ztot; 
      break; 
 
	  case 5: 
			if (n_color 1) 
          n_color = (n_color - log (log (sum_sqrs_z())) / log (2))*10*dFactor; 
	    break; 
 
    case 6: 
      if (n_color 1) 
          n_color = (n_color - log (log (sum_sqrs_z())) / log (2))*10*dFactor; 
 
      if (n_color_z) 
      { 
        ztot = (dStrands - zsav)*10000*dFactor; 
        if (n_color_z%2==0) 
          n_color = ztot; 
        else 
          n_color = ztot+16; 
      } 
 
      break; 
 
    case 7: 
      if (n_color >= maxit) 
      { 
         n_color = 0; 
         n_color_z = n_color_z1 = 0; 
      } 
      else 
        n_color = 0; 
 
      if (n_color_z) 
      { 
        ztot = (dStrands - zsav)*3000*dFactor; 
        n_color = ztot; 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
      } 
 
      if (n_color_z1) 
      { 
        ztot = (dStrands/DUAL_BFACTOR - zsav1)*3000*dFactor; 
        n_color = ztot+OFFSET_COLOR; 
        if (n_color_z1%2==0) 
          n_color += OFFSET_COLOR; 
      } 
 
      break; 
 
    case 8:   // Bubbles II 
      if (n_color_z) 
      { 
        ztot = (dStrands - zsav)*1000*dFactor; 
        if (n_color < maxit) 
        { 
          n_color = ztot; 
          if (n_color_z%2==0) 
            n_color+=OFFSET_COLOR; 
        } 
				else 
        { 
          n_color += ztot; 
          if (n_color_z%2==0) 
            n_color+=OFFSET_COLOR; 
        } 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      break; 
 
    case 9: 
      if (!n_color_x && !n_color_y) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      else 
      { 
        if (n_color_x) 
        { 
          xtot = n_color_x + (dStrands - ABS(xsav))*1000*dFactor; 
          if (n_color_x%2==0) 
            xtot+=OFFSET_COLOR; 
        } 
 
        if (n_color_y) 
        { 
          ytot = n_color_y + (dStrands - ABS(ysav))*1000*dFactor+OFFSET_COLOR; 
          if (n_color_y%2==0) 
            ytot+=OFFSET_COLOR; 
        } 
 
        if (xtot > ytot) 
          n_color = xtot; 
        else 
        if (ytot > xtot) 
          n_color = ytot; 
        else 
        if (ytot && xtot) 
          n_color = (xtot+ytot)/2; 
      } 
 
      break; 
 
    case 10:   // Rings I 
      if (n_color_z > 2) 
      { 
        ztot = ABS(limit - zsav)*1000*dFactor; 
        n_color = ztot; 
 
        //if (n_color_z%2==0) 
          //n_color+=OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    case 11:   // Rings II 
      if (n_color_z > 2) 
      { 
        ztot = ABS(limit - zsav)*1000*dFactor; 
        if (n_color_z%2==0) 
          n_color = ztot; 
        else 
          n_color = ztot + OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    case 12:  // Rings III 
      if (n_color_z > 2) 
      { 
        ztot = ABS(limit - zsav)*1000*dFactor; 
        if (n_color_z%2==0) 
          n_color = ztot; 
        else 
          n_color = ztot + OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    case 13: // Hi Lo I 
      if (n_color_x || n_color_y) 
      { 
        //if (n_color_x >= n_color_y) 
        if (xtot >= ytot) 
        { 
          n_color += (dStrands_HI_cx-xtot)*10000*dFactor;; 
          //n_color = n_color_x; 
          if (n_color_x%2==0) 
            n_color+=OFFSET_COLOR; 
        } 
        else 
        { 
          n_color += (dStrands_HI_cy-ytot)*10000*dFactor;; 
          //n_color = n_color_y; 
          if (n_color_y%2==0) 
            n_color+=OFFSET_COLOR; 
        } 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      break; 
 
    case 14:   // Rings I w/ sin 
      if (n_color_z > 3) 
      { 
        //ztot = ABS(limit - zsav)*1000*dFactor; 
 
        //ztot = ((limit - zsav))*1000*dFactor; 
 
        ztot = (ABS(dStrands_HI - zsav))*200*dFactor; 
        n_color = ztot; 
 
        if (n_color_z%2==0) 
        	n_color = ztot; 
        else 
          n_color = ztot + OFFSET_COLOR; 
 
        //dt = ABS(dzx*dzx-dzy*dzy); 
        //n_color += dt*100*dFactor; 
 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      break; 
 
    case 15: 
      if (n_color >= maxit) 
      { 
        n_color = ABS(sin(__real__ z * __real__ z*100))* 
                  ABS(sin(__imag__ z * __imag__ z*100))* 
                  //ABS(sin(__imag__ z * __real__ z*100))* 
                  200*dFactor; 
      } 
      else 
      { 
        ssq1 = sum_sqrs_z(); 
        if (ssq1 <= 2) 
          ssq1 = 2; 
        n_color = (n_color - log (log (ssq1)) / log (2))*10*dFactor; 
 
        //n_color = 0; 
        //n_color_z = -1; 
      } 
 
      n_color_z = 0; 
 
      break; 
 
    case 16: 
      if (n_color < maxit) 
      { 
        ztot = atan(ABS(__real__ z / __imag__ z))- 
               atan(ABS(__imag__ z / __real__ z))* 
               60*dFactor; 
 
        if (n_color%2==0) 
          n_color = ztot; 
        else 
          n_color = ztot + OFFSET_COLOR; 
      } 
      else 
      { 
        n_color = 0; 
        n_color_z = -1; 
      } 
      break; 
 
    case 17: 
      //if ((n_color_x || n_color_y) && n_color < maxit) 
      if (n_color_x || n_color_y) 
      { 
        if (n_color_x) 
          xtot = xsav*200*dFactor; 
 
        if (n_color_y) 
          ytot = ysav*200*dFactor; 
 
        if (n_color < maxit) 
          n_color = sqrt(xtot*xtot+ytot*ytot); 
				else 
          n_color += sqrt(xtot*xtot+ytot*ytot); 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    case 18: 
      n_color += zsav*10*dFactor; 
      break; 
 
    case 19: 
      if (n_color_z && n_color > 1) 
      { 
        if (n_color_z%2==0) 
          n_color = n_color_z*2 + ztot*10*dFactor; 
        else 
          n_color = n_color_z*2 + ztot*10*dFactor + OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    case 20: 
      if (n_color_z && n_color > 1) 
      { 
      	ztot += (dStrands - zsav)*1000*dFactor; 
        if (n_color_z%2==0) 
      	  n_color = (n_color_z*2 + ztot)/2; 
        else 
      	  n_color = (n_color_z*2 + ztot)/2 + OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      break; 
 
    case 21:   // Flowers I 
    	if (n_color < maxit && n_color_z == 0) 
      { 
         n_color = 0; 
         n_color_z = -1;  // sets the background to black 
      } 
 
      if (n_color_z == 0) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      if (n_color_z > 0) 
      { 
        ztot = n_color_z*3 
          + ztot + (dStrands - zsav)*1000*dFactor;  // 1300 
        if (n_color < maxit-1) 
          n_color = ztot; 
        else 
          n_color += ztot; 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
      } 
      break; 
 
 
    case 22:   // Flowers II 
    	if (n_color < maxit && n_color_z == 0) 
      { 
         n_color = 0; 
         n_color_z = -1; 
      } 
 
      if (n_color_z == 0) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      if (n_color_z > 0) 
      { 
        ztot = n_color_z*3 
          + ztot + (dStrands - zsav)*1000*dFactor;  // 1300 
 
        if (n_color < maxit-1) 
          n_color = ztot; 
        else 
          n_color += ztot; 
 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
      } 
      break; 
 
    case 23:   // Flowers III 
    	if (n_color < maxit && n_color_z == 0) 
      { 
         n_color = 0; 
         n_color_z = -1; 
      } 
 
      if (n_color_z == 0) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      if (n_color_z > 0) 
      { 
        ztot = n_color_z*3 
          + ztot + (dStrands - zsav)*1000*dFactor;  // 1300 
 
        if (n_color < maxit-1) 
          n_color = ztot; 
        else 
          n_color += ztot; 
 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
 
        if (dt > 0) 
          n_color+=OFFSET_COLOR; 
      } 
      break; 
 
    case 24:   // Flowers IV 
    	if (n_color < maxit && n_color_z == 0) 
      { 
         n_color = 0; 
         n_color_z = -1; 
      } 
 
      if (n_color_z == 0) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      if (n_color_z > 0) 
      { 
        ztot = n_color_z*3 
          + ztot + (dStrands - zsav)*1000*dFactor;  // 1300 
 
        if (n_color < maxit-1) 
          n_color = ztot; 
        else 
          n_color += ztot; 
 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
        if (dt > 0) 
          n_color+=OFFSET_COLOR; 
      } 
      break; 
 
    case 25:   // Flowers V 
    	if (n_color < maxit && n_color_z == 0) 
      { 
         n_color = 0; 
         n_color_z = -1; 
      } 
 
      if (n_color_z == 0) 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
 
      if (n_color_z > 0) 
      { 
        ztot = n_color_z*3 
          + ztot + (dStrands - zsav)*1000*dFactor;  // 1300 
 
        if (n_color < maxit-1) 
          n_color = ztot; 
        else 
          n_color += ztot; 
 
        if (n_color_z%2==0) 
          n_color+=OFFSET_COLOR; 
        if (dt > 0) 
          n_color+=OFFSET_COLOR; 
      } 
      break; 
 
    case 26:  // testing 
      if (n_color_z && n_color > 1) 
      { 
        if (n_color_z%2==0) 
          n_color = n_color_z + ztot*10*dFactor; 
        else 
          n_color = n_color_z + ztot*10*dFactor + OFFSET_COLOR; 
      } 
      else 
      { 
        if (n_color < maxit) 
        { 
          n_color = 0; 
          n_color_z = -1; 
        } 
      } 
      break; 
 
    default: 
      break; 
 
 
  } 
 
  //n_color += (atan(ABS(__real__ z /__imag__ z))*100*dFactor); 
 
	if (xsav == 0 && ysav == 0) 
		n_color = 0; 
}