我使用分析器查看了一些运行速度不够快的代码。发现下面这个函数占用了大部分时间,而这个函数中一半的时间都花在了floor
. 现在,有两种可能性:优化这个函数或者上一层,减少对这个函数的调用。我想知道第一个是否可行。
int Sph::gridIndex (Vector3 position) const {
int mx = ((int)floor(position.x / _gridIntervalSize) % _gridSize);
int my = ((int)floor(position.y / _gridIntervalSize) % _gridSize);
int mz = ((int)floor(position.z / _gridIntervalSize) % _gridSize);
if (mx < 0) {
mx += _gridSize;
}
if (my < 0) {
my += _gridSize;
}
if (mz < 0) {
mz += _gridSize;
}
int x = mx * _gridSize * _gridSize;
int y = my * _gridSize;
int z = mz * 1;
return x + y + z;
}
Vector3
只是一些简单的类,它存储三个浮点数并提供一些重载运算符。_gridSize
是类型int
并且_gridIntervalSize
是float
. 有 _gridSize ^ 3 个桶。
该函数的目的是提供哈希表支持。每个 3d 点都映射到一个索引,位于大小为 _gridIntervalSize ^ 3 的相同体素中的点应该落在同一个桶中。