#include #include int i; float x,y; FILE *outfile; #define NPTS 830 #define PAGE_WIDTH 8 #define PAGE_HEIGHT 10 #define PI 3.14159265359879323846 const double THETA = PI/2.4; const double T = .0001; float X0 = -.9; float Y0 = .5; float V0 = .009; float F = .004; float g = -1.98; float t = 0; float px = X0; float py = Y0; float vy = V0*sin(THETA); float vx = V0*cos(THETA); main() { outfile = fopen("ball.eps", "w"); fprintf(outfile,"%%! ball output\n"); fprintf(outfile,"%%%%BoundingBox: 0 0 %f %f\n", 72.0*PAGE_WIDTH,72.0*PAGE_HEIGHT); fprintf(outfile,"gsave\n"); fprintf(outfile,"/l {lineto} def\n"); fprintf(outfile,"%f %f scale\n",72.0*PAGE_WIDTH*0.5, 72.0*PAGE_HEIGHT*0.5); fprintf(outfile,"90 rotate\n"); fprintf(outfile,"1 -1 translate\n"); fprintf(outfile,"0.5 setgray 0.02 setlinewidth\n"); px = X0; py = Y0; fprintf(outfile,"%.3f %.3f moveto\n",px,py); for (i = 1; i < NPTS; i++) { vy = vy + g*T; px = px + vx; py = py + vy; // x = (2.0*i + 1.0 - NPTS)/NPTS; // y = sin(50.0*x)/(50.0*x); // x = (px + 1.0- NPTS)/NPTS; // y = (py + 1.0- NPTS)/NPTS; if (py <= -1 || py >= 1) { if (vy != 0) { if (vy < F && vy > -F) { vy = 0; } else { vy = vy > 0 ? vy-F : vy+F; vy = -vy; } } } if (px <= -1 || px >= 1) { if (vx != 0) { if (vx < F && vx > -F) { vx = 0; } else { vx = vx > 0 ? vx-F : vx+F; vx = -vx; } } } if (px > 1) { px = 1; } else if (px < -1) { px = -1; } if (py > 1) { py = 1; } else if (py < -1) { py = -1; } fprintf(outfile,"%.3f %.3f l\n",px,py); t+=T; } fprintf(outfile,"stroke\n"); fprintf(outfile,"grestore\n"); fprintf(outfile,"showpage\n"); fclose(outfile); }