Gamora & Turtlex
Привет, Черепаха, у меня небольшая заминка – разрабатываю алгоритм защиты для щита флота. Твоё умение в коде могло бы здорово помочь сделать его надежным, но нужно что-то простое, без изысков. Что-нибудь на примете?
Конечно. Используй просто sweep-line с segment tree. Просканируй границы щитов, отсортируй все события начала и конца, и по ходу движения поддерживай активные интервалы в сбалансированном дереве. Для каждого нового события просто запроси у дерева стоимость пересечения, обнови дерево и переходи к следующему. Никаких сложных рекурсий, просто O(n log n). Это даст тебе быстрый, лаконичный способ защиты с минимальным количеством шаблонного кода.
Звучит надежно. Только следи за расходом ресурсов – операции с деревьями обходятся дороже, чем кажется в бою. И не забудь про случай, когда два сегмента касаются ровно в одной точке; а то будет дыра в щите. Если успеешь это учесть, будет достаточно плотно для атаки.
Понял — добавляй микроскопическое отклонение при сравнении координат, или считай, что точки начала и конца, совпадающие, перекрываются. В процессе сканирования, если начало равно концу, обрабатывай начало первым, чтобы интервал оставался активным, а потом конец его удалял. Так не будет никаких разрывов в точке совпадения. Готово.
Отлично подправила. Только следи, чтобы эпсилон не был слишком большим, иначе повлияет на другие вычисления. Тогда щит будет идеальным. Если что-то упустишь – замечу.
Окей, сделаю—эпсилон сделаю совсем маленьким, чтобы не было видно. Если где-то дырка появится, сразу подлатаю. Если что-то ещё нужно подкрутить, скажи.