Matlab 两条曲线之间的距离

Matlab 两条曲线之间的距离,matlab,distance,curves,Matlab,Distance,Curves,我有两组x,y数据。这些数据的曲线图如下图所示: 比方说,如果蓝线是参考线,我如何计算蓝线和红线之间的距离?更清楚地说,如果红线在蓝线后面,则差值为负,反之亦然 我尝试过使用pdist,但我认为这不是我想要的解决方案 任何帮助都将不胜感激。 谢谢计算轨迹之间的欧几里德距离a每个时间步都非常简单,困难的部分是对该距离进行签名。一种可能性是使用叉积 这是我的密码: % --- Define and display sample curves x1 = cumsum(rand(100,1)-0.3)

我有两组x,y数据。这些数据的曲线图如下图所示:

比方说,如果蓝线是参考线,我如何计算蓝线和红线之间的距离?更清楚地说,如果红线在蓝线后面,则差值为负,反之亦然

我尝试过使用pdist,但我认为这不是我想要的解决方案

任何帮助都将不胜感激。
谢谢

计算轨迹之间的欧几里德距离a每个时间步都非常简单,困难的部分是对该距离进行签名。一种可能性是使用叉积

这是我的密码:

% --- Define and display sample curves
x1 = cumsum(rand(100,1)-0.3);
y1 = cumsum(rand(100,1)-0.3);

x2 = cumsum(rand(100,1)-0.3);
y2 = cumsum(rand(100,1)-0.3);

subplot(1,2,1)
plot(x1, y1, x2, y2)

% --- Get the distance
d = sqrt((x2-x1).^2 + (y2-y1).^2);

% --- Sign the distance with cross product
u = [x1(:) y1(:)];
u(:,3) = 0;

v = [x2(:) y2(:)];
v(:,3) = 0;

tmp = cross(u, v);
d = d.*sign(tmp(:,3));

% --- Display the result
subplot(1,2,2)
plot(d)
这给了我以下结果(右图):


最好的是,

这里显示的线条是用来表示一个人可以行走的路径的吗?你想要沿着这条路线在给定的“时间”内任意两点之间的距离吗?因为除此之外,你所说的“距离”定义得非常模糊:红线实际上在1060标记周围的x值中来回循环,因此你不能说信号滞后或超前一定量。你也可以使用
knnsearch
,计算另一条曲线最近点的距离,但你所说的正距离或负距离的确切含义尚不清楚。想象一个半径为
1
的圆和一个半径为
2
的圆具有相同的中心,您将在何处定义正距离,在何处定义负距离?@Wouter Kuijsters:不,这些线不是路径。线表示地形的零等高线(x y z=0)。所以我想知道蓝线和红线之间的位移。如果红线位于蓝线后面,则值为负值,如果红线位于蓝线前面,则差值为正值。距离蓝线的距离是正常的。@user3006147:这是完全不同的故事!你应该从一开始就告诉我,你希望计算出蓝色曲线的距离。重要的一点:你的两条曲线似乎在两端收敛。这是我们可以安全地假设的,还是只是巧合?在我看来,如果不是这样的话,你的问题就是定义不清的。谢谢你的代码,但是我的数据长度不一样。