Последние 3 недели я только и делаю в свободное время, что думаю над этой задачей.
Прогресс чудовищно медленный.
Еле-еле разобрал случай, когда озеро — (бесконечный) угол, меньший развёрнутого. Для конечных озёр, являющихся выпуклыми многоугольниками, это даёт локально оптимальную стратегию, когда Утка находится относительно близко от одной стороны или от одной вершины угла (относительно далеко от других вершин). Как отсюда синтезировать локально оптимальный алгоритм (не говоря уже о глобально оптимальном) для всего многоугольного озера — совершенно непонятно. Но квадрат, кажется, удалось добить (хотя строгого доказательства у меня нет, я пока что не надеюсь его получить даже для угла).
Если интересно, я могу выложить решение для угла. Но пока напишу только про квадрат. Итак, критическая скорость Лисы
Да, на предыдущем допросе я называл другое число: 5.786... Это не ошибка округления. Это решение другого уравнения, которое в радикалах у меня не выразилось. Прошлые выкладки я потерял, поэтому не знаю, то ли там была ошибка при преобразованиях выражений, то ли я вообще изначально опирался на не совсем правильные посылки.
Угол на рисунке
. В вычислениях часто встречается его котангенс
, это число где-то в теме уже упоминалось. Углы
откладываются от диагоналей квадрата во все стороны (на рисунке эти лучи изображены зелёным цветом), точки их пересечения образуют красный квадрат, который и является
фигурой принятия решения (сокращённо
ФПР). На первом этапе Утка старается достичь её границы так, чтобы лиса была "ровно с противоположной стороны" (где именно — поясню ниже), а на втором этапе Утка плывёт только по прямой, а Лиса — с максимальной скоростью только в одну сторону (отклонение от этой стратегии даёт выигрыш сопернику).
1 этап.
Утка плывёт к границе
ФПР так, чтобы к моменту её достижения Лиса была в
противоположной ей точке
, которая строится так: через
параллельно ближайшей диагонали проводится прямая, которая перекает ближайший зелёный луч в точке
; далее
проецируется на ближайшую сторону озера, получая
; наконец,
отражается относительно центра, получая
. Можно считать, что вместо Лисы
Утка соревнуется с её
отражением по данной схеме, которое
бегает по границе ФПР, причём Утка стремится не убежать от него, а, наоборот, попасть точно в отражение.
"Это всё, конечно, хитро придумано", — скажете вы с сарказмом, — "но как быть со скоростью этого вашего отражения? Ну-ка, посчитайте-ка её, она окажется гораздо больше единицы! Как же бедная Утка при таком раскладе сможет догнать отражение Лисы?".
Действительно, максимальная скорость отражения легко считается:
. Кого я хотел обмануть?
Всё дело в том, что я, как уже писал, на углах собаку съел. И владею тайным знанием: если половина угла, в который плывёт Утка, меньше "угла скорости" (а в нашем случае это так:
), то, оказывается, Утка может поймать отражение! Правда, это верно для бесконечного угла. Но в данном случае легко показать, что Утка загоняет отражение в угол (или догоняет его раньше): сначала она просто наглым образом плывёт по направлению к отражению. Рано или поздно проекция Утки на ось абсцисс или на ось ординат совпадёт с проекцией на ту же ось отражения. После того, как Утка "схватила" эту проекцию, она продолжает её "держать", на это скорости хватает с запасом. Избыток скорости используется для неограниченного приближения к жертве по другой оси. Отражение либо выбегает из угла, и Утка ловит его на границе, либо остаётся в вершине, где Утка бесконечно к ней приближается.
2 этап.
Попав в
противоположную Лисе точку ФПР, Утка продолжает следить за тем, с какой стороны Лиса будет находится от противоположной ей точки. Если Лиса уходит вправо (против часовой стрелки), Утка плывёт по направлению
. Если Лиса уходит от противоположной точки по часовой стрелке, Утка плывёт по направлению
. Пока Утка находится внутри "малого" треугольника (с зелёными бёдрами и красным основанием),
противоположность определяется по тому же алгоритму: через позицию Утки параллельно диагонали проводится прямая до пересечения с зелёным лучом, затем получившаяся точка проецируется на ближайшую сторону квадрата, и наконец, отражается относительно начала координат. Однако как только Утка выплывает за пределы "малого" треугольника и попадает в "большой" (с зелёными бёдрами и чёрным основанием, являющимся границей озера), стратегия меняется.
Противоположная точка здесь определяется по-другому: зелёный луч не используется, текущая позиция Утки сразу проецируется на ближайшую границу и затем отражается относительно начала координат. Кроме того, в "большом" треугольнике меняется направление Утки, когда Лиса находится по часовой стрелке от
противоположной точки: в этом случае Утка плывёт не в направлении
, а в направлении ближайшей стороны, только угол откладывается в другую сторону (параллельно
, хотя изнутри "малого" треугольника Утка никогда не должна плыть в направлении
, только
или
, направление на
разрешается после выхода в "большой" треугольник). Впрочем, это описание стратегии Утки "на все случаи жизни", в случае же, когда Лиса двигается оптимально, Утка сохраняет исходное направление движения, выбранное после выхода за пределы ФПР. Во всех случаях любая исходная точка
на ФПР гарантирует одинаковое расстояние от Утки до Лисы к моменту достижения Уткой берега (нулевое, если
равно критическому значению).
Есть небольшая вероятность того, что критическое значение
можно увеличить. На эту мысль наталкивает то обстоятельство, что на первом этапе у Утки есть существенный запас скорости. Если его попытаться уменьшить, то ситуация усложняется. ФПР превращается из квадрата в восьмиугольник: уголки срезаются параллельно осям координат. На этих новых маленьких сторонах скорость отражения значительно больше (равна исходной скорости Лисы
), вследствие чего точно "поймать" отражение Утка не сможет: на срезанных углах отражение сможет оторваться. Но насколько? Я подозреваю, что увеличение будет настолько большим, что уменьшение расстояния до границы озера на втором этапе не сможет это компенсировать. Рассчитать точно пока не умею.