home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / GRAPHICS / TekDemos.t.Z / TekDemos.t / cam.c < prev    next >
C/C++ Source or Header  |  1990-08-02  |  2KB  |  99 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "tekfuncs.h"
  4. #define RAD 0.0174532925199433
  5. double lift[38];
  6. double basecircle,ratio;
  7.  
  8.  
  9. main()
  10. {
  11.     int deg;
  12.     double offset,mag;
  13.     int cl,ctrx,ctry;
  14.     char dummy;
  15.     void curve(),profile();
  16.     startek();
  17.     teklear();
  18.     printf("Rocker Ratio (1.00) for measure @lobe ->");
  19.     scanf("%F",&ratio);
  20.     for (deg=0;deg<19;deg++)
  21.     {
  22.         printf("Lift @ %d crank degrees ->",20*(deg-9));
  23.         scanf("%F",&lift[deg]);
  24.         lift[deg]/=ratio;
  25.     }
  26.     printf("\n\nBase Circle ->");
  27.     scanf("%F",&basecircle);
  28.     basecircle/=2;
  29.     curve("intake");
  30.     printf("\n[CR] to continue:");
  31.     scanf("%c",&dummy);
  32.     scanf("%c",&dummy); /* twice to flush cr from prev number */
  33.     ctrx=512; ctry=384; mag=280.0; offset=0.0; cl=1;
  34.     teklear();
  35.     profile(cl,offset,mag,ctrx,ctry);
  36.     offset=55.0;
  37.     cl=0;
  38.     printf("\n\nEnter Lobe Centerline Angle ->");
  39.     scanf("%F",&offset);
  40.     profile(cl,offset,mag,ctrx,ctry);
  41.     
  42. }
  43.  
  44. void curve(lobe)
  45. char *lobe;
  46. {
  47.     int counter=0;
  48.     teklear();
  49.     printf("Lift Curve for %s lobe:\n",lobe);
  50.     for (counter=0;counter<19;counter++)
  51.     {
  52.         tekline((int)counter*53,10,(int)counter*53,0);
  53.     }
  54.     for (counter=0;counter<6;counter++)
  55.     {
  56.         tekline(0,(int)(counter*102.4),1023,(int)(counter*102.4));
  57.     }
  58.     tekline(477,0,477,530);
  59.     tekline(1023,0,0,0);
  60.     tekline(0,512,0,0);
  61.     for (counter =0;counter<19;counter++)
  62.     {
  63.             teklineto((int)counter*53,(int)(lift[counter]*1024));
  64.     }
  65. }
  66.  
  67. void profile(cl,offset,mag,ctrx,ctry)
  68. int cl;
  69. double offset,mag;
  70. int ctrx,ctry;
  71. {
  72.     int counter=0;
  73.     double x,y,r;
  74.     
  75.     offset*=RAD;
  76. /*    teklear();
  77.  
  78. tekline((int)(ctrx-basecircle*mag),ctry,(int)(ctrx-basecircle*mag),ctry);
  79. */
  80. x=mag*(lift[0]+basecircle)*cos(offset-180*RAD);
  81. y=mag*(lift[0]+basecircle)*sin(offset-180*RAD);
  82. tekline((int)(ctrx+x),(int)(ctry+y),(int)(ctrx+x),(int)(ctry+y));
  83.     for(counter=0;counter<36;counter++)
  84.     {
  85.         x=mag*(lift[counter]+basecircle)*cos((double)(counter-18)*10.0*RAD+offset);
  86.         y=mag*(lift[counter]+basecircle)*sin((double)(counter-18)*10.0*RAD+offset);
  87.         teklineto((int)(ctrx+x),(int)(ctry+y));
  88.     }
  89.     x=mag*(lift[0]+basecircle)*cos(offset-180*RAD);
  90.     y=mag*(lift[0]+basecircle)*sin(offset-180*RAD);
  91.     teklineto((int)(ctrx+x),(int)(ctry+y));
  92. if (cl)
  93.     {
  94.         tekline(300,384,724,384);
  95.         tekline(512,600,512,0);
  96.     }
  97.     printf ("\n\n");
  98. }
  99.