Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ Sphere Server TUS - 0.51 _ Дистанция до координат

Автор: SusaniN 29.12.2014, 13:12

Стало вот интересно, как узнать дистанцию до нужных координат или точки, если она где-нибудь далеко, например в Веспере, а ты в Брите? Чтобы выдавало ближе ты к нужной точке или дальше. Можт сравнивать координаты? Если да то как?

Автор: Destruction 29.12.2014, 17:04

А что мешает?

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

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

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

Автор: SusaniN 30.12.2014, 0:03

Цитата(Destruction @ 29.12.2014, 17:04) *

А что мешает?

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

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

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


Я не очень понял как сравнивать, давай на примере на любом языке хоть блок схемами, под 51а я адаптирую.

Автор: Sirocco 30.12.2014, 0:16

в школе уроки геометрии прогуливал?
квадратный корень из |х1 - х2|^2 + |y1 - y2|^2

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


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

PS. пользователи 0.51 сферы рулят!

Автор: pelican 30.12.2014, 0:49

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

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

Автор: Wap 30.12.2014, 2:14

Цитата(pelican @ 29.12.2014, 23:49) *

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

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

Автор: RL_ka 30.12.2014, 2:32

Цитата(pelican @ 29.12.2014, 22:49) *

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

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


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

Автор: pelican 30.12.2014, 3:21

Цитата(RL_ka @ 30.12.2014, 3:32) *

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

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


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

Автор: Sirocco 30.12.2014, 8:28

Код

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 30.12.2014, 17:12

Цитата(pelican @ 30.12.2014, 2:21) *
Так вот, в УО чар совершает красный и зеленый путь ЗА ОДНО И ТО ЖЕ КОЛИЧЕСТВО ШАГОВ и ЗА ОДНО И ТО ЖЕ ВРЕМЯ!
Прикрепленное изображение
А вот и неправда, каждый разворот требует время шага.

Автор: pelican 30.12.2014, 17:56

Цитата(Wap @ 30.12.2014, 18:12) *

А вот и неправда, каждый разворот требует время шага.

+1 поворот ещё, но сути это не меняет.
Окей, перерисовал картинку, где нет разворота. Теперь правда:
Прикрепленное изображение

Автор: SusaniN 31.12.2014, 2:07

Цитата(Sirocco @ 30.12.2014, 0:16) *

в школе уроки геометрии прогуливал?
квадратный корень из |х1 - х2|^2 + |y1 - y2|^2

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

PS. пользователи 0.51 сферы рулят!


Слы умник-геометр, я школу закончил больше 10 лет назад, давай я поржу как ты мне годовой баланс посчитаешь в 1с, или поржу как ты будешь отдуплять латинский язык или поржу как ты дружишь с датами и событиями в истории, я найду с чего поржать над тобой и без пифагоровых штанов и квадратных корней.
Знания геометрии мне в жизни не пригодились, потому и написал, не хотел заморачиваться.

Автор: Mirage 31.12.2014, 8:12

Цитата(pelican @ 30.12.2014, 17:56) *

+1 поворот ещё, но сути это не меняет.
Окей, перерисовал картинку, где нет разворота. Теперь правда:
Прикрепленное изображение

Если не изменяет память то алгоритм движения по диагонали выглядит вот так:
Прикрепленное изображение
При таком раскладе он 3 раза длиньше чем по прямой. Не?
Расстояние до объекта да, по диагонали можно. Но лучший способ как написали в самом начале - пифагоровы штаны.

Автор: Sirocco 31.12.2014, 11:13

Цитата(SusaniN @ 31.12.2014, 2:07) *

Знания геометрии мне в жизни не пригодились, потому и написал, не хотел заморачиваться.


Так ты еще похвастайся сколько ты от груди жмешь, и твое интеллектуальное превосходство будет неоспоримо, я буду повержен.

Вот тебе еще парочка задач. Определить дату через № дней от текущей через юлианов день или unix, осуществить конвертацию градусов минут и секунд в десятичные градусы, вычислить квадратный корень методом ньютона или через натуральный логарифм.
Все это тебе может понадобится, раз уж ты выбрал такую древнюю версию 0.51!



И вот тебе сказка на ночь!
Код

ФРЕДЕРИК БРАУН

ОНО И ВИДНО

Пер. С. Ирбисова

Бросив взгляд на часы, Генри Блоджет схватился за голову. Уже два часа ночи! Он раздраженно захлопнул учебник - все равно ему нипочем не успеть до утра.
Чем больше он зубрил геометрию, тем меньше понимал. Математика вообще плохо давалась ему, а уж геометрия! Ее даже зубрить невозможно.

Если он завтра провалится, его вышвырнут из колледжа; у него и без того уже три хвоста за прошлые семестры. Еще один провал - и его отчислят автоматически.

Тогда конец всему: мечтам, карьере. Но сейчас его могло спасти только чудо.

Вдруг он вскинул голову, даже на стуле подпрыгнул. А почему бы не призвать на помощь тайные силы? Генри издавна интересовался магией и даже собрал небольшую библиотечку.
В этих книгах простым языком объяснялось, как вызывать демонов и как подчинять их своей воле. До сих пор он не решался попробовать, но сейчас стоило рискнуть. Хуже не будет. Все равно без волшебства геометрию не осилить.

Он подошел к полке, достал самую толковую книгу по черной магий, открыл на нужной странице и повторил простые инструкции.

Генри взялся за дело: сдвинул мебель к стенам, мелом нарисовал посреди пола пентаграмму, ступил в нее и произнес заклинание.

Демон явился. Он был куда страшнее, чем предполагал Генри. Собравшись с духом, Блоджет обратился к сути дела.

- Мне никак не дается геометрия...

- Оно и видно! - прогремел демон; в голосе его слышалось торжество.

Полыхая пламенем, он вышел из мелового шестиугольника, который Генри нарисовал вместо пентаграммы.


Автор: Soteric 31.12.2014, 13:31

Цитата(Mirage @ 31.12.2014, 8:12) *
Если не изменяет память то алгоритм движения по диагонали выглядит вот так:

Нет. Движение по диагонали это такое же действие как движение по горизонтали или вертикали.

Автор: Mirage 31.12.2014, 16:21

а, нано с проходимостью перепутал smile.gif

Автор: SusaniN 1.1.2015, 19:10

Цитата(Sirocco @ 31.12.2014, 11:13) *

Так ты еще похвастайся сколько ты от груди жмешь, и твое интеллектуальное превосходство будет неоспоримо, я буду повержен.

Вот тебе еще парочка задач. Определить дату через № дней от текущей через юлианов день или unix, осуществить конвертацию градусов минут и секунд в десятичные градусы, вычислить квадратный корень методом ньютона или через натуральный логарифм.
Все это тебе может понадобится, раз уж ты выбрал такую древнюю версию 0.51!


Я уже давно не занимаюсь ультимой, у меня нет на это времени, но задался таким вопросом, потому что стало интересно, у меня спросили, и я заинтересовался.

Ты похоже совсем неадекват, удачи тебе по жизни, она тебе точно понадобиться =)

Всем спасибо за обсуждение.

Автор: Sirocco 1.1.2015, 19:27

Т.е вас там таких двоечников уже двое...

Цитата

Я не очень понял как сравнивать, давай на примере на любом языке хоть блок схемами, под 51а я адаптирую.


рассказывай дальше, как ты не занимаясь ультимой, будешь что-то там адаптировать с помощью блок-схем.
Ты ври то как-нибудь с оглядкой на то, что писал до этого....

Человек, который оправдывается тем что он окончил школу 10 лет назад, жалок. Это как признаться в том, что ты остановился в развитии...

Автор: SusaniN 2.1.2015, 1:49

Цитата(Sirocco @ 1.1.2015, 19:27) *

Т.е вас там таких двоечников уже двое...
рассказывай дальше, как ты не занимаясь ультимой, будешь что-то там адаптировать с помощью блок-схем.
Ты ври то как-нибудь с оглядкой на то, что писал до этого....

Человек, который оправдывается тем что он окончил школу 10 лет назад, жалок. Это как признаться в том, что ты остановился в развитии...


Да все давай пока "интеллигент" ты погромче кричи о своих интеллектуальных данных, а то ж не признают мало ли, удачного развития, окончания школы, или если уже успел - компьютерного задротства. Мне реального мира хватает, чтобы с такими ценными экземплярами вести беседу.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)