UoKit.com Форумы > Ultima Online : Dev > Sphere Server > Sphere Server TUS - 0.51
Страницы: 1, 2
SusaniN
Стало вот интересно, как узнать дистанцию до нужных координат или точки, если она где-нибудь далеко, например в Веспере, а ты в Брите? Чтобы выдавало ближе ты к нужной точке или дальше. Можт сравнивать координаты? Если да то как?
Вверх
Destruction
А что мешает?

Квадрат гипотенузы равен сумме квадратов катетов.

Пусть твоя позиция x1:y1, а позиция нужной точки x2:y2.

Построим прямоугольный треугольник с точками x1:y1, x2:y2, x1:y2. Посчитаем гипотенузу. Профит.
Вверх
SusaniN
Цитата(Destruction @ 29.12.2014, 17:04)

А что мешает?

Квадрат гипотенузы равен сумме квадратов катетов.

Пусть твоя позиция x1:y1, а позиция нужной точки x2:y2.

Построим прямоугольный треугольник с точками x1:y1, x2:y2, x1:y2. Посчитаем гипотенузу. Профит.


Я не очень понял как сравнивать, давай на примере на любом языке хоть блок схемами, под 51а я адаптирую.
Вверх
Sirocco
в школе уроки геометрии прогуливал?
квадратный корень из |х1 - х2|^2 + |y1 - y2|^2

хорошо хоть мир не сферический... формула расчета длины дуги убила бы тебе мозг.


Кстати я поржу как он будет считать квадратный корень. дайте блок-схему

PS. пользователи 0.51 сферы рулят!
Вверх
pelican
В УО не евклидова геометрия. Никакие квадраты высчитывать не надо.

Просто высчитываешь 2 числа : |х1 - х2| и |y1 - y2| - наибольшее число это и будет твоя дистанция до координаты.
Вверх
Wap
Цитата(pelican @ 29.12.2014, 23:49)

В УО не евклидова геометрия. Никакие квадраты высчитывать не надо.

Просто высчитываешь 2 числа : |х1 - х2| и |y1 - y2| - наибольшее число это и будет твоя дистанция до координаты.
Вообще-то в Сфере как раз-таки по теореме Пифагора дистанция рассчитывается. С округлением до целого числа.
Я правда про 56 говорю, с 51 дел не имел.
Вверх
RL_ka
Цитата(pelican @ 29.12.2014, 22:49)

В УО не евклидова геометрия. Никакие квадраты высчитывать не надо.

Просто высчитываешь 2 числа : |х1 - х2| и |y1 - y2| - наибольшее число это и будет твоя дистанция до координаты.


Тоесть как это?
А если расстояние нужно считать не по прямой а по диагонали? Твоими цифрами можно посчитать лишь разницу по одной из осей координат, а не расстояние между точками.
Вверх
pelican
Цитата(RL_ka @ 30.12.2014, 3:32)

Тоесть как это?
А если расстояние нужно считать не по прямой а по диагонали? Твоими цифрами можно посчитать лишь разницу по одной из осей координат, а не расстояние между точками.

Геометрия мира УО отличается от нашего мира, в котором мы живём. Там другие законы.
В мире УО расстояние по прямой равняется расстоянию по диагонали. УО карта состоит из квадратов, по которым перемещаются персонажи.


Перемещения в УО дискретны и чар не может находится между квадратами. Чар переходит на соседний квадрат по прямой или по горизонтали - в обоих случаях ровно за один за один шаг.
Посмотри на картинку.
Там 2 пути - красный(прямой от точки к точке) и зеленый (по диагонали). От START к END
Так вот, в УО чар совершает красный и зеленый путь ЗА ОДНО И ТО ЖЕ КОЛИЧЕСТВО ШАГОВ и ЗА ОДНО И ТО ЖЕ ВРЕМЯ!
Из этого следует, что в УО длина красной и зеленой линии равны.
Поэтому теорема Пифагора в УО неуместна и дистанцию стоит находить как наибольшую разницу координат.
Нажмите для просмотра прикрепленного файла
Вверх
Sirocco
Код

int CPointBase::GetDist( const CPointBase & pt ) const // Distance between points
{
    // Get the basic 2d distance.
    if ( ! IsSameMapPlane( pt.m_mapplane ))    // as far apart as possible
        return( SHRT_MAX );
    return( GetDistBase( pt ));
}

    int GetDistBase( const CPointBase & pt ) const // Distance between points
    {
        // Do not consider z or m_mapplane.
        int dx = abs(m_x-pt.m_x);
        int dy = abs(m_y-pt.m_y);
        return( max( dx, dy ));
        // Return the real distance return((int) sqrt(dx*dx+dy*dy+dz*dz));
    }




Вот просто код из исходников. я его оставлю тут.
Вверх
Wap
Цитата(pelican @ 30.12.2014, 2:21)
Так вот, в УО чар совершает красный и зеленый путь ЗА ОДНО И ТО ЖЕ КОЛИЧЕСТВО ШАГОВ и ЗА ОДНО И ТО ЖЕ ВРЕМЯ!
Нажмите для просмотра прикрепленного файла
А вот и неправда, каждый разворот требует время шага.
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.