Есть. С помощью простого алгоритма можно определить, существует ли такой прямоугольник. Но мне нужно время, чтобы облечь в словесную форму.
-- Чт май 28, 2015 00:17:32 --Вам известны координаты
всех точек. Берём заданную точку (на рисунке красная) и проводим векторы от неё ко всем остальным точкам. У каждого вектора есть направление (угол, который вектор составляет с осью
, отсчитывая против часовой стрелки). Сортируем направления по возрастанию угла. У нас получается список, который мы считаем кольцевым (считаем, что после последнего вектора в списке идёт первый, и эти два вектора тоже соседние). Находим углы между всеми соседними векторами. Задаёмся вопросом: есть ли такие два соседних вектора в списке, между которыми угол
? Если нет, нужного прямоугольника не существует. На рисунке как раз изображен случай, когда такого угла нет.
Если да, повторяем ту же процедуру для второй заданной точки. Смотрим, есть ли для неё такие два соседних направления, угол между которыми
? Если нет, нужного прямоугольника не существует.
Если в обоих случаях ответ «да», остался простой тест... но сначала скажите, всё ли понятно выше?