3

シンボリック回帰と遺伝的プログラミングを実装するために、Xcodeでc++プログラムを作成しました。参照データ(2Dポイントの配列)と、プログラムが各世代で生成する最高の関数を視覚化するためのウィンドウを作成したいと思います。

簡単に言うと、ウィンドウに2つのグラフを表示し、forループで更新してもらいたいと思います。私が理解していることから、GLUTは優れたフレームワークのようであり、参照データを表示する関数を作成しました(std :: vectorは、「referenceDataSet」変数の格納方法です)。

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();
}

これに伴う問題は、ウィンドウを更新する方法、または絶えず変化する2番目のグラフを描画する方法がわからないことです。

また、これはStack Overflowに関する私の最初の質問なので、ここで正しく何かを行っていない場合、またはこれらのいずれかを理解するのが難しい場合は、お詫び申し上げます。できる限り答えを探しましたが、実際には何も見つかりませんでした。

4

1 に答える 1

2

glutまたはOpenGLではglutIdleFunc(void (*func)(void))、シーンを更新するために使用されます。glutDisplayFuncアイドル状態の関数は、シーンが更新されるたびに呼び出します。

参照はここにありますhttp://www.opengl.org/resources/libraries/glut/spec3/node63.html

renderScene()はあなただと思いますglutDisplayFunc。また、を使用してアイドル関数を登録する必要がありますglutIdleFunc。アイドル関数では、常に変化する2番目のグラフのパラメーターを変更でき、アイドル関数のrenderScene()変更が行われた後に再度呼び出されます。

于 2012-12-09T15:58:44.123 に答える