180到-180在opengl C++中的运动?
问题描述:
我使用的是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;
答
看起来像你对我感到困惑如何看待的角度。你是用一个[0,360]的整圈还是[-180,+180]?我在你的代码中看到一个对270的支票,但你的散文中提到了-90。是的,它们是“一样的”,但如果它不起作用,或许你的代码中出现了一些混淆。
如果您打算使用[-180,+180],零度作为您机器人手臂的中性位置,或许您可以利用对称性并使用绝对值函数。你只需要这样编码一次。如果[0,+90]成功,它也可以用于[-90,0]。
在我看来,你并没有利用面向对象的思想。这种方法具有运动和定时以及图形刷新的全部方法。编写更小的方法并进行单元测试,以确保它的工作是更好的方法。这就是所谓的“分解”。当你说“这是一个很大的方法”的时候,它暗示我可能它太大了,需要重构。
是的,我有一个圆形底座,它可以移动360度,我想180 t0 -180的运动,我宣布了一个整数变量,关心角度。除了表示角度的静态整数,还有其他更好的选择吗? – 2010-02-07 15:47:10
那么为什么你的代码有检查,包括270和360?这不是[-180,+180]。 “静态”整数?整数是好的,但我不明白“静态”。 – duffymo 2010-02-07 15:54:08