gpt4 book ai didi

matlab - 围绕网格中的数据绘制圆圈 (MATLAB)

转载 作者:太空宇宙 更新时间:2023-11-03 20:24:51 27 4
gpt4 key购买 nike

我有 100 个数据点分散在一个区域内。现在我用 6x6 等大小的网格划分区域,现在它看起来像下图:

figure http://s2.postimg.org/c6zk68myf/IGN2.png

现在我需要在网格的方框内画一个圆,这样如果有超过 1 个点,我就可以将方框内的点分组。如果是这种情况,如果一个方框内没有或一个点,则方框内不应有圆圈。

知道我应该做什么吗?

这是我在上面创建的绘图的 MATLAB 代码:

xm=100;
ym=100;

%x and y Coordinates of the Sink
sink.x=0.5*xm;
sink.y=0.5*ym;

%Number of Nodes in the field
n=100

figure(1);
for i=1:1:n
S(i).xd=rand(1,1)*xm;
XR(i)=S(i).xd;
S(i).yd=rand(1,1)*ym;
YR(i)=S(i).yd;
S(i).G=0;
%initially there are no cluster heads only nodes
S(i).type='N';

plot(S(i).xd,S(i).yd,'o');
hold on;


end
NrGrid = 6;
% Number Of Grids
x = linspace(0, 100, NrGrid+1);
[X,Y] = meshgrid(x);
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xd,S(n+1).yd,'x',X,Y,'k');
hold on
plot(Y,X,'k')
set(gca, 'Box','off', 'XTick',[], 'YTick',[])
axis square

%First Iteration
figure(1);

预期结果:

http://i.share.pho.to/27ae061b_o.jpeg

最佳答案

因此,您需要经过以下过程才能到达那里:

  1. 获取点在哪个网格中
  2. 计算最小半径圆(我用了 this FEX submission ,你可以自己做或者在它附带的 PDF 中查看它是如何执行的)
  3. 绘制圆圈

所以这里有一段代码完成了1-2

%% Where are the points?
% I am not going to modify your `S` variable, but you could do this inside
% it
points=[S(1:end-1).xd; S(1:end-1).yd];
gridind=zeros(size(points,2),1);
Grid=NrGrid^2;
for ii=1:NrGrid
for jj=1:NrGrid
% get points in the current square
ind=points(1,:)>X(1,ii)& points(1,:)<X(1,ii+1)...
& points(2,:)>Y(jj,1)& points(2,:)<Y(jj+1,1);
% save index
gridind(ind)=(ii-1)*NrGrid+(jj-1)+1;
end
end

% now that we know in wich grid each point is lets find out wich ones are
% not
c=zeros(NrGrid^2,2);
r=zeros(NrGrid^2,1);

for ii=1:NrGrid^2
if sum(gridind==ii)>1
[c(ii,:), r(ii)] = minboundcircle(points(1,gridind==ii),points(2,gridind==ii));

else
c(ii,:)=nan;
r(ii)=nan;
end
end

这里是一段绘制它们的代码

theta=linspace(0,2*pi,20);

offs=1; % For beauty purposes
for ii=1:NrGrid^2
if ~isnan(c(ii))
xc=(r(ii)+offs).*cos(theta)+c(ii,1);
yc=(r(ii)+offs).*sin(theta)+c(ii,2);
plot(xc,yc,'r');
end
end

axis([min(X(:)) max(X(:)) min(Y(:)) max(Y(:)) ])

结果:

enter image description here

您可以轻松地绘制省略号,稍微更改代码,例如使用 this FEX submission .

如果你不明白什么就问,但应该直截了当。

关于matlab - 围绕网格中的数据绘制圆圈 (MATLAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29138016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com