home *** CD-ROM | disk | FTP | other *** search
/ Photo CD Demo 1 / Demo.bin / gle / gle / curve.c < prev    next >
C/C++ Source or Header  |  1992-11-29  |  2KB  |  64 lines

  1. #include "all.h"
  2. #include <math.h>
  3. #include "mygraph.h"   /* Prototypes for all the graph routines */
  4. #define true (!false)
  5. #define false 0
  6. int ncvec=0;
  7. int cvec_list(long *pcode);
  8. double cvecx[30],cvecy[30];
  9. double dcvecx[30],dcvecy[30];
  10. int rbezier(double x1, double y1, double x2, double y2, double x3, double y3);
  11. g_curve(long *pcode)
  12. {
  13.     double oox,ooy;
  14.     double oval;
  15.     int ct=2,i;
  16.     double dx1,dy1;
  17.  
  18.     ncvec = 0;
  19.     cvec_list(pcode);
  20.     dx1 = cvecx[1] - cvecx[0];
  21.     dy1 = cvecy[1] - cvecy[0];
  22.     dcvecx[0] = cvecx[ncvec] - cvecx[ncvec-1];
  23.     dcvecy[0] = cvecy[ncvec] - cvecy[ncvec-1];
  24.     for (i=0;i<=ncvec;i++) {
  25.         cvecx[i] = cvecx[i] - dx1;
  26.         cvecy[i] = cvecy[i] - dy1;
  27.     }
  28.     for (i=1;i<ncvec;i++) {
  29.         dcvecx[i] = (cvecx[i+1] - cvecx[i-1]) * .25;
  30.         dcvecy[i] = (cvecy[i+1] - cvecy[i-1]) * .25;
  31.     }
  32.     for (i=1; i<ncvec-1; i++) {
  33.         rbezier(dcvecx[i],dcvecy[i],dcvecx[i+1],dcvecy[i+1]
  34.             ,cvecx[i+1],cvecy[i+1]);
  35.     }
  36. }
  37. rbezier(double x1, double y1, double x2, double y2, double x3, double y3)
  38. {
  39.     double cx,cy;
  40.     g_get_xy(&cx,&cy);
  41.     g_bezier(x1+cx,y1+cy,x3-x2,y3-y2,x3,y3);
  42. }
  43. cvec_list(long *pcode)
  44. {
  45.     char ostr[90];
  46.     int i,cp=0,otyp;
  47.     double cx,cy,x1,y1,x2,y2;
  48.     g_get_xy(&cx,&cy);
  49.     ncvec = 0;
  50.     cvecx[0] = cx;
  51.     cvecy[0] = cy;
  52.     while ( *(pcode + cp++)==111) {
  53.         if (ncvec>27) {gprint("Too many param in curve\n"); return; }
  54.         eval(pcode,&cp,&x1,ostr,&otyp);
  55.         eval(pcode,&cp,&y1,ostr,&otyp);
  56.         cvecx[++ncvec] = x1;
  57.         cvecx[ncvec] = cvecx[ncvec] + cvecx[ncvec-1];
  58.         cvecy[ncvec] = y1;
  59.         cvecy[ncvec] = cvecy[ncvec] + cvecy[ncvec-1];
  60.     }
  61. }
  62.  
  63.  
  64.