круг в матрицу

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

passivesmoker
Пользователь
Сообщения: 1
Зарегистрирован: Ср сен 11, 2019 9:10 pm

круг в матрицу

Сообщение passivesmoker » Ср сен 11, 2019 9:12 pm

есть матрица 9х9, где все элементы 11, надо вписать в нее 1/4 круга радиуса 8
я так понимаю, нужно создать доп. матрицу расстояний от центра круга, но не очень понимаю как это делать не вручную вписывая элементы.
затем надо как-то поэлементно сравнить (?) с исходной матрицей и , где меньше 8, заменить на нули
на этапе сравнения совсем глухо, помогите, только начала изучать матлаб :(

jesusroyeth
Пользователь
Сообщения: 5
Зарегистрирован: Вт окт 29, 2019 5:49 pm

Re: круг в матрицу

Сообщение jesusroyeth » Вт окт 29, 2019 6:23 pm

Для этого упражнения в Matlab желательно использовать полярные координаты, вот пример:

Код: Выделить всё

m9x9=zeros(9);
x=repmat(0:size(m9x9,2)-1,size(m9x9,1),1);
y=repmat(transpose(size(m9x9,1)-1:-1:0),1,size(m9x9,2));
xc=(size(m9x9,2)-1)/2+1;
yc=(size(m9x9,1)-1)/2+1;
x=x-x(yc,xc);
y=y-y(yc,xc);
[theta,r] = cart2pol(x,y);
m9x9(and(r<=4,and(theta>=0,theta<=pi/2)))=1


Jesus David Ariza Royeth
Jesus David Ariza Royeth
программист в Matlab

abobroff
Пользователь
Сообщения: 488
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Re: круг в матрицу

Сообщение abobroff » Чт ноя 21, 2019 11:19 pm

Используем Image Processing Toolbox (функцию bwdist):

Код: Выделить всё

out = ones(9);
x  = zeros(9);
x(1) = 1;
out(bwdist(x) <= 8) = 0;

или без Image ...

Код: Выделить всё

[x,y] = ndgrid(0:8);
out = hypot(x,y) > 8;