开发者

How do I organize this data into structures in MATLAB?

Say for n=5, the following code gives me a plot for n randomly generated nodes. These nodes are 开发者_如何学Gonot 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'


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜