我试图在MATLAB中创建一个函数,该函数返回点(x1,y1),...,(xn,yn)
列表中相邻点之间距离的向量。
那是["distance (x1,y1) to (x2,y2)", ... ,"distance (xn-1,yn-1) to (xn,yn)","distance (xn,yn) to (x1,y1)"]
。
为此,我的想法是使用两个向量:
原始的一个[(x1,y1),...,(xn,yn)]
和[(xn,yn),(x1,y1),...,(xn-1,yn-1)]
。
现在我建立了这个功能:
function erg = distVec(xy1)
n = length(xy1);
xy2 = cat(1,xy1(2:end,:),xy1(1,:));
% define snd vector
erg = [];
for j=n
erg = cat(2,erg,norm((xy1(j,:)-xy2(j,:))));
% norm(...) equals distance between two neighboring points
end
end
但是此函数将不返回具有距离的向量,而仅返回最后求出的距离。
怎么了?
谢谢!
最佳答案
看来xy1
是一个两列的矩阵,其中每个点都是一行。然后,您可以获得无循环的结果,如下所示:
result = sqrt(sum((xy1([2:end 1],:) - xy1).^2, 2));
即:循环移位一行(
xy1([2:end 1],:)
),减去原始矩阵(- xy1
),逐个平方((...).^2
),沿每一行求和(sum(... ,2)
),并取平方根(sqrt(...)
)。关于matlab - MATLAB:函数返回单个值而不是向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32353193/