Как построить график, используя openGL, используя заданные пользователем значения / запрашивая значения? - PullRequest
1 голос
/ 14 февраля 2012

Ограничения:

  • Я не могу изменить рамки
  • Мне нужно использовать функции в программе (мой любимый учитель не любитиспользуя функции, данные кем-либо, кроме нее)

Вот код, и он работает именно так (просто не так гладко, как хотелось бы)

#include<OpenGL/gl.h>
#include<OpenGL/glu.h>
#include<GLUT/glut.h>
#include <stdlib.h>
#include <math.h>

int lb=-30, ub=30;
double cpoints=9999999;

void init (void)
{
    glClearColor(1,1,1,1);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(-30,30,-30,30);
}

void graphfunct2D(void)
{
    double dx, xi, yi;
    dx = (ub-lb)*1.0/cpoints;
    glColor3f(0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    xi = lb;
    yi = xi*sin(xi);
    int i;
    for (i=0; i<=cpoints;i++)
    {
        glBegin(GL_POINTS);
        glVertex2i(xi,yi);
        glEnd();
        xi = xi+dx;
        yi = xi*sin(xi);
    }
    glFlush();
}

int main (int argc, char** argv)
{
    glutInit(&argc, argv);
    /*printf("lower bound: ");
    scanf(" %d",&lb);
    printf("upper bound:");
    scanf(" %d",&ub);
    printf("Give me the number of points to plot (int)");
    scanf(" %d",&cpoints);*/
    glutInitWindowSize(500,500);
    glutCreateWindow("Graph function in 2D");
    init();
    glutDisplayFunc(graphfunct2D);
    glutMainLoop();
}

Iхочу, чтобы пользователь мог указать верхнюю и нижнюю границы и построить график функции на основе этих двух, но когда я запускаю программу с незакомментированными входами, она ничего не отображает (когда я не запрашиваю их и использую те, которые я определила, они запускаютсяпросто отлично)

1 Ответ

0 голосов
/ 14 февраля 2012

Попробуйте что-то вроде этого:

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>

double lb=-30, ub=30;
unsigned int cpoints=2048;
void graphfunct2D(void)
{
    double dx, xi, yi;
    int i;
    dx = (ub-lb)/cpoints;

    glClearColor(1, 1, 1, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho( -30, 30, -30, 30, -1, 1 );
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glColor3ub(0,0,0);
    glBegin(GL_LINE_STRIP);
    for( i = 0; i <= cpoints; i++ )
    {
        xi = (i * dx) + lb;
        yi = xi * sin(xi);
        glVertex2f( xi, yi );
    }
    glEnd();
    glutSwapBuffers();
}

int main (int argc, char** argv)
{
    printf("lower bound: ");
    scanf(" %d",&lb);
    printf("upper bound:");
    scanf(" %d",&ub);
    printf("Give me the number of points to plot (int)");
    scanf(" %d",&cpoints);

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(500,500);
    glutCreateWindow("Graph function in 2D");
    glutDisplayFunc(graphfunct2D);
    glutMainLoop();
}
...