Круги неуместны в MATLAB - PullRequest
       1

Круги неуместны в MATLAB

1 голос
/ 06 марта 2011

Я пытаюсь нарисовать окружность на изображении в MATLAB с заданными координатами X, Y и радиусом.Вот код кода метода, который рисует несколько кругов для меня -

function circle( Xs, Ys, Rs, LineWidth, LineColor)
    radius = Rs;
    centerX = Xs;
    centerY = Ys;

    for i=1:length(centerX)
        rectangle('Position',[centerX(i), centerY(i), radius(i), radius(i)],...
        'Curvature',[1,1],...
        'LineWidth',LineWidth,...
        'LineStyle','-',...
        'EdgeColor',LineColor);
    end
end

Но всякий раз, когда я вижу круги на изображении, я вижу, что круги немного смещены относительно заданных координат (например, они двигались немного вправо / вниз).Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 06 марта 2011

То, что вы рисуете, на самом деле представляет собой прямоугольник .Но у вас есть определенная кривизна, которая делает его похожим на круг.Круг затем определяется ограничительной рамкой с координатами прямоугольника.Положение прямоугольника - это верхний левый угол (или на обычном графике - нижний левый угол), а то, что вы называете радиусом, на самом деле является шириной и высотой этой ограничительной рамки.

>> figure, imshow(I)
>> rectangle('Position',[100,100,120,120],'Curvature',[1,1])
>> rectangle('Position',[100,100,120,120],'Curvature',[0,0],'EdgeColor','r')
>> axis on

Этот код создаст круг и прямоугольник, которые находятся в одной и той же позиции, определенной одинаковыми координатами прямоугольника в верхнем левом углу.Красная - это ограничивающая рамка, о которой я говорю.enter image description here

Редактировать: Если вы не хотите использовать функцию прямоугольника, вы можете сделать следующее:

>> figure,imshow(I)
>> hold on
>> plot(centerX+radius*sin(0:0.1:2*pi),centerY+radius*cos(0:0.1:2*pi))
1 голос
/ 09 декабря 2013

Попробуйте следующее:

круг функций (Xs, Ys, Rs, LineWidth, LineColor)

radius = Rs;
centerX = Xs;
centerY = Ys;
xStart = centerX - radius;
yStart = centerY - radius;

for i=1:length(centerX)

    rectangle('Position',[xStart(i) , yStart(i) , radius(i), radius(i)],...
    'Curvature',[1,1],...
    'LineWidth',LineWidth,...
    'LineStyle','-',...
    'EdgeColor',LineColor);

end

end

Надеюсь, это сработает.Вычитая радиус из центральных точек, мы можем получить начальную точку (верхний левый угол) прямоугольника с кривизной [1,1], то есть только круг.

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