我有几千个点的散点图,它们位于由多个线段定义的下边界上方。我的目标是找到每个点到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
-我也不知道调用该函数的语法是否正确(经验很少) ),但由于我之前提到的错误,我还没有到达这一点。
错误表明先前pt
的尺寸错误。要运行代码,它必须有两行,否则数据将无法容纳。您可以使用
pt=zeros(2,numel(my_data(:,5)))