Хм... Копнул маленько исходники игры, и в файле
src\Game\pieplate.c нашёл весьма интересный кусок кода:
Код на C:
real32 pieDistance = 0;
...
void pieDistanceReadoutDraw(vector *movepoint, vector *origin, color c)
{
real32 dist_x, dist_y, dist_z;
udword distance;
...
char dist_str[20],ru_str[20];
dist_x = movepoint->x - origin->x;
dist_y = movepoint->y - origin->y;
dist_z = movepoint->z - origin->z;
...
dist_x *= dist_x;
dist_y *= dist_y;
dist_z *= dist_z;
//find la distance (using that wonderful formula by Pythagoras)
pieDistance = fsqrt(dist_x + dist_y + dist_z);
distance = (udword)pieDistance;
...
//depending on the distance, scale the readout
if (distance < 100)
{
sprintf(dist_str, "%i m", distance);
}
else if ((distance >= 100) && (distance < 10000))
{
distance /= 100;
distance *= 100;
sprintf(dist_str, "%i m", distance);
}
else if (distance >= 10000)
{
distance /= 1000;
sprintf(dist_str, "%i km", distance);
}
Итак:
расстояние =
sqrt((
x2-
x1)
2 + (
y2-
y1)
2 + (
z2-
z1)
2)
sqrt – квадратный корень, расстояние округляется до целого. Классическая формула из учебника геометрии (см. комментарии
). Получается, что создатели ХВ1, не мудрствуя лукаво, приняли единицу координатной оси за 1 метр.
Андрюха, ты, как сведущий в 3D-моделировании, вполне можешь рассказать, как в той же Майке или Максе обвести модель прямоугольным параллелепипедом и измерить его длину, ширину и высоту
Или хотя бы как узнать координаты угловых точек, разница между которыми и даст искомые размеры.