MATLAB如何围绕图形中选定的节点绘制圆?

时间:2015-03-14 18:26:31

标签: matlab graph draw geometry matlab-figure

我已经生成了具有200个节点的网络的拓扑结构。我希望在选择的节点周围绘制一个黑色的圆圈(满足某个条件IF(条件))。 为了简化,让用户将节点的索引引入黑色圆圈。 这是我生成的拓扑的代码。需要添加哪些指令来围绕选择的节点绘制圆圈?

X=100; 
Y=100;
N=200; %number of nodes 
nodesX(1)=rand*X;
nodesY(1)=rand*Y;

for i=2:N
    nodesX(i)=rand*X;
    nodesY(i)=rand*Y;
    d(i-1) =((nodesX(i)-nodesX(i-1)).^2+(nodesY(i)-nodesY(i-1)).^2).^0.5;

    while (d(i-1)>200)
       nodesX(i)=rand*X;
       nodesY(i)=rand*Y;
       d(i-1) =((nodesX(i)-nodesX(i-1)).^2+(nodesY(i)-nodesY(i-1)).^2).^0.5;

    end


end

h_old=plot(nodesX,nodesY,'m*');
labels=[1:N]';
labels=num2str(labels);
text(nodesX,nodesY,labels);
xlabel('X (Meters)');
ylabel('Y (Meters)');
title(['Network Topology with',num2str(N),'nodes']);
hold on
for k=1:N;
    for j=1:N;
        if (k~=j)
        d=((nodesX(k)-nodesX(j))^2+(nodesY(k)-nodesY(j))^2)^0.5;
        end
        if (k~=j);
             if(d < 50);
            line([nodesX(k),nodesX(j)],[nodesY(k),nodesY(j)]);
             end
        end
    end;

end;

1 个答案:

答案 0 :(得分:0)

将其分为两个任务:

任务1:

定义一个绘制圆的简单函数。一种廉价而肮脏的方式是使用极地表达式。

function [] = circle(center_x,center_y,r)

theta = 0:0.01:2*pi;
x  = center_x + r*cos(theta);
y = center_y + r*sin(theta);

plot(x,y,'k','LineWidth',2)

任务2:

将索引节点的NodeXNodeY值作为圆圈居中的点传递给此函数。您可以根据自己的选择设置圆的半径。使用r=1并选择任意索引,我得到了:

enter image description here

只需注意一点:确保您的轴是方形的。否则,圆圈可能看起来像椭圆形。如果要围绕非方形轴绘制圆,则可以修改代码以生成椭圆。