Я ищу алгоритм, который может быстро (я сильно ограничен производительностью) найти точку внутри круга, где эта точка находится за пределами всех прямоугольников в (эти прямоугольники можно поворачивать). Или, альтернативно, найти круг A с его центром внутри круга B, где круг A не пересекается с множеством отрезков.Поиск точки, которая не находится внутри каких-либо повернутых прямоугольников
Единственное решение, которое я могу придумать, - это просто прокрутить образцы точек, а затем прокрутить прямоугольники для каждого из них. Но поскольку мое пространство непрерывное, это довольно боль. Я в основном удовлетворен только одной точкой, которая не пересекается, но будут случаи, когда таких точек не существует. В последнем случае я бы идеально постарался найти точку с наименьшим количеством пересечений или смог бы найти ответ, который не существует.
Кто-нибудь знает какие-либо алгоритмы, которые могут выполнить это в чем-то меньшем, чем O (n^2)? Все, что могло бы помочь выявить хорошие кандидаты, было бы ужасно.
Типичный пример ситуации: Множество больших прямоугольников с небольшим кружком, в котором я надеюсь найти точку (здесь обозначено синим). Общепринято, что многие из прямоугольников полностью выходят за пределы круга, а также общие, что круг полностью покрыт. Существует только небольшой набор длин и ширины, которые, как правило, используются для прямоугольников.
Можете ли вы предварительно обработать что-нибудь? И вы могли бы показать картину того, как это будет выглядеть? – harold
Добавлена типичная картина для OP. Есть очень мало предварительной обработки, я думаю, что можно сделать, поскольку прямоугольники колеблются все время.Тяжелые вычисления на самом деле не были бы возможны – AnythingElse
Если бы он сжигал слишком много памяти, чтобы просто держать тонкую сетку (или лучше, quadtree), которая записывает, какие ячейки сетки полностью свободны от любого прямоугольника, я бы приблизил круг к aa polygon, и «закрепите» его по всем соседним прямоугольникам (вы можете использовать гораздо более грубую сетку, чтобы найти все прямоугольники, которые нужно скопировать). Если какая-либо область остается после отсечения, вы можете выбрать любую точку в ее внутренней части (обратите внимание, что среднее значение ее вершин * обязательно не обязательно обязательно находится внутри нее, так как обрезанный остаток не гарантированно выпуклый, но это будет хороший выбор, когда он это делает). –