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

时间:2015-03-19 05:50:07

标签: matlab

我在一个区域内分散了100个数据点。现在我将该区域划分为6x6等分网格,现在看起来如下图所示:

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

现在我需要在一个网格框内绘制一个圆圈,这样如果有一个以上的点,我就可以在一个框中对点进行分组。如果是这种情况,如果框中没有或一个点,则框内不应有圆圈。

关于我应该做什么的任何想法?

这是我在上面创建的图表的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 个答案:

答案 0 :(得分:4)

所以你需要去的那个过程如下:

  1. 获取积分
  2. 的网格
  3. 计算最小半径圆(我使用this FEX submission,您可以自己动手或检查它在随附的PDF中的执行方式)
  4. 绘制圆圈
  5. 所以这里有一段代码可以完成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轻松地绘制更改代码的省略号。

    询问您是否理解某些内容,但应该是直截了当的。