View Single Post
Old 01-30-2011, 01:19 PM   #5
Ten
Главнокомандующийp2ambassador
 
Ten's Avatar
 
Faction:
Стражи Садов Кадеша

Join Date: Feb 2004
Location: Great Nebula
Posts: 2,514
Re: Размеры кораблей

Хм... Копнул маленько исходники игры, и в файле 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-моделировании, вполне можешь рассказать, как в той же Майке или Максе обвести модель прямоугольным параллелепипедом и измерить его длину, ширину и высоту Или хотя бы как узнать координаты угловых точек, разница между которыми и даст искомые размеры.
Ten is offline   Reply With Quote