Как «сгладить» границу разброса в Matlab - PullRequest
1 голос
/ 31 октября 2019

У меня есть матрица A размера nx2, собирающая 2D точки в Matlab. Это загружено здесь (к сожалению, я не могу воспроизвести это с простым кодом).

Когда я строю их, используя scatter, я получаю следующую картинку, где

  • Черная область невыпуклая

  • Граница области очень "неровная", точки разброса хорошо видны вдоль границы.

scatter(A(:,1), A(:,2), 50,'k', 'filled') xlim([-4 4]) ylim([-4 4])

enter image description here

Вопрос: Я хотел бы знать, есть ли способ сгладить границу региона. Я думал об использовании patch, но, учитывая, что область невыпуклая, я не знаю, как получить ее вершины. Я также пытался увеличить размер точек разброса, но результат еще хуже. Есть ли какие-то решения?

1 Ответ

3 голосов
/ 31 октября 2019

Вы можете использовать boundary, чтобы найти индексы точки данных, которые образуют границу. Затем вам нужно будет выбрать точки данных, используя эти индексы, чтобы получить координаты x и y, которые содержат ваши данные.

% generate some random data
data = randn(100,2) + [3 4];

% find boundary, returns indices of points in data that define boundary
inds = boundary(data(:,1), data(:,2));
data_bound = data(inds,:);

% plot! 
figure(1); clf;
hold on;
fill(data_bound(:,1), data_bound(:,2), 'r'); % fill boundary
scatter(data(:,1),data(:,2),100, 'bx'); % plot data points
plot(data_bound(:,1), data_bound(:,2), 'k', 'linewidth', 2); % boundary

enter image description here

...