У меня есть массив pointclouds (кластер точек, которые, как было определено, находятся в их собственной области).Объединение ближайших выпуклых полигонов
Цель состоит в том, чтобы объединить эти отдельные кластеры, которые являются либо
я. Пересечение
ii. В пределах некоторого минимального расстояния от eachother
Проверка ii затрудняет это. Чтобы быстро справиться с этим pointcloud, я создаю AABB (выровненные по оси рамки, которые выравниваются вдоль оси X).
Мой текущий метод использовать некоторые свойства разделительного оси теоремы:
- Создать AABB для каждого PointCloud
- Для каждого AABB, проверьте, если они накладываются друг на друга, проецируя их на случайной оси, а затем сортируя эти линейные проекции, где они попадают на эту строку o (nlog (n)). Затем я просматриваю этот список, чтобы проверить пересечения O (N) с помощью SAT. Большинство линейных проекций AABB не перекрываются и, следовательно, не пересекаются, и те, которые я могу проверить вручную (потому что отсутствие перекрытия в 1D не гарантирует пересечения, но обратное неверно).
Последняя часть, где я застреваю. Вышеупомянутая 1D-проекция была выполнена для того, чтобы избежать взаимных проверок O (n^2) для пересечений. Но для того, чтобы объединить выпуклые многоугольники, которые находятся в пределах определенного порога, но НЕ пересекаются, я не вижу пути по локальной проверке (N^2).
Есть ли способ построить какое-либо дерево или граф, чтобы объединить все выпуклые многоугольники, находящиеся на некотором расстоянии друг от друга, без проверки каждой попарной комбинации?
Если вы используете мои шаги от 1 & 2, вы можете предположить, что оставшиеся pointclouds/AABB НЕ пересекаются.
EDIT
Потенциальное решение было бы добавить threshold/2
к AABB
ширине и высоте, а также проверить наличие пересечений. Если они пересекаются, то я могу проверить как фактические пересечения (что быстро для AABB), так и минимальное расстояние между ними.
Можете ли вы рассказать мне об определении AABB? – Mai
Осевая выровненная ограничительная рамка (закреплена вдоль оси X). https://studiofreya.com/3d-math-and-physics/simple-aabb-vs-aabb-collision-detection/ – DaynaJuliana
Я думаю, что ваш вопрос звучит слишком причудливо, что также подразумевает запутанность. В основном вы проверяете, находятся ли обычные ящики слишком близко друг к другу, но вы не определили ящики как отдельные точки в кластере (pointcloud вы сказали) или центр кластера с его радиусом, являющимся порогом в вашем вопросе. Можете ли вы прояснить описание своей проблемы? Хорошая работа AABB: D – Mai