具有过剩振荡的轨道视角的函数代替

时间:2015-01-30 19:48:47

标签: c++ glut

多年后我又回到了c ++编程,无论如何在大学只有几个模块我的经验..所以请耐心等待。

我尝试使用以下功能围绕中心运行观察点:

void Orbit(Mundo* m)
{
    float d = sqrt((m->camposx * m->camposx) + (m->camposz * m->camposz));
    float theta = ((atan2(m->camposx, m->camposz)) * 180) / PI;
    theta += 1;
    float thetarad = theta * 3.14159 / 180;
    m->camposx = d*cos(thetarad);
    m->camposz = d*sin(thetarad);
}

但不是那样,原始点和第一个增量之间的振荡。那个操作系统应该移动,但后来又回来了。

我很确定我在使用该函数时遇到了一些错误,但我在此处粘贴代码的相关位以防万一。

以前我已声明:

struct Mundo
{
    float camposx;
    float camposy;
    float camposz;
};

和instanced:

Mundo mundo = {50, 50, 50};

并回忆:

void OnDraw(void){

.....
gluLookAt ( mundo.camposx, mundo.camposy, mundo.camposz,  // posicion del ojo   
        0.0, 0, 0.0,      // hacia que punto mira  (0,0,0)    
        0.0, 1.0, 0.0);
.....
}

void OnTimer(int value) 
{ 
.....
Orbit(&mundo);
.....
}

我知道我还没有上课,我正在学习本教程,这是最初的课程之一。下一章将介绍Clases。此外,有些条款可以更直接地进行,但我现在只是把事情弄清楚了。

任何帮助非常感谢。谢谢!

PS:我试过调试但是当涉及到以下几行时它会停止并询问.dll文件的某个位置而不知道该怎么办..

void OnTimer(int value) 
{ 
....
    glutTimerFunc(1000,OnTimer,0);  
    glutPostRedisplay(); 
....
}

1 个答案:

答案 0 :(得分:0)

当我切换atan2的参数时,它不会振荡。所以你的数学有点错误。

如果P =(x = 10,y = 1),则在XY平面上,角度应为几度。你的atan2(x,y)给出了arctan(10)= 84deg。 atan2(y,x)= arctan(1/10)= 5度