|
#include<GL/glut.h> #include<iostream.h> #include<math.h> #include<stdlib.h> double v, ang, tdist=600, range, t=0, tstep=0.1, a=32; const double PI=3.141592653, G=10; const double objx = 500, objy = 200, objm = 150, pm = 10; int xsize=300, ysize=300; void init() { glClearColor(0,0,0,0); glShadeModel(GL_FLAT); } void display() { double x, y, vx, vy, v, t=0, ang; glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); for(int i=0; i<xsize*1.1; i++) for(int j=0; j<ysize*1.1; j++) { v=tdist*double(i)/xsize/1.1; ang=90.0*double(j)/ysize/1.1; vx=v*cos(ang*PI/180); vy=v*sin(ang*PI/180); x=y=0; glBegin(GL_POINTS); do { t+=tstep; // Comment the next two lines out to remove the point force vx+=G*objm*pm*(objx-x)/pow(pow(objx-x,2)+pow(objy-y,2),3.0/2); vy+=G*objm*pm*(objy-y)/pow(pow(objx-x,2)+pow(objy-y,2),3.0/2); vy-=a*tstep; y+=vy*tstep; x+=vx*tstep; } while (y>=0); if (fabs(x-tdist) < tdist) { glColor3f(1-fabs(x-tdist)/tdist, 1-fabs(x-tdist)/tdist, 0); glVertex3f(v, ang, 0); } glEnd(); } } void reshape(int w, int h) { xsize=w; ysize=h; glViewport(0, 0, GLsizei(w), GLsizei(h)); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, tdist, 0, 90, -1, 1); glMatrixMode(GL_MODELVIEW); } void main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(xsize, ysize); glutInitWindowPosition(100, 100); glutCreateWindow("Projectile Plot"); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); } |