opengl c ++中的180到-180运动?
Posted
技术标签:
【中文标题】opengl c ++中的180到-180运动?【英文标题】:180 to -180 motion in opengl c++? 【发布时间】:2010-02-07 15:21:06 【问题描述】:我正在使用 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】:在我看来,您对如何处理角度感到困惑。您是使用 [0, 360] 刻度来表示整个圆圈还是 [-180, +180]?我在您的代码中看到了对 270 的检查,但您的散文提到了 -90。是的,它们是“相同的”,但如果它不起作用,您的代码可能会出现一些混乱。
如果您要使用 [-180, +180],将零度作为机械臂的中性位置,也许您可以利用对称性并使用绝对值函数。你只需要以这种方式编码一次。如果对 [0, +90] 成功,它也对 [-90, 0] 有效。
在我看来,您也没有利用面向对象的思维。这种方法在同一方法中具有运动和定时以及图形刷新。编写更小的方法并对每个方法进行单元测试以确保它有效是一种更好的方法。这叫做“分解”。当你说“这是一个大方法”的那一刻,它在向我暗示它可能太大了,需要重构。
【讨论】:
是的,我有一个圆形底座,它可以移动 360 度,我想要 180 t0 -180 运动,我已经声明了一个关心角度的整数变量。除了表示角度的静态整数之外,还有更好的选择吗? 那么为什么你的代码有包括270和360的检查呢?那不是 [-180, +180]。 “静态”整数?整数很好,但我不懂“静态”。以上是关于opengl c ++中的180到-180运动?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 c++/opengl 中的对象移动到新位置并擦除旧对象