gpt4 book ai didi

c++ - opengl c++ 中的 180 到 -180 运动?

转载 作者:行者123 更新时间:2023-11-28 08:30:47 25 4
gpt4 key购买 nike

我正在使用 glutTimerFunc(...) 来实现机器人 ARM 的运动,我的问题是左侧 0 度到 90 度很容易完成,

当我尝试 0 到 -90 度时, ARM 没有停止?我尝试了各种方法,但都失败了,你能建议更好的选择吗?

这是我的定时器功能,

void myTimerFunc(int var)
{
switch(var)
{
case 1: if(shoulder>=90)
stop=1;<p></p>

<pre><code> 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;
}
</code></pre>

<p>case 2: if(shoulder>=360)</p>

<pre><code> stop2=1;

if(!stop2)

{

shoulder = (shoulder - 5);

glutPostRedisplay();

glutTimerFunc(100,myTimerFunc,2);

break;

}
</code></pre>

<p>// here robot arm is not stopping...........</p>

<pre><code>if(shoulder<=270)
stop2 = 0;
stop3 = 1;



if(!stop3)

{

shoulder = (shoulder + 5);

glutPostRedisplay();

glutTimerFunc(100,myTimerFunc,2);

break;

}
</code></pre>

default:break;
}
}

i'm calling this from keyboard function.......

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],将零度作为机器人 ARM 的中性位置,也许您可​​以利用对称性并使用绝对值函数。你只需要这样编码一次。如果它对 [0, +90] 成功,它也适用于 [-90, 0]。

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

关于c++ - opengl c++ 中的 180 到 -180 运动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com