Hi
I am trying to create a program that simulates the movement of robots. However, I suspect that there may be some problems with the coordinate system that I have set up. When I drew the axes to check, they seem to follow the centre of the rectangle that I drew.
What I would like is to fix the axes such that the rectangle moves based on a coordinate system.
Any help is much appreciated.
Thanks!
#include <math.h>
#include <stdlib.h>
#include <windows.h>
#include <gl/Gl.h>
#include <gl/Glu.h>
#include <gl/glut.h>
void RenderScene(); // drawing function
void Simulate(); // simulation function
void init();
int istep = 0, nstep= 2000;
float V = 1.0;
float a = 10;
float t = 0, dt = 0.001;
float x[3] = {0,0,0}; // x[0]: x position; x[1]: y position; x[2]: bearing
int main(int argc, char ** argv){
glutInit(&argc, argv);
glutInitWindowSize(800,600); // width by height in pixels
glutInitWindowPosition(10,50);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); // double buffers to remove flickering image
glutCreateWindow("Basic Movement");
init();
glutDisplayFunc(Simulate);
glutMainLoop();
return 0;
}
void init(){
int w=500;
glMatrixMode(GL_PROJECTION); /* Start modifying the projection matrix. */
glClearColor(0,0,0,0); // Background color
gluOrtho2D(-w,w,-w,w); // Define viewing area (left, right, bottom, up)
}
void RenderScene(){
float r = 10; // size of robot in physical units
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
// draw axes
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(0, 500);
glEnd();
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(500, 0);
glEnd();
// draw bots
glPushMatrix();
glBegin(GL_QUADS);
glVertex2f( r, r);
glVertex2f( r,-r);
glVertex2f(-r,-r);
glVertex2f(-r, r);
glEnd();
glPopMatrix();
glFlush();
glutSwapBuffers(); // transfer to front buffer when drawing is complete
glutPostRedisplay();
}
void Simulate(){
// compute bot new position x, y
if( istep <= nstep) {
x[0] = x[0] + dt*V*cos(x[2]);
x[1] = x[1] + dt*V*sin(x[2]);
x[2] = x[2] + dt*a/V;
t = t + istep*dt;
istep += 1;
glTranslatef(x[0],x[1],0); // translate to new x,y coords
}
RenderScene(); // draw to background buffer
}