Есть код в котором реализована задача на падение квадрата. Не могу сделать так чтобы квадрат был прижат к левой стенке, и еще нужно установить высоту области viewport в соответствии с максимальной достигнутой высотой ymax, ширину в соответствии с длиной стороны бросаемого объекта плюс небольшой отступ.
Если можно с пояснениями, спасибо
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <GL/glut.h>
const float Lmax = 10.0;
float Ymax = 0;
float y0 = 7.0f;
float v0 = 0.2;
float dt = 0.01;
float g = 9.80665;
float t = 0;
float vY = 0, Y = 0;
float size = 1;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1.0f, 0.0f, 0.0f);
glScalef(0.4, 0.4, 0.4);
if (Y >= 0) {
glTranslatef(0, Y, 0.0);
}
glBegin(GL_QUADS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, size);
glVertex2f(size, size);
glVertex2f(size, 0.0f);
glEnd();
glutSwapBuffers();
}
void timer(int value)
{
glutPostRedisplay();
glutTimerFunc(10, timer, 0);
FILE* fp;
fp = fopen("data.txt", "a");
vY = v0 + g * t;
Y = y0+v0*t - 1 / 2.0 * g * t * t;
fprintf(fp, "%.2f, %.2f, %.2f\n", t, vY, Y);
fclose(fp);
t += dt;
}
void obsluhaResize(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (width == 0) width++;
const float aspect_ratio = (float)width / height;
gluOrtho2D(-0.5 * Lmax * aspect_ratio, 0.5 * Lmax * aspect_ratio, -0.5 * Lmax, 0.5 * Lmax);
}
int main(int argc, char** argv)
{
y0 = atof(argv[1]);
v0 = atof(argv[2]);
size = atof(argv[3]);
Ymax = y0 + v0 * v0 / (2 * g);
FILE* fp;
fp = fopen("data.txt", "a");
fprintf(fp, "y0 = %.2fm; v0 = %.2fm/s; a = %.2fm; ymax = %.2fm;\nt(s), ysur(m), vy(m/s)", y0, v0, size, Ymax);
fclose(fp);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(640, 640);
glutCreateWindow("DU2");
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glutDisplayFunc(display);
glutTimerFunc(0, timer, 0);
glutReshapeFunc(obsluhaResize);
glutMainLoop();
return 0;
}