代码之家  ›  专栏  ›  技术社区  ›  Abhilash Muthuraj

OpenGL C++中180到180的运动?

  •  0
  • Abhilash Muthuraj  · 技术社区  · 15 年前

    我用一个GLUTTIMERfunc(…)来实现机器人手臂的运动,我的问题是左侧0度到90度很容易完成,

    当我尝试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;
        }
    

    case 2: if(shoulder>=360)

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

    // here robot arm is not stopping...........

    if(shoulder<=270)
            stop2 = 0;
            stop3 = 1;
    
    
    
        if(!stop3)
    
        {
    
            shoulder = (shoulder + 5);
    
            glutPostRedisplay();
    
            glutTimerFunc(100,myTimerFunc,2);
    
            break;
    
        }
    

    default: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 回复  |  直到 15 年前
        1
  •  1
  •   duffymo    15 年前

    在我看来你对如何处理角度很困惑。你是用[0,360]的比例来画一个完整的圆还是用[-180,+180]?我在你的代码中看到一个对270的检查,但是你的散文提到-90。是的,它们是“相同的”,但是如果它不起作用,也许您的代码中已经出现了一些混乱。

    如果你使用的是[-180,+180],用零度作为机器人手臂的中立位置,也许你可以利用对称性并使用绝对值函数。你只需要用这种方式编码一次。如果它在[0,+90]上成功的话,它也可以在[-90,0]上工作。

    在我看来,你没有利用面向对象的思想。此方法具有相同的运动和计时以及图形刷新方法。编写较小的方法,并对每个方法进行单元测试,以确保其有效,这是一种更好的方法。这叫做“分解”。当你说“这是一个大方法”的时候,它向我暗示它可能太大了,需要重构。