Найдите минимальное расстояние от центра (начала координат) до всех ребер и нанесите окружность.
clear all;
A=[0 0;0 -5; 5 -5; 5 5;0 5;-2 2;-5 -5;5 8;-5 -8;-8 0;8 0]
x_axis=A(:,1)
y_axis=A(:,2)
k=convhull(x_axis,y_axis);
figure;
hold on
plot(x_axis(k),y_axis(k),'r-',x_axis,y_axis,'b*');
Centre = [0 0 0];
ConvexHull = [x_axis(k) y_axis(k) zeros(size(k))];
radius = Inf;
for i = 1:size(k)-1
radius = min(radius,Distance(Centre, ConvexHull(i,:), ConvexHull(i+1,:)));
end
radius = min(radius,Distance(Centre, ConvexHull(1,:), ConvexHull(size(k),:)));
viscircles([0 0],radius);
function d = Distance(pt, v1, v2)
a = v1 - v2;
b = pt - v2;
d = norm(cross(a,b)) / norm(a);
end
Добавьте axis equal
, если оси не имеют одинакового масштаба.
viscircles