如何在Matlab中计算垂直距离

时间:2012-04-29 15:43:37

标签: matlab geometry distance computational-geometry

我有一个矩阵A(Mx2)和矩阵B(Nx2),其中M> = N. 我必须计算垂直欧氏距离来测试A和B之间的相似性。参考图像,单个欧氏距离是每个pi和p'i之间的一段,一旦计算出每一个垂直距离,我可以计算平均值或者总和得到一个参数。你知道一个matlab例程或这样的脚本吗? enter image description here

2 个答案:

答案 0 :(得分:2)

如果你知道p1 .. p4位于p0和p5之间,那么你可以使用三角形的面积来轻松计算垂直距离:

d(p0p5, p1) = 2 * area(p0p1p5) / norm(p5-p0)

三角形区域由

找到
area(p0p1p5) = sqrt(s * (s-norm(p0-p1)) * (s-norm(p1-p5)) * (s-norm(p5-p0)))

,其中

s = (norm(p0-p1) + norm(p1-p5) + norm(p5-p0)) / 2

我认为你可以使用投影和毕达哥拉斯定理的点积来获得性能提升:

d(p0p5, p1) = sqrt(norm(p1-p0)^2 - dot(p1-p0,p5-p0)^2/norm(p5-p0)^2)

在任何一种情况下,如果您的成本函数涉及均方误差,则可以通过仅评估平方误差来消除sqrt调用。正则方块的计算成本也比调用norm然后平方(使用点积)更便宜。

答案 1 :(得分:1)

您可以使用神经网络工具箱中的dist

AB是nx 2矩阵,这是计算距离总和的一种可能方法(伪代码):sum(sqrt((A_1x - B_1x)^ 2 +(A_1y) - B_1y)^ 2),...,sqrt((A_nx - B_nx)^ 2 +(A_ny - B_ny)^ 2),或:sum(p1-p'1,...,pn-p'n)

这些矩阵中的每一个(AB)都包含2D空间中n个点的x和y坐标(在此示例中为n = 3)。

% Some example matrices, size 3 x 2.

A = [ 10 22; 35 48; 16 42 ];
B = [ 5 7; 8 11; 33 22 ];

DistanceMatrix = dist([A' B']);
DistanceMatrix(1:size(A,1),:) = [];
SumOfDistances = sum(diag(DistanceMatrix));

SumOfDistances =
87.8641