home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / mandel / image1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  1.4 KB  |  63 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <values.h>
  4. #include <X11/StringDefs.h>
  5. #include <X11/Intrinsic.h>
  6. #include <Xm/Xm.h>
  7. #include <Xm/DrawingA.h>
  8. #include <X11/Xutil.h>
  9. #include <X11/cursorfont.h>
  10. #include "defs.h"
  11. #include "funcs.h"
  12.  
  13. void
  14. CreateImageOld(
  15.     Widget w,
  16.     image_data_t *data)
  17. {
  18.     double delta_p, delta_q, p, x, y, x_2, y_2, r, new_x;
  19.     int n_p, n_q, k, color, mod_max;
  20.     double *q, q_val;
  21.  
  22.     XDefineCursor(XtDisplay(data->area), XtWindow(data->area),
  23.         data->clock_cursor);
  24.     XFlush(XtDisplay(data->area));
  25.     InitBuffer(data);
  26.     delta_p = (data->p_max - data->p_min) / (data->width - 1);
  27.     delta_q = (data->q_max - data->q_min) / (data->height - 1);
  28.     q = (double *)ALLOCATE_LOCAL(data->height * sizeof(double));
  29.     mod_max = data->max_color - 1;
  30.     for (n_q = 0; n_q < data->height; ++n_q)
  31.         q[n_q] = data->q_min + n_q * delta_q;
  32.     for (n_p = 0; n_p < data->width; ++n_p)
  33.     {
  34.         p = data->p_min + n_p * delta_p;
  35.         for (n_q = 0; n_q < data->height; ++n_q)
  36.         {
  37.             k = 0;
  38.             x = 0;
  39.             y = 0;
  40.             q_val = q[n_q];
  41.             do
  42.             {
  43.                 x_2 = x * x;
  44.                 y_2 = y * y;
  45.                 new_x = x_2 - y_2 + p;
  46.                 y = 2 * x * y + q_val;
  47.                 x = new_x;
  48.                 ++k;
  49.                 r = x_2 + y_2;
  50.             } while (r <= data->M && k < data->K);
  51.             if (k == data->K)
  52.                 color = 0;
  53.             else
  54.                 color = k % mod_max + 1;
  55.             BufferPoint(w, data, color, n_p, n_q);
  56.         }
  57.     }
  58.     FlushBuffer(w, data);
  59.     DEALLOCATE_LOCAL((char *)q);
  60.     XDefineCursor(XtDisplay(data->area), XtWindow(data->area),
  61.         data->normal_cursor);
  62. }
  63.