3d:
float findDistance(point &x, point &y)
{
float distance, tempx, tempy, tempz;
tempx = (x.x - y.x);
tempx = tempx * tempx; //compiler _might_ be able to make this faster
tempy = (x.y - y.y);
tempy = tempy * tempy;
tempz = (x.z - y.z);
tempz = tempz * tempz;
distance = tempx + tempy + tempz;
distance = sqrt(distance);
return distance;
}
Кроме замены pos(x,2)
на x*x
, это не может быть оптимизировано и остается универсальным / точным, но если вам не нужен универсальный, это может быть быстрее:
bool distanceLessThan(point &x, point &y, float distance)
{
float tempx, tempy, tempz, tempd;
tempx = std::abs(x.x - y.x);
tempy = std::abs(x.y - y.y);
tempz = std::abs(x.z - y.z);
if (tempx + tempy + tempz < distance) //for small distances, don't square
return true;
if (tempx + tempy + tempz > distance/2) //for large distances, don't square
return false;
tempx = tempx * tempx;
tempy = tempy * tempy;
tempz = tempz * tempz;
tempd = distance * distance;
if (tempx + tempy + tempz < tempd)
return true;
return false;
}