1

OpenGL を使用して 3D 空間でローレンツ アトラクタをモデル化しようとしています。表示関数に次のコードを記述しました。

void display()
{
    //  Clear the image
    glClear(GL_COLOR_BUFFER_BIT);
    //  Reset previous transforms
    glLoadIdentity();
    //  Set view angle
    glRotated(ph,1,0,0);
    glRotated(th,0,1,0);

    glColor3f(1,1,0);
    glPointSize(1);

    float x = 0.1, y = 0.1, z = 0.1;
    glBegin(GL_POINTS);

    int i;    
    for (i = 0; i < initialIterations; i++) {    
        // compute a new point using the strange attractor equations
        float xnew = sigma*(y-x);
        float ynew = x*(r-z) - y;
        float znew = x*y - b*z;
    
        // save the new point
        x = x+xnew*dt;
        y = y+ynew*dt;
        z = z+znew*dt;        
    
        glVertex4f(x,y,z,i);
    }


    glEnd();

    //  Draw axes in white
    glColor3f(1,1,1);
    glBegin(GL_LINES);
    glVertex3d(0,0,0);
    glVertex3d(1,0,0);
    glVertex3d(0,0,0);
    glVertex3d(0,1,0);
    glVertex3d(0,0,0);
    glVertex3d(0,0,1);
    glEnd();
    //  Label axes
    glRasterPos3d(1,0,0);
    Print("X");
    glRasterPos3d(0,1,0);
    Print("Y");
    glRasterPos3d(0,0,1);
    Print("Z");
    //  Display parameters
    glWindowPos2i(5,5);
    Print("View Angle=%d,%d  %s",th,ph,text[mode]);
    //  Flush and swap
    glFlush();
    glutSwapBuffers();
}

しかし、適切なアトラクターを取得できません。xy、の方程式zは正しいと思います。正しいアトラクタを取得する正しい方法で表示する方法がわかりません。助けてくれてありがとう。以下は私のプログラムが現在出しているものです:

ここに画像の説明を入力こんにちは

4

1 に答える 1

1

さて、私はこの問題を抱えていました。やりたいことがいくつかあります。まず、ポイントを描画して、 glVertex3fglVertex4f()に変更するか、w値を1に変更します。glVertex3fを使用すると、 wがに設定されます。デフォルトでは1。wの値はポイントのスケーリングを変更するので、iが50000程度のクレイジーな数値になります。

次に、値が視覚的な範囲から大きく外れていることに気付くのを修正した後、それを縮小する必要があります。私はあなたがポイントを描くときにこれを行うので、あなたの場合はを使用しますglVertex3f(x*.05,y*.05,z*.05)。.05が大きすぎるか小さすぎる場合は、ニーズに合わせて調整してください。

最後に、dt値が.001であり、x、y、およびzの開始点が約1であることを確認します。

次に、理想的には、これらすべてのポイントを配列に配置し、displayを呼び出すたびに計算を行うのではなく、その配列を読み取ってポイントを描画します。したがって、他の場所で計算を行い、ポイントを送信して表示します。これがお役に立てば幸いです。

于 2012-09-21T02:07:56.320 に答える