Как лучше сгруппировать объекты на плоскости?

Стоит задача сгруппировать объеты на плоскости.
Для примера: из этого:
ce75cb0eaa8a407e9e51283f8f7eb4aa.png
Нужно получить, что-то похожее на это:
f02d6f48f1d64e36a14c580388578839.png
Пока на ум пришла идея -- разбить на гексагоны и перебором пройтись по всем точкам. Но возможны случаи, когда объекты с разной плотностью заполняют всю плоскость и если я буду просто делить на равные промежутки, то получу сетку с жирными точками, расположенных на одинаковом расстоянии друг от друга, выглядит так себе. Подскажите какие есть алгоритмы группировки?
  • Вопрос задан
  • 3433 просмотра
Решения вопроса 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я так понимаю что вам нужен алгоритм кластеризации, при условии что вам не известено количество класстеров.

Есть так же вариант реализовать автоопределение количества кластеров для k-means. Мы задаем три рандомных центра класстера, проводим класстеризацию (при этом центры класстеров смещаются), далее мы либо оставляем все как есть, либо делим эти три класстера еще на два. Эти два центра либо будут смещаться и образовывать свои класстера, либо сойдутся в одну точку. Таким образом можно довольно легко вроводить класстеризацию не зная точно количества класстеров.

Правда есть более эффективные алгоритмы для этого.
Ответ написан
Комментировать
Вам нужно группировать точки по радиусу взаимодействия. То есть перебираете все точки и если в радиусе взаимодействия есть другая точка, то группируете их. Это простой цикл.
Ответ написан
alexeygrigorev
@alexeygrigorev
Переворачиватель пингвинов
Да, именно кластеризация вам и нужна. В вашем случае полезным может быть DBSCAN (если уместно "отметание" шума) или FOREL
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы