将(x,y)坐标附加到Matlab循环中的变量以进行函数调用

问题描述 投票:0回答:1

我有几千个点的散点图,它们位于由多个线段定义的下边界上方。我的目标是找到每个点到pt所位于的下边界(由连接的直线和倾斜线段组成)之间的最短距离,并对所有点的该距离求和,以供以后进行后期处理。

我找到了一个在线的点对线功能脚本(https://www.mathworks.com/matlabcentral/fileexchange/64396-point-to-line-distance),我已经对其进行了单独测试,现在想将其集成到我的脚本中。该函数采用点数组(双精度类),例如[0.1,0.7;0,0.5;...],还采用两个[x,y]点,它们位于要计算最短距离的线上。

到目前为止,我已经编写了一个while循环,该循环遍历已经保存到工作区的数据集中的所有行(零值我想忽略)。然后,我使用嵌套的if循环检查给定点是否在给定下边界线段的x范围内(我一直想计算到给定pt所在的下边界线段的最短距离),最后我尝试将给定的点的(x,y)坐标附加到变量中,该变量将成为函数输入之一。定义下边界线段的两个点针对每个段进行了硬编码,并且不会更改。

这是我的代码段:

short_deviation = 0;
idx = 1;
while idx <= numel(my_data(:,5)) && not(my_data(idx,5) == 0)
    ...
    if my_data(idx,5) < my_data(2,9) && my_data(idx,5) > my_data(1,9) % check that pt is in x range of lower segment
        pt(:,idx) = my_data(idx,3:4); % CURRENT ERROR - Try to append given pt to list for function input
        v1 = my_data(1,9:10); % two hard coded x,y pts which lie on lower boundary to which I want the distance
        v2 = my_data(2,9:10);
        distance_2D(idx) = point_to_line_dist(pt, v1, v2); % calling function
    end
    ...
    idx = idx + 1;
end

当我运行当前代码时,出现以下错误消息:

无法执行分配,因为左侧的尺寸为1×1,右侧的尺寸为1×2。

My_script中的错误(第xxx行)pt(:,idx) = my_data(idx,3:4);

现在我写出这段代码,我认为另一个潜在的错误是我在distance_2D循环内调用了函数if-我也不知道调用该函数的语法是否正确(经验很少) ),但由于我之前提到的错误,我还没有到达这一点。

matlab loops append
1个回答
1
投票

错误表明先前pt的尺寸错误。要运行代码,它必须有两行,否则数据将无法容纳。您可以使用

pt=zeros(2,numel(my_data(:,5)))

© www.soinside.com 2019 - 2024. All rights reserved.