Определить направление внутрь полости в облаке точек

yurijm123

Положим, в трехмерном пространстве имеется облако точек, для каждой из которых заданы координаты. Точки расположены так, что внутри облака есть выраженная полость, в которой точек нет. При этом для каждой точки определен некий вектор. Как определить, направлен вектор внутрь полости или наружу?

stm8853410

Большая ли полость по сравнению со всем облаком? Если да, то можно двигаться с каким-то шагом по прямой, содержащей этот вектор, и проверять, попадём ли в полость, с помощью функции "расстояние до ближайшей точки из облака" (при заходе в полость увеличивается, при выходе — уменьшается).
Если полость выпуклая, то её можно аппроксимировать выпуклым многогранником, тогда проверку одного вектора можно сделать быстрой.

grg2

Пока есть только облако точек, говорить про полость не имеет смысла. Нужно построить по облаку замкнутую поверхность. Тогда часть пространства, ограниченную поверхностью, можно назвать полостью, и поставленная задача решается просто.
Получаемая поверхность и, соответственно, решение исходной задачи зависит от выбора метода построения поверхности и значений параметров метода.

incwizitor

Как определить, направлен вектор внутрь полости или наружу?
тут тяжело осмыслить, что такое полость. этому надо дать определение с поправкой на задачу и на характер распределения точек
я бы начал с центра масс нашего облака и смотрел, как вектора расположены по отношению к этой точке (можно угол вычислить)
если плотность точек сильно варьируется, то центр масс может вылететь из "полости", тут можно сделать процедуру преобразования нашего облака в тело путем наложения трехмерной сетки и заполнению тех ячеек, где есть точки облака. тут как раз шаг сетки все будет решать. для полученного тела уже снова можно найти центр масс. при удачно выбранном шаге сетки скорее всего центр масс будет в полости.
можно вместо сетки делать раздутие точек, то есть заменить точку на шар с неким радиусом. шары будут пересекаться, у всей системы центр тяжести будет меняться тоже

Niklz

чтобы определить полость, можно перенести начало координат в любую точку внутри полости и напустить на это 1-class SVM с гауссовским ядром, к примеру: http://scikit-learn.org/stable/modules/svm.html#svm-outlier-...
оно должно определить тебе границы полости, потом по ядру можно определить как далеко от полости лежит точка и наверняка как-то можно определить смотрит ли вектор в точке внутрь найденной полости.

BoBochka

Можно вокруг каждой точки облака раздуть шарик с фиксированным маленьким радиусом r. Этот радиус формализует понятие "полость". Затем провести луч из нужной точки вдоль ее вектора и найти пересечение этого луча (или прямой) с построенной конфигурацией шариков. В зависимости от получившейся одномерной картинки решить, направлен ли этот вектор внутрь полости или нет.

tester1

Положим, в трехмерном пространстве имеется облако точек, для каждой из которых заданы координаты. Точки расположены так, что внутри облака есть выраженная полость, в которой точек нет. При этом для каждой точки определен некий вектор. Как определить, направлен вектор внутрь полости или наружу?
предположим, что данные фиксированы. т.е. что надо не разработать алгоритм для любых начальных данных, а построить метод определения того, смотрит ли вектор внутрь или наружу при фиксированном облаке точек. в этом случае я бы посмотрел на двумерные срезы этого облака. Скажем, нашёл бы максимум и минимум по z, а потом пустил бы координату z меняться в этих пределах, а пересечения точек с плоскостью экрана отмечал бы вспышками. думаю, такое кино уже позволит найти твою полость. а когда её найдёшь, то получишь новую информацию- какова форма, размеры и т.п. это уже поможет выбрать какой-то хороший метод.
если что, сильно не ругайте, я по обработке данных не специалист. Но М.Б. Лагутин на семинарах по статистике учил: сперва попробуйте посмотреть на данные глазами.
Оставить комментарий
Имя или ник:
Комментарий: