我尝试在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
但是这个函数不是带有距离的向量,而只返回最后评估的距离。
有什么问题?
谢谢!
答案 0 :(得分:4)
看起来xy1
是一个双列矩阵,其中每个点都是一行。然后您可以获得没有循环的结果,如下所示:
result = sqrt(sum((xy1([2:end 1],:) - xy1).^2, 2));
即:循环移位一行(xy1([2:end 1],:)
),减去原始矩阵(- xy1
),逐个元素((...).^2
),沿每行求和({{1} }),取平方根(sum(... ,2)
)。
答案 1 :(得分:3)
那么,length(xy1)
当然会返回向量的长度,例如7。
你的循环执行for j=n
,因此适用于j=7
。它不返回评估的最后距离,它返回唯一距离评估。
将for循环更改为for j=1:n