home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Environments / MacCjr / MacC Jr / Floating Point Demo / FloatFun.c
Encoding:
C/C++ Source or Header  |  1987-01-05  |  2.0 KB  |  84 lines  |  [TEXT/EDIT]

  1. // FloatFun.c
  2. // © Copyright 1985, 1987 Consulair Corporation, All rights reserved.
  3. // An example of using C floating point and QuickDraw.
  4.  
  5. #include <sane.h>
  6. #include <window.h>
  7. #include <events.h>
  8.  
  9. #define true 1
  10. #define false 0
  11.  
  12. Rect rect;
  13. // static char getchar();
  14.  
  15. #define MaxVertices 72
  16. #define slop 25
  17. #define width 150
  18. #define height 120
  19. #define leftBound ((512 - (2*width+slop))/2)
  20. #define topBound ((384 - (2*height+slop))/2-10)
  21.  
  22. main()
  23.     {
  24.     Point center[4], points[MaxVertices];
  25.     WindowPtr window[4];
  26.     short x,y, i, j, iter, base, vertices;
  27.     EventRecord event;
  28.     extended radius, dx, dy, theta, increment, pi2;
  29.     for (iter = 0; iter < 4; iter++)
  30.         {
  31.         rect.left = leftBound + (iter&1)*(width+slop);
  32.         rect.right = rect.left+width;
  33.         rect.top = topBound + (iter/2)*(height+slop);
  34.         rect.bottom = rect.top+height;
  35.         center[iter].v = (rect.bottom - rect.top)/2;
  36.         center[iter].h = (rect.right - rect.left)/2;
  37.         window[iter] = NewWindow(0, &rect, "\pFun Window", true, 0, -1, false, 0);
  38.         }
  39.     base = 6;
  40.     while (!Button())
  41.         {
  42.         for (iter = 0; iter < 4; iter++)
  43.             {
  44.             if ((vertices = (iter+1)*base) > MaxVertices) vertices = MaxVertices;
  45.             radius = (center[iter].h-center[iter].h/4+1) & -2;
  46.             SetPort(window[iter]);
  47.             getPoints(vertices, points, center[iter], radius);
  48.             for (i = 0; i < vertices; i++)
  49.                 for (j = i+1; j < (i + vertices/2); j++)
  50.                     drawLine(points[i], points[j % vertices]);
  51.             }
  52.         base++;
  53. //        if (getchar() == '.') ExitToShell();
  54.         for (iter = 0; iter < 4; iter++)
  55.             {
  56.             SetPort(window[iter]);
  57.             EraseRect(&(window[iter])->portRect);
  58.             }
  59.         }
  60.  }
  61.  
  62. drawline(p1, p2)
  63.   Point p1, p2;
  64.   {
  65.   MoveTo(p1.h, p1.v);
  66.   LineTo(p2.h, p2.v);
  67.   }
  68.   
  69. getPoints(npoints, pointVec, center, radius)
  70.   short npoints;
  71.   Point pointVec[], center;
  72.   extended radius;
  73.   {
  74.   short i;
  75.   extended increment = (2.*pi())/npoints;
  76.   extended theta = 0;
  77.   
  78.   for (i = 0; i < npoints; i++)
  79.     {
  80.     pointVec[i].h = (center.h + radius*sin(theta)) + .5;
  81.     pointVec[i].v = (center.v -  radius*cos(theta)) + .5;
  82.     theta += increment;
  83.     }
  84.   }