How plot a grid of rectangles on an overlaid circle?

조회 수: 8 (최근 30일)
JM
JM 2024년 5월 20일
이동: Matt J 2024년 5월 28일
How to plot a circle of radius R and an overlaid grid of rectangles (with each rectangle of dimensions LxW)?
Choice of dimensions are so that the rectangular grid is larger than the dimeter of the circle and the centre of the circle is on one of the rectangle corners within the grid. The circle fully sits within the rectangular grid.
Secondly, from the plot or otherwise can Matlab help count the full rectangles within the circle?

채택된 답변

Matt J
Matt J 2024년 5월 20일
편집: Matt J 2024년 5월 20일
R = 5; % circle radius
H = 1; % rect height
W = 2; % rect width
circ=nsidedpoly(1000,"Radius",R); %polyshape for the circle
Grid=scale(nsidedpoly(4,'Side',1,'Center',[+1,+1]/2),[W,H]);
Grid=arrayfun(@(i)translate(Grid,H*[0,i]),-ceil(R/H):ceil(R/H)-1)';
Grid=arrayfun(@(i)translate(Grid,W*[i,0]),-ceil(R/W):ceil(R/W)-1,'uni',0);
Grid=vertcat(Grid{:}); %polyshape vector for grid rectangles
numContained=sum( area(intersect(Grid,circ))>=area(Grid(1))*0.9999 ) %count contained rectangles
numContained = 28
plot([circ; Grid],'FaceColor','w'); axis equal
  댓글 수: 13
JM
JM 2024년 5월 22일
편집: JM 2024년 5월 22일
Upgrade, as much as I would want it, is beyond my control I am afraid
JM
JM 2024년 5월 22일
이동: Matt J 2024년 5월 28일
@Matt J. Thanks

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Voss
Voss 2024년 5월 20일
R = 5; % circle radius
L = 1; % horizontal grid spacing
W = 2; % vertical grid spacing
C = [7 8]; % center of the circle
% calculate some points on the circle
th = linspace(0,2*pi,100);
xc = C(1)+R*cos(th);
yc = C(2)+R*sin(th);
% calculate the grid's x and y coordinates
xg = C(1)+W*(floor(-R/W):ceil(R/W));
yg = C(2)+L*(floor(-R/L):ceil(R/L));
% plot the circle
plot(xc,yc)
axis equal
% create the vertical grid lines
nx = numel(xg);
xdata = [xg;xg;NaN(1,nx)];
ydata = [repmat(yg([1 end]).',1,nx); NaN(1,nx)];
line(xdata,ydata,'Color','k')
% create the horizontal grid lines
ny = numel(yg);
ydata = [yg;yg;NaN(1,ny)];
xdata = [repmat(xg([1 end]).',1,ny); NaN(1,ny)];
line(xdata,ydata,'Color','k')
% count the rectangles completely inside the circle
n_rectangles_inside = nnz(conv2((xg-C(1)).^2+(yg.'-C(2)).^2 <= R^2,ones(2)) == 4)
n_rectangles_inside = 28

카테고리

Help CenterFile Exchange에서 Elementary Polygons에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by