问题
Say for n=5
, the following code gives me a plot for n
randomly generated nodes. These nodes are not structures (just plotted points), but I want to assign every node a message just as I did for sink
and source
and keep track of the nodes identity and location.
For example, if node 4
has (x,y) coordinates (.3452 , .5463)
, I want to assign node 4
a msg
and temp_value
as well. How can I do this?
Code:
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'
回答1:
I would suggest creating an array of structures that stores all of the data associated with each "node". You can create all of the data for your nodes with one call to STRUCT in the following way:
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
The variable nodes
is an N-by-1 structure array with fields x
, y
, message
, and value
. You can access and modify the data using the usual array and field indexing:
>> 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
You can then plot the nodes in the following way:
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
来源:https://stackoverflow.com/questions/1889522/how-do-i-organize-this-data-into-structures-in-matlab