Столкнулся со следующей проблемой. Нужно было смоделировать колебания n грузиков на одинаковых пружинках (отклонения грузиков от положения равновесия). Решил написать программу на c и opengl. Вот пример программы:
#include <GL/glut.h>
#include <stdio.h>
int i, n;
float k1, k2, k3, k4, q1, q2, q3, q4, a, h, k, m, v1;
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(640,480);
glutInitWindowPosition(24,384);
glutCreateWindow("runge-cutti");
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
printf ("Введите количество грузиков ");
scanf ("%d", &n);
printf ("Введите жесткость пружины ");
scanf ("%f", &k);
printf ("Введиет коэффициент затухания ");
scanf ("%f", &a);
printf ("Введите массу грузиков ");
scanf ("%f", &m);
printf ("Введите начальную скорость ");
scanf ("%f", &v1);
printf ("Введите шаг интегрирования ");
scanf ("%f", &h);
glOrtho(0.0,n,-1.0,1.0,-1.0,1.0);
n++;
float x[n+1], v[n+1];
for (i=0;i<=n+1;i++)
{
x = 0;
v = 0;
}
v[1]=v1;
while (1)
{
glClear(GL_COLOR_BUFFER_BIT);
for(i=1;i<=n-1;i++)
{
k1 = v;
q1 = -(k/m)*(2*(x) - x[i-1] - x[i+1]) - a*k1;
k2 = v + h*q1/2;
q2 = -(k/m)*(2*(x + h*k1/2) - x[i-1] - x[i+1]) - a*k2;
k3 = v + h*q2/2;
q3 = -(k/m)*(2*(x + h*k2/2) - x[i-1] - x[i+1]) - a*k3;
k4 = v + h*q3/2;
q4 = -(k/m)*(2*(x + h*k3/2) - x[i-1] - x[i+1]) - a*k4;
x = x + h*(k1 + 2*k2 + 2*k3 + k4)/6;
v = v + h*(q1 + 2*q2 + 2*q3 + q4)/6;
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex3f((i-1),x,0.0);
glVertex3f(i,x,0.0);
glVertex3f(i,0.0,0.0);
glVertex3f((i-1),0.0,0.0);
glEnd();
}
glFlush();
glutSwapBuffers();
}
glutMainLoop();
return 0;
}
. Все собралось, скомпилировалось, запустилось и, главное, заработало!
На домашнем компьютере поставил такие же пакеты. Опять таки, собралось, скомпилировалось, запустилось, но окно программы не появляется.
Прошу прощения за некоторый сумбур и жуткий код.