【发布时间】:2015-09-15 02:03:29
【问题描述】:
我有一个 C++ 光线投射器,它将数百万个点插入到 (-1,-1,-1) 到 (1,1,1) 的范围内。为了避免在顶点缓冲区中插入重复点,我想检查某个范围是否已经包含一个点。
这就是我设置网格的方式:
const int size = 500 * 500 * 500;
bool *grid = new bool[size];
for(int i = 0; i < size; i++)
grid[i] = false;
unsigned double divide = 2.0 / size;
现在我想检查要添加的交点:
// In my code i handle negative and positive cases
int x = intersection.X / divide;
int y = intersection.Y / divide;
int z = intersection.Z / divide;
if(!grid[x * y *z])
//insert
else
//discard
我面临的问题是divide总是0,因为size太大了。但我不知道如何解决这个问题。我已经在使用 unsigned double 了。
【问题讨论】:
-
不存在无符号双精度数。我不确定它是如何编译的。你也在混合类型。 2.0 / size,其中 size 是一个 int。我认为除法是无符号的。在这种情况下,如果 size > 2(四舍五入),则除法将为零。
-
你能解释一下
divide的用途吗?默认情况下,grid分配有false,因此不需要for循环。 -
把它改成
multiply = size / 2.0; int x = intersection.X * multipliy;或者干脆intersection.X * size / 2
标签: c++ arrays floating-point-precision