View difference between Paste ID: RqTxNf9U and A4STZ2Ux
SHOW: | | - or go back to the newest paste.
1
#include <GL/glut.h>
2
#include <stdlib.h>
3
#include <math.h>
4
#include <iostream>
5
#include <fstream>
6
using namespace std;
7
8
//fstream output("data.txt",ios::out);
9
10
double dt = 0.05; // this is the time step
11
float coeF = 0.5;
12
float verysmall = 0.001;
13-
    glPushMatrix();		
13+
float totaltime = 0.0;
14
float gravity = 0.1;
15
GLfloat near = 0.1,far = 20.0;
16
GLfloat startdispz = -1.0;
17
18
const float DEG2RAD = 3.14159/180;
19
        
20
class ball
21
{
22
	private:
23
		// ax acceleration in x, px position in x, vx velocity in x
24
		double ax,ay,az,px,py,pz,vx,vy,vz,size;
25
26
	public:
27
		ball()
28
		{
29
			px=0.0;py=0.0;
30
		}
31
		ball(double dummyvx, double dummyvy,double dummyvz)
32
		{
33
			px=0;	py=0.1;	pz=0;	size=0.1;
34
			vx=dummyvx;	vy=dummyvy;	vz=dummyvz;	ay=gravity;
35
		}
36
		double getpx(){return px;}  double getpy(){return py;}	double getpz(){return pz;}
37
		double getvx(){return vx;}  double getvy(){return vy;}	double getvz(){return vz;}
38
		double getballsize(){return size;}
39
40
		double getspeed(){return  sqrt(py*py + px*px + pz*pz);}
41
42
		void evolve()
43
		{
44
			//cout << "vy" << vy << "\n";
45
			vy += (-gravity*dt);							// equation for the y component of v
46
			px += vx*dt;	py += vy*dt;	pz += vz*dt;	// equations for all 3 components of p
47
			totaltime += dt;								// update total time
48
			//output << totaltime << " " << px << " "   << py << " "  << pz << "\n";
49
			//cout << totaltime << " " << py  << " " << pz << "\n";
50
			//terminate when we hit the ground i.e pz < 0
51
    
52
			if(py < size)  
53
			{			
54
				py = size;
55
				vy = -vy*coeF;
56
57
				//cout << "The ball has hit the ground\n";
58
				//vx=0;	vy=0;	vz=0;
59
				//output.close();
60
				//exit(0); 
61
			}
62
		}
63
};
64
65
// ball start at origin with velocity vector as in the constructor
66
ball golfball(0.0, 0.4, 0.8);
67
68
void init(void)
69
{
70
	glClearColor(1.0,1.0,1.0,0.0);
71
}
72
73
void drawCircle(float Radius, int numPoints)
74
{
75
	glBegin( GL_LINE_LOOP );
76
	for( int i=0; i<numPoints; i++ )
77
	{
78
		float Angle = i * (2.0*M_PI/numPoints);
79
		float X = cos( Angle )*Radius;
80
		float Y = sin( Angle )*Radius;
81
		glVertex2f( X, Y );
82
	}
83
	glEnd();
84
} 
85
86
void display(void)
87
{
88
	glMatrixMode(GL_PROJECTION);
89
	glLoadIdentity();
90
	gluPerspective(40,1,near,far);
91
	
92
	glMatrixMode(GL_MODELVIEW);	
93
	glLoadIdentity();	
94
	gluLookAt(0.0, 2.0, -3.0, 0.0, 0.0, 10.0, 0.0, 1.0, 0.0);
95
		
96
	glClear(GL_COLOR_BUFFER_BIT);	
97
98
	glPushMatrix();		
99
		glColor3f (0.0, 0.0, 0.0);
100
		glTranslatef(golfball.getpx(),golfball.getpy(),startdispz - golfball.getpz());
101
		glutSolidSphere(golfball.getballsize(),20,20);
102
	glPopMatrix();	
103
	
104
	glPushMatrix();
105
		glColor3f (0.0, 1.0, 0.0);
106
		glTranslatef(0,0.0,-7.5);
107
		glRotatef(90, 1.0, 0.0, 0.0);
108
		drawCircle(0.1,24);
109
		glRotatef(-90, 1.0, 0.0, 0.0);
110
	glPopMatrix();
111
	
112
	glFlush();
113
	glutSwapBuffers();
114
}
115
116
void keyboard(unsigned char key, int x, int y)
117
{
118
	switch (key)
119
	{
120
		case 'q':
121
		exit(0);
122
	}
123
}
124
 
125
void evolve(int a)
126
{
127
    // evolve system here 
128
	golfball.evolve();
129
	glutPostRedisplay();   
130
	glutTimerFunc(20,evolve,20);
131
}
132
133
int main(int argc, char** argv)
134
{
135
   glutInit(&argc, argv);
136
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
137
   glutInitWindowSize (800, 800);
138
   glutCreateWindow (argv[0]);   init();
139
   glutKeyboardFunc (keyboard);
140
   //  glutIdleFunc(evolve);
141
   glutTimerFunc(100,evolve,100);
142
   glutDisplayFunc (display);
143
   cout << "Hello All on CG6301\n";
144
   cout << "This program models projectile motion, the golf ball moves under gravity(no friction)\n";
145
   cout << "The file is closed and the program terminates when the ball is deemed to have hit the ground \n";
146
   cout << "The lab questions ask you to determine how accurately we have modelled the system\n";
147
 
148
   glutMainLoop();
149
   return 0;
150
}