函数以过度振荡的轨道视角代替
Function to orbit point of view with glut oscilates instead
多年后,我又回到了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;
};
并实例化:
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);
.....
}
我知道我还没有使用课程,我正在学习教程,这是第一课之一。下一章将介绍克拉塞斯。此外,还有一些分类可以更直接地完成,但我现在只是把事情说清楚。
任何帮助非常感谢。谢谢!
PS:我尝试调试,但是当涉及到以下行时,它会停止并询问.dll文件的某些位置,但不确定该怎么办。
void OnTimer(int value)
{
....
glutTimerFunc(1000,OnTimer,0);
glutPostRedisplay();
....
}
当我切换 atan2 的参数时,它不会振荡。所以你的数学有点错误。
在XY平面上,如果P=(x=10,y=1),则角度应该是几度。您的 atan2(x,y) 给出 arctan(10)= 84 度。 atan2(y,x) = arctan(1/10) = 5 度。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 函数以过度振荡的轨道视角代替