我正在使用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; }
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; }
我正在通过键盘功能调用它.......
stop2=1;
if(!stop2)
{
shoulder = (shoulder - 5);
glutPostRedisplay();
glutTimerFunc(100,myTimerFunc,2);
break;
}
答案 0 :(得分:1)
在我看来,你对如何处理角度感到困惑。您是使用[0,360]刻度表示整圆还是[-180,+ 180]?我在你的代码中看到对270的检查,但你的散文提到-90。是的,它们是“相同的”,但如果它不起作用,也许你的代码中会出现一些混乱。
如果您使用[-180,+ 180],零度作为机器人手臂的中立位置,也许您可以利用对称性并使用绝对值功能。你只需要这样编码就可以了。如果[0,+ 90]成功,它也适用于[-90,0]。
在我看来,你并没有利用面向对象的思维。该方法在同一方法中具有运动和定时以及图形刷新。编写较小的方法并对每个方法进行单元测试以确保其有效是一种更好的方法。它被称为“分解”。你说“这是一个很大的方法”的那一刻,它告诉我,它可能太大了,需要重构。