我已经知道你们中没有人能够复制这个bug,但我甚至不知道该怎么办。这是代码:
void Arrow2D(double x, double y, double x2, double y2, double width) {
double deltaX = x2 - x;
double deltaY = y2 - y;
double angle = atan2(deltaY, deltaX) * 180 / 3.14;
double heightArrow = sqrt(deltaX*deltaX + deltaY*deltaY);
printf("height = sqrt(%f) = %f\n", deltaX*deltaX + deltaY*deltaY, heightArrow);
/*glPushMatrix(GL_MODELVIEW);
glRotatef(angle, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
//glTranslatef(200, 200, 0);
glBegin(GL_QUADS);
glVertex2f(-width/2, 20);
glVertex2f(-width/2, 0);
glVertex2f(width/2, 0);
glVertex2f(width/2, 20);
glEnd();
glBegin(GL_TRIANGLES);
glVertex2f(-width/1.2, 20);
glVertex2f(+width/1.2, 20);
glVertex2f(0, 30);
glEnd();
glPopMatrix(GL_MODELVIEW);*/
}
现在,如果第二部分被注释,变量heightArrow
的值将被正确打印。如果我取消注释注释代码,我只需获得以下打印:
height = sqrt(5000.000000) = 0.000000
基本上我总是得到0作为输出(这与我用来计算角度的atan2函数的行为相同)。在我的一个可视化函数中调用Arrow2D
方法,该函数在GLUT display
方法中调用。