-1

说 for n=5,下面的代码给了我一个n随机生成节点的图。这些节点不是结构(只是绘制点),但我想像我一样为每个节点分配一条消息,sinksource跟踪节点的身份和位置。

例如,如果node 4有 (x,y) 坐标(.3452 , .5463),我也想分配node 4一个msgtemp_value。我怎样才能做到这一点?

代码:

n = input('No. of Nodes:');

sink = [0 0];
source = [1 1];

node = rand(n,2)
x = node(:,1);
y = node(:,2);

x1 = sink(:,1);
y1 = sink(:,1);

x2 = source(:,1);    
y2 = source(:,1);

plot(x,y,'o')
hold on

plot(x1,y1,'r*')
hold on

plot(x2,y2,'r*')
hold on

sink = struct;    
sink.msg = 'temp';
sink.temp_value = '30'

source = struct;
source.msg = 'temp';
source.temp_value = '30'
4

1 回答 1

4

我建议创建一个结构数组来存储与每个“节点”关联的所有数据。您可以通过以下方式一次调用STRUCT为节点创建所有数据:

N = 5;                         %# Number of nodes
coords = num2cell(rand(N,2));  %# Cell array of random x and y coordinates
nodes = struct('x',coords(:,1),...   %# Assign x coordinates
               'y',coords(:,2),...   %# Assign y coordinates
               'message','temp',...  %# Assign default message
               'value',30);          %# Assign default value

该变量nodes是一个N×1结构体数组,包含字段xymessagevalue。您可以使用通常的数组和字段索引来访问和修改数据:

>> nodes(1)  %# Contents of node 1

ans = 

          x: 0.4387
          y: 0.4898
    message: 'temp'
      value: 30

>> nodes(1).message  %# Message for node 1

ans =

temp

>> nodes(1).message = 'hello world!';  %# Change message for node 1

然后,您可以按以下方式绘制节点:

plot([nodes.x],[nodes.y],'r*');                %# Plot all the nodes in red
index = randi(N,[1 2]);                        %# Pick two nodes at random
hold on;
plot([nodes(index).x],[nodes(index).y],'b*');  %# Plot 2 random nodes in blue
于 2009-12-11T20:27:51.853 回答