Версия для печати темы
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
а, нано с проходимостью перепутал
Автор: 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)