Ошибка Matlab Convhull. Недостаточно уникальных данных

Я получал эту ошибку в Matlab, когда пытался вычислить выпуклую оболочку набора чисел, вписанных в окружность. Вот код, и ошибка, которую я продолжал получать: Ошибка вычисления выпуклой оболочки. Указано недостаточно уникальных точек.

for u = 1:50; 
  for v = 1:50;       
    if sqrt(((u-25)^2)+((v-25)^2)) <= 25
      c = convhull(u,v);
      plot(u(c),v(c),'r-',u,v,'b*')         
    end
  end
end

Точки вписаны или расположены по кругу: введите здесь описание изображения


person Zoidberg Alpha    schedule 11.01.2018    source источник


Ответы (1)


В вашем коде вы отправляете отдельные точки convhull. Вместо этого сначала определите все точки в наборе, а затем сразу отправьте их в функцию. Вот пример.

% create mesh
[u,v] = meshgrid(1:50,1:50);
% get indicies of points within the circle
idx = sqrt((u-25).^2+(v-25).^2) <= 25;
% filter outside points
u = u(idx);
v = v(idx);
% compute convex hull
c = convhull(u,v);
plot(u(c),v(c),'r-',u,v,'b.');

Результаты

введите здесь описание изображения


Примечание. Формально одноэлементное множество является выпуклым, поэтому это его собственная выпуклая оболочка . Я не уверен, почему MathWorks решил вернуть ошибку в этом случае.

person jodag    schedule 11.01.2018