通过C+更新图形+;供过于求 我在XCODE中编写了C++程序,实现符号回归和遗传编程。我想创建一个窗口来可视化参考数据(一个2d点阵列)和程序每一代生成的最佳函数

通过C+更新图形+;供过于求 我在XCODE中编写了C++程序,实现符号回归和遗传编程。我想创建一个窗口来可视化参考数据(一个2d点阵列)和程序每一代生成的最佳函数,c++,xcode,glut,C++,Xcode,Glut,简单地说,我希望窗口显示2个图形,并用for循环更新它。据我所知,GLUT似乎是一个很好的框架,我编写了一个函数来显示参考数据(std::vector是我存储“referenceDataSet”变量的方式): void renderScene(){ //最小/最大变量仅用于缩放和居中图形 双minX,maxX,minY,maxY; minX=referenceDataSet[0]。首先; maxX=referenceDataSet[0]。第一; minY=referenceDataSet[0]。

简单地说,我希望窗口显示2个图形,并用for循环更新它。据我所知,GLUT似乎是一个很好的框架,我编写了一个函数来显示参考数据(std::vector是我存储“referenceDataSet”变量的方式):

void renderScene(){
//最小/最大变量仅用于缩放和居中图形
双minX,maxX,minY,maxY;
minX=referenceDataSet[0]。首先;
maxX=referenceDataSet[0]。第一;
minY=referenceDataSet[0]。秒;
maxY=referenceDataSet[0]。秒;
对于(int i=0;i
问题是,我不确定该如何更新窗口,或者绘制第二个不断变化的图形


另外,这是我关于堆栈溢出的第一个问题,如果我在这里做得不正确,或者有任何问题难以理解,我表示歉意。我尽可能地搜索答案,但找不到任何相关内容。

在glut或OpenGL中,
glutIdleFunc(void(*func)(void))
用于更新场景。 每次场景刷新时,idle func将调用
glutDisplayFunc

参考资料在这里

我猜
renderScene()
是您的
glutDisplayFunc
。您需要使用
glutIdleFunc
注册一个空闲函数。在idle函数中,您可以更改不断更改的第二个图形的参数,并且在idle函数中完成更改后,将再次调用
renderScene()

void renderScene(){
    // The min/max variables are just for scaling & centering the graph
    double minX, maxX, minY, maxY;
    minX = referenceDataSet[0].first;
    maxX = referenceDataSet[0].first;
    minY = referenceDataSet[0].second;
    maxY = referenceDataSet[0].second;
    for (int i = 0; i < referenceDataSet.size(); i++) {
        minX = min(minX, referenceDataSet[i].first);
        maxX = max(maxX, referenceDataSet[i].first);
        minY = min(minY, referenceDataSet[i].second);
        maxY = max(maxY, referenceDataSet[i].second);
    }
    glLoadIdentity ();
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin( GL_LINE_STRIP );
    glColor4f( 1.0, 0.0, 0.0, 1.0);
    for (int i = 0; i < referenceDataSet.size(); i++) {
        glVertex2f((referenceDataSet[i].first-minX)/(maxX-minX)-0.5, (referenceDataSet[i].second-minY)/(maxY-minY)-0.5);
    }
    glEnd();
    glFlush();
}

void renderInit(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(600, 600);
    glutCreateWindow("");
    glutDisplayFunc(renderScene);
    glutCheckLoop();
}