我正在尝试在 matlab 中实现算法,该算法采用一组点和一个称为锚点的子集,该算法的工作原理如下:
- 找到最远的两个锚点
- 通过将每个点与最近的锚点相关联,将点分成两组
- 递归地重复这个过程,直到每组只有一个锚点
- 返回具有一个锚点的组
问题是 MatLab 不允许通过引用修改数组,尽管这些组是制定的,但我无法以适当的方式返回它们。
我该如何克服这个问题?
以下是我的代码:
function [part1, part2, part1anchors, part2anchors] = iterativeSpletting(points, anchors)
dist = @(a, b) ((a.xd - b.xd) ^ 2 + (a.yd - b.yd) ^ 2) ^ 0.5;
%find farthest two anchors
[ch1, ch2] = FarthestPoints(anchors);
%find parts
for i = 1:numel(points)
if (dist(points(i), ch1) <= dist(points(i), ch2))
part1 = [part1, points(i)];
else
part2 = [part2, points(i)];
end
end
%assing anchors to parts
for i = 1:numel(anchors)
if (dist(anchors(i), ch1) <= dist(anchors(i), ch2))
part1anchors = [part1anchors, anchors(i)];
else
part2anchors = [part2anchors, anchors(i)];
end
end
if numel(part1anchors) == 1
%how to return the part
else
iterativeSpletting(part1, part1anchors)
end
if numel(part2ch2) == 1
%how to return the part
else
iterativeSplitting(part2, part2anchors)
end
end