2010-02-07 38 views
0

我使用的是glutTimerFunc(...)實現機器人手臂的運動,我的問題是左側0度到90是很容易做到,180到-180在opengl C++中的運動?

當我嘗試0到-90度,手臂不回採?我嘗試了各種方法,但都是錯誤的,你能提出更好的選擇嗎?

這是我的定時器功能,

void myTimerFunc(int var) 
{ 
switch(var) 
{ 
case 1: if(shoulder>=90) 
      stop=1;

if(!stop) 
    {  
     shoulder = (shoulder + 5); 
     glutPostRedisplay(); 
     glutTimerFunc(100,myTimerFunc,1); 
     break; 
    } 


    if(shoulder<=0) 
     stop1=1; 

    if(!stop1) 
    { 
     shoulder = (shoulder - 5); 
     glutPostRedisplay(); 
     glutTimerFunc(100,myTimerFunc,1); 
     break; 
    } 

情況2:如果(肩> = 360)

 stop2=1; 

    if(!stop2) 

    { 

     shoulder = (shoulder - 5); 

     glutPostRedisplay(); 

     glutTimerFunc(100,myTimerFunc,2); 

     break; 

    } 

//這裏機器人手臂不停止...........

if(shoulder<=270) 
     stop2 = 0; 
     stop3 = 1; 



    if(!stop3) 

    { 

     shoulder = (shoulder + 5); 

     glutPostRedisplay(); 

     glutTimerFunc(100,myTimerFunc,2); 

     break; 

    } 

默認值:break; }}

我是來自鍵盤功能調用這個.......

void keyboard (unsigned char key, int x, int y) 
{ 
    switch (key) 
    { 
     case 's':    
     glutTimerFunc(100,myTimerFunc,1); 
      break; 

     glutTimerFunc(100,myTimerFunc,2); 
      break;

回答

1

看起來像你對我感到困惑如何看待的角度。你是用一個[0,360]的整圈還是[-180,+180]?我在你的代碼中看到一個對270的支票,但你的散文中提到了-90。是的,它們是「一樣的」,但如果它不起作用,或許你的代碼中出現了一些混淆。

如果您打算使用[-180,+180],零度作爲您機器人手臂的中性位置,或許您可以利用對稱性並使用絕對值函數。你只需要這樣編碼一次。如果[0,+90]成功,它也可以用於[-90,0]。

在我看來,你並沒有利用面向對象的思想。這種方法具有運動和定時以及圖形刷新的全部方法。編寫更小的方法並進行單元測試,以確保它的工作是更好的方法。這就是所謂的「分解」。當你說「這是一個很大的方法」的時候,它暗示我可能它太大了,需要重構。

+0

是的,我有一個圓形底座,它可以移動360度,我想180 t0 -180的運動,我宣佈了一個整數變量,關心角度。除了表示角度的靜態整數,還有其他更好的選擇嗎? – 2010-02-07 15:47:10

+0

那麼爲什麼你的代碼有檢查,包括270和360?這不是[-180,+180]。 「靜態」整數?整數是好的,但我不明白「靜態」。 – duffymo 2010-02-07 15:54:08