Я не думаю, что можно выполнить оба условия во всех случаях.
Если вы решите сконцентрироваться на первом условии, вы можете использовать иерархическую кластеризацию Complete-Linkage, в которой точки или группы точек объединяются на основе максимального расстояния между любыми двумя точками.В Matlab это реализовано в CLUSTERDATA (см. Справку для отдельных шагов функции).
Чтобы рассчитать индексы кластера, вы должны выполнить
clusterIndex = clusterdata(coordiantes,maxDistance,'criterion','distance','linkage','complete','distance','euclidean')
В случае, если вы хотите просто исключить точки разных кластеров, которые находятся на расстоянии менее minDistance, вы можете запустить pdist
кластеры для очистки подключенных компонентов.