2012-09-20 44 views
1

我想用OpenGL在3D空間中對Lorenz吸引子建模。我寫了下面的代碼在我的顯示功能:Lorenz在OpenGL中的吸引力

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

但是,我不能得到正確的吸引。我相信我的公式爲x,y,z是正確的。我只是不確定如何以正確的方式顯示出正確的吸引子。謝謝你的幫助。下面是我的程序正在撲滅:

enter image description here你好

+0

你應該發佈你截至目前爲止的截圖。 –

+0

我剛剛發佈了一個屏幕截圖 – Sean

+0

沒有你發佈你的參數'dt' /'sigma' /'r' /'b',這很難說,但你是否嘗試插入示例圖像中的值: http://en.wikipedia.org/wiki/Lorenz_system#Analysis? –

回答

1

好了,所以我有這個問題,有你想要做一些事情, 首先,當你去做glVertex4f()畫點你想要將其更改爲glVertex3f或將您的w值更改爲1.使用glVertex3f它將默認設置爲1。 w值會改變點的縮放比例,所以你最終會得到一個瘋狂的數字,並且只有50000左右。

第二次修復後,你會發現這些值超出了你的視覺範圍,所以你需要縮小它。我會在你抽出分數的時候這樣做,所以在你的情況下我會使用glVertex3f(x*.05,y*.05,z*.05)。如果.05太大或太小,請將其調整爲適合您的需求。

最後確保你的dt值是.001,對於x,y和z,你的出發點應該是1左右。

然後,理想情況下,您希望將所有這些點放在數組中,然後讀取該數組以繪製點,而不是在每次調用顯示時進行計算。所以你在其他地方做的計算,併發送點顯示。希望這有助於。

相關問題