我试图在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/

10-09 04:25