MailRuChamps / raic-2018

Russian AI Cup — artificial intelligence programming contest. Official website: http://russianaicup.ru

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Опечатка в документации? Или Баг в физическом движке!

tonykozlovsky opened this issue · comments

Неправильный рассчёт столкновения роботов при расширении.

Опытным путём в локал раннере проверить возможную ошибку не удалось, из-за сложности воспроизведения.
let delta_velocity = dot(b.velocity - a.velocity, normal) + b.radius_change_speed - a.radius_change_speed
Надо заменить на
let delta_velocity = dot(b.velocity - a.velocity, normal) - b.radius_change_speed - a.radius_change_speed
Потому что в случае, когда 2 робота одновременно "расширяются", вместо того, чтобы оттолкнуться с большей силой, они компенсируют расширение друг друга и вовсе не отталкиваются

может так и задумано... если один толкает то второй отлетает, если толкают оба то гасят свои силы

Кажется, ошибка воспроизводится с клавиатуры. Если подойти вплотную к стоящему игроку и прыгнуть, то иногда робот отпрыгивает в сторону (робот a), а иногда вертикально вверх (робот b).

Суть в том, что оба, находясь очень близко, должны прыгнуть одновременно, и чтобы b.radius_change_speed было равно a.radius_change_speed, по этому я пока не понял, как ты предлагаешь воспроизвести

Я более простой случай рассматриваю. Если расширяется только один робот. Так вот в случае если этот робот по воле случая окажется роботом a, то слолкновение произойдёт, а если b, то нет.

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

А если это воспроизводится в локал раннере, то это не опечатка

Вы правы, это был баг (не только в документации). Обновлены правила/ЛР