我在使用 C++ 时遇到了一个奇怪的问题。在 OpenGL 代码中,我尝试用这种方式计算一个简单的表达式
void mouse(int button, int state, int x, int y){
double posx = (x-300)/300;
double posy = -1*(y-300)/300;
switch(button){
case GLUT_LEFT_BUTTON:
if(state == GLUT_DOWN){
if(count < max){
particles[count].x = posx;
particles[count].y = posy;
particles[count].active = true;
count++;
}
glutPostRedisplay();
}
break;
default:
break;
}
}
但由于某种原因,每个粒子都出现在屏幕中央。奇怪的是当我更换时double posx = (x-300)/300
with
double posx;
posx = x-300;
posx = posx/300;
(y 也一样)代码有效...有人知道为什么会发生吗?也许这是一件非常简单的事情,我做错了。我已经很久没有使用 C++ 了,如果这是我的一个简单错误,我很抱歉。
x
is an int
, 300
is an int
, 也。因此,计算将使用整数算术完成,即忽略余数。这就是为什么分裂会回归0
当你期望介于两者之间的东西时0.0
and 1.0
. 对于计算结果,将结果保存到哪种类型的变量并不重要。
在第二个示例中,您分配x-300
to double posx
。因此,从现在开始,您将进行浮点运算以得到预期的结果。
另一种让它发挥作用的方法是替换300
by 300.0
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)