【发布时间】:2025-12-20 12:40:16
【问题描述】:
我正在尝试在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
【问题讨论】:
-
向我们展示您的尝试...
-
是的,谢谢您的通知
标签: matlab recursion pass-by-reference