Как реализовать структуры данных с динамическим размером в MATLAB? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь реализовать динамическую структуру данных в MATLAB.

У меня есть 2D-плоскость с узлами.Для каждого узла мне нужно сохранить координаты и координаты узлов вокруг него на расстоянии, например, 100. Представьте круг с радиусом 100 вокруг каждого узла.Я хочу сохранить все узлы в этом круге для каждого узла.

Например:

-----------------------------------------------
|                                             |
|   x                                         |
|                                  x          |
|                                             |
|         x                                   |
|                               x             |
|                    x                        |
|                                             |
|        x                                    |
-----------------------------------------------

Я попытался реализовать это, как показано ниже.Я создаю NodeList, который содержит NodeStruct для каждого узла.Каждый NodeStruct содержит координаты соответствующего ему узла, а также массив узлов вокруг него.Проблема с реализацией, которую я имел в виду, заключается в том, что переменная NodeStruct.NextNode меняет свой размер для каждого узла.

У меня есть идея, как найти все узлы, моя проблема заключается в структуре данных для хранениявся необходимая информация.

NodeList = [];
NodeStruct.Coords = [];
NodeStruct.NextNode = [];

1 Ответ

2 голосов
/ 24 апреля 2019

Вы можете создать структурный массив, который вы индексируете, следующим образом:

NodeStruct(3).Coords = [x,y];
NodeStruct(3).NextNode = [1,2,6,10];

Однако, скорее всего, это лучше решить с помощью матрицы смежности.Это матрица NxN, где N - число узлов, и где adj(i,j) истинно, если узлы i и j находятся на заданном расстоянии друг от друга.В этом случае матрица смежности симметрична, но это необязательно, если вы укажете, например, 10 ближайших узлов для каждого узла.Этот случай также может быть обработан с помощью матрицы смежности.

Учитывая матрицу Nx2 с координатами coord, где каждая строка является координатами для одного узла, вы можете написать:

dist = sqrt(sum((reshape(coord,[],1,2) - reshape(coord,1,[],2)).^2, 3));
adj = dist < 100; % or whatever your threshold is
...