Рисование многоугольника вокруг групп точек данных в MATLAB
У меня есть набор точек данных, каждая из которых относится к определенному кластеру (группе). Мне нужно нарисовать многоугольник вокруг каждого из этих кластеров. Кто-нибудь знает как это сделать?
не имеет значения, использую ли я или не использую фактические точки данных для рисования многоугольника. Мне просто нужно, чтобы они были завернуты в полигоне.
3 ответов
например:
x=rand(1,100); %#generate x and y data for your clusters
y=rand(1,100);
k=convhull(x,y); %#generate indices marking the outermost points
hold on
plot(x,y,'b.') %# plot your cluster points
plot(x(k),y(k),'r-') %# plots only k indices, giving the convex hull
Это даст вам многоугольник, индексы которого совпадают с выбросами ваших кластеров.
Я не уверен, есть ли готовое решение для этого, поскольку я не слишком хорошо знаком с MATLAB, однако это звучит так, как будто вам нужно решение выпуклой оболочки.
надеюсь, это указывает вам в правильном направлении.
convhull работает только в том случае, если у вас выпуклая форма (например, эллипсоид). Если ваше распределение данных имеет вогнутые кривые, такие как форма банана, то convhull не будет работать. К счастью, MATLAB имеет функцию для обработки этого: alphashape
в зависимости от значения" Альфа " вы получаете больше или меньше граней в результирующем многоугольнике.
Как только у вас есть координаты x, y граней, вы можете либо построить их напрямую, но многоугольник будет иметь плоские стороны, или:
вместо интерполяции вы можете определить сетку x,y,z, в которой можно просмотреть данные, и спросить,является ли x, y в Альфа-форме? Если это так, дайте ему значение z = 1, а если нет, дайте ему значение z = 0. затем просто контур сетки, где z = 1.
вы также можете использовать impoly для рисования многоугольника вручную
hobbysplines на обмене файлами Matlab также позволяет сглаживать края многоугольника