C++ 简单计算输出 0.0000000000000000 而不是 0.003333

C++ Simple calculation outputting 0.0000000000000000 instead of 0.003333

dx 和 dy 的计算返回 0,我看不出问题所在。控制台似乎显示正在使用所有正确的值。

void drawBackground()
{
    double r, g, b, dx, dy, Wx, Wy, Wz; 
    Ray ray;
    cout << "xmax: " << sceneDescription::imagePlaneXmax << " xmin: " << sceneDescription::imagePlaneXmin << endl;
    cout << "ymax: " << sceneDescription::imagePlaneYmax << " ymin: " << sceneDescription::imagePlaneYmin << endl;
    cout << "Iw: " << sceneDescription::Iw << " Ih: " << sceneDescription::Ih << endl;
    cout << " " << endl;

    dx = (sceneDescription::imagePlaneXmax - (sceneDescription::imagePlaneXmin))/sceneDescription::Iw;
    dy = (sceneDescription::imagePlaneYmax - (sceneDescription::imagePlaneYmin))/sceneDescription::Ih;
    std::cout << "dx: "<< boost::format("%1$.16f") % dx << " dy: "<< boost::format("%1$.16f") % dy << endl;

}

sceneDescription.h

#include <glm/glm.hpp>

using namespace glm;

class sceneDescription{

public:
    static const int imagePlaneXmin = -1;
    static const int imagePlaneXmax = 1;
    static const int imagePlaneYmin = -1;
    static const int imagePlaneYmax = 1;
    static const int Iw = 600;
    static const int Ih = 800;
};

控制台输出:

xmax: 1 xmin: -1

ymax: 1 ymin: -1

Iw: 600 Ih: 800


dx: 0.0000000000000000 dy: 0.0000000000000000

问题是语句:

dx = (sceneDescription::imagePlaneXmax -
(sceneDescription::imagePlaneXmin))/sceneDescription::Iw;

将给出以下结果:

(1-(-1))/600 = 2/600 = 0.00 (since this is integer division). 

您可能希望将数字转换为 double

像这样的东西会起作用:

dx = (double)(sceneDescription::imagePlaneXmax -
(sceneDescription::imagePlaneXmin)) / sceneDescription::Iw;

由于转换运算符的优先级高于除法,分子将由 (double) 转换,分母将隐式转换为 double 结果。

希望对您有所帮助!