ZodiacMentor

Integer Mandlebrot (.8 fixed point)

Nov 9th, 2022
484
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.20 KB | None | 0 0
  1.         const int scale = 256;
  2.         const int squarescale = 4 * scale;
  3.  
  4.         int mand_rect_int_left = -533;
  5.         int mand_rect_int_top = -330;
  6.         int mand_rect_int_xadd = 7;
  7.         int mand_rect_int_yadd = 7;
  8.         int mand_z_x_base_int;
  9.         int mand_z_y_base_int;
  10.         int mand_z_x_int;
  11.         int mand_z_y_int;
  12.         int mand_c_x_int;
  13.         int mand_c_y_int;
  14.         int mand_x_int;
  15.         int mand_y_int;
  16.         int iters_int;
  17.  
  18.         void DrawMandelbrotInt()
  19.         {
  20.             mand_z_y_base_int = mand_rect_int_top;
  21.             mand_y_int = 0;
  22.             for (; mand_y_int < MANDEL_HEIGHT; mand_y_int++, mand_z_y_base_int += mand_rect_int_yadd)
  23.             {
  24.                 mand_z_x_base_int = mand_rect_int_left;
  25.                 mand_x_int = 0;
  26.                 for (; mand_x_int < MANDEL_WIDTH; mand_x_int++, mand_z_x_base_int += mand_rect_int_xadd)
  27.                 {
  28.                     CalcMandelPixelInt();                  
  29.                     if (iters_int == 0)
  30.                         _frameBuffer[mand_y_int * MANDEL_WIDTH + mand_x_int] = _RGBI_palette[0];
  31.                     else
  32.                         _frameBuffer[mand_y_int * MANDEL_WIDTH + mand_x_int] = _RGBI_palette[((iters_int + 15) % 15) + 1];
  33.                 }
  34.             }
  35.         }
  36.  
  37.         void CalcMandelPixelInt()
  38.         {
  39.             mand_z_x_int = mand_z_x_base_int;
  40.             mand_z_y_int = mand_z_y_base_int;
  41.             mand_c_x_int = mand_z_x_int;
  42.             mand_c_y_int = mand_z_y_int;
  43.  
  44.             iters_int = 0;
  45.  
  46.             while (iters_int < MAX_ITERS)
  47.             {
  48.                 iters_int++;
  49.                 int mand_z_x_sqr = (mand_z_x_int * mand_z_x_int) >> 8;
  50.                 int mand_z_y_sqr = (mand_z_y_int * mand_z_y_int) >> 8;
  51.                 int sqrlen = mand_z_x_sqr + mand_z_y_sqr;
  52.  
  53.                 if (sqrlen > squarescale)
  54.                     return;
  55.  
  56.                 int r = mand_z_x_sqr - mand_z_y_sqr + mand_c_x_int;
  57.                 int i = ((mand_z_x_int * mand_z_y_int * 2) >> 8) + mand_c_y_int;
  58.                 mand_z_x_int = r;
  59.                 mand_z_y_int = i;
  60.             }
  61.  
  62.             iters_int = 0;
  63.             return;
  64.         }
  65.  
Add Comment
Please, Sign In to add comment