Я учусь в старшей школе и недавно ходил на соревнования по кодированию, и у меня возникла проблема, которую я понятия не имел, как решить:
Учитывая лабиринт, заключенный в область 100x100, определите, есть ли круг с заданным радиусом может пройти через лабиринт с учетом расположения всех стен. Стены будут определены как линии, соединяющие две точки в пространстве, и вам будут даны начальная и конечная точки круга. Круг должен начинаться с его центра в начальной точке и касаться конечной точки, чтобы он успешно прошел через лабиринт. Там будет максимум 20 стен. Радиус круга и расположение стенок могут быть «произвольно» точными. («произвольно» для этого случая означает просто в дальних пределах - скажем, максимум до 10 цифр после десятичной дроби).
Вот пример. Если бы это был ввод:
Radius = 2.8
Start = (5,5), Destination = (95,95)
Walls (a wall connects each pair of points):
(20,0) to (27.5,22.6)
(27.5,22.6) to (55.1,35.5)
(55.1,35.5) to (80.3,80,4)
(80.3,80,4) to (95,63.9)
(1.7,25.8) to (17.5,53.2)
(17.5,53.2) to (56.4,69)
(56.4,69) to (67.9,90.6)
(85.6,98.94512) to (87.3,92.5)
, то это (сделано на десмосе) - это то, на что был бы похож лабиринт (синий круг просто показывает, насколько большой круг):
Я бы знал, как решить проблему, если бы она была в квантованной сетке, но точное расположение стен и радиус окружности могут быть сколь угодно точными. Я думал об использовании «правила правой руки», чтобы найти путь, но я не знаю, как реализовать его в не квантованном пространстве (и при этом я не очень хорошо знаком с методом).
Как бы я go о решении этого? Может ли кто-нибудь указать мне алгоритм, ссылку, какой-нибудь псевдокод или просто интуицию, которая поможет мне понять, как я могу решить эту проблему? Любая помощь приветствуется. Спасибо!