distance
Here is an ACS representation of a function similar to VectorLength.
function int fdistance (int tid1, int tid2)
{
int len;
int y = getactory(tid1) - getactory(tid2);
int x = getactorx(tid1) - getactorx(tid2);
int z = getactorz(tid1) - getactorz(tid2);
int ang = vectorangle(x,y);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
else len = fixeddiv(x, cos(ang));
ang = vectorangle(len, z);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
else len = fixeddiv(len, cos(ang));
return len;
}
The above function works by rotating the points so they align with an axis. It runs in a constant time and is almost always faster than the more recognizable pythagorean version below:
function int distance (int tid1, int tid2)
{
int x, y, z, d;
x = GetActorX(tid1) - GetActorX(tid2) >> 16; // Convert fixed point to integer
y = GetActorY(tid1) - GetActorY(tid2) >> 16;
z = GetActorZ(tid1) - GetActorZ(tid2) >> 16;
d = sqrt( x*x + y*y + z*z );
return d;
}
This article is issued from Zdoom. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.