我正在尝试在MATLAB中实现动态大小的数据结构。
我有一个带有节点的2D平面。对于每个节点,我需要将坐标和节点周围的坐标保存在距离例如100 想象一下,每个节点周围的半径为100的圆。我想为每个节点存储此圈子内的所有节点。
例如:
-----------------------------------------------
| |
| x |
| x |
| |
| x |
| x |
| x |
| |
| x |
-----------------------------------------------
我试图如下所示实现它。我创建一个NodeList
,其中每个节点都包含一个NodeStruct
。每个NodeStruct
都包含其相应节点的坐标以及其周围节点的数组。我想到的实现问题是变量NodeStruct.NextNode
会为每个节点更改其大小。
我对如何找到所有节点有一个想法,我的问题是存储所有必要信息的数据结构。
NodeList = [];
NodeStruct.Coords = [];
NodeStruct.NextNode = [];
答案 0 :(得分:2)
您可以创建一个索引的结构数组,如下所示:
NodeStruct(3).Coords = [x,y];
NodeStruct(3).NextNode = [1,2,6,10];
但是,用邻接矩阵可以更好地解决此问题。那是一个NxN矩阵,节点数为N,如果节点adj(i,j)
和i
在给定的距离内,则j
为真。在这种情况下,邻接矩阵是对称的,但是如果您列出每个节点的10个最近节点,则不必如此。这种情况也可以通过邻接矩阵来处理。
给出一个坐标为coord
的Nx2矩阵,其中每一行是一个节点的坐标,您可以编写:
dist = sqrt(sum((reshape(coord,[],1,2) - reshape(coord,1,[],2)).^2, 3));
adj = dist < 100; % or whatever your threshold is