home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mandelc.zip / mandel.cpp < prev    next >
C/C++ Source or Header  |  1993-08-01  |  1KB  |  61 lines

  1. #include <mem.h>
  2.  
  3.  
  4. #include "dllFractal.h"
  5.  
  6.  
  7. const char * _export getName(void)
  8. {    return "simple Mandelbrot";
  9. }
  10.  
  11.  
  12. void _export calculateFractal(
  13.     unsigned int iSizeX,
  14.     unsigned int iMaxColors,
  15.     unsigned int iMaxIterations,
  16.     unsigned char *pData,
  17.     double dLimit,
  18.     double dxdx,
  19.     double dydx,
  20.     double dx,
  21.     double dy)
  22. {       unsigned int ixi;
  23.     // You don't need to write the following stuff in assembler!
  24.     // Use a good compiler like EMX for OS/2!
  25.     for (ixi = 0,
  26.        memset(pData, 0, iSizeX*sizeof*pData),
  27.        iMaxColors -= 1;
  28.        ixi < iSizeX;
  29.        ixi++,
  30.        dy += dydx, dx += dxdx
  31.        )
  32.     {    double y2 = dy*dy;
  33.         double x_1_2 = dx + 1.0;
  34.  
  35.         x_1_2 *= x_1_2;
  36.         if (y2 + x_1_2 > 1.0/16.0)
  37.         {    double r = dx*dx + y2;
  38.             double s = r - dx*0.5 + 1.0/16.0;
  39.             if ((r*16 - 5.0)*s + 4*dx > 1)
  40.             {    double xit = dx, yit = dy;
  41.                 unsigned int it;
  42.  
  43.                 for (it = 0;
  44.                     it < iMaxIterations;
  45.                     it++)
  46.                 {    double x2 = xit*xit;
  47.                     double y2 = yit*yit;
  48.                     double r = y2 + x2;
  49.                     if (r > dLimit)
  50.                     {    pData[ixi] = it
  51.                             % iMaxColors + 1;
  52.                         break;
  53.                     }
  54.                     r = 2*xit*yit + dy;
  55.                     xit = x2 - y2 + dx;
  56.                     yit = r;
  57.                 }
  58.             }
  59.         }
  60.     }
  61. }