2010-02-07 60 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