Нарисуйте круг внутри выпуклой оболочки с центром в начале координат - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь нарисовать круг внутри выпуклой оболочки с центром в начале координат. Я приложил код, генерирующий точки и выпуклый корпус. Каким образом я могу создать вписанную окружность с центром в начале координат?

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;
plot(x_axis(k),y_axis(k),'r-',x_axis,y_axis,'b*');

Попытка вписать такой круг. С центром в начале координат. (рисунок отредактирован краской, а не матлабом)

Image of the Expected Result

1 Ответ

0 голосов
/ 22 января 2019

Найдите минимальное расстояние от центра (начала координат) до всех ребер и нанесите окружность.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...