Matlab - 两条线的距离

时间:2012-10-09 22:39:39

标签: arrays matlab integration area

我有两条线,一条直线和一条曲线。两者都有定义行的任意数量的x和y值 - 对于任一行,x和y值的数量都不相同。我试图在曲线坐标和直线坐标之间获得单独的点距离。您可以考虑离散整合以更好地了解我正在谈论的内容,其中包括:http://www.scientific-solutions.ch/tech/origin/products/images/calculus_integral.gif

通过添加不同的距离,我会得到该区域。我被卡住的部分是点的实际同步。我可以简单地比较每十个指数的直线和曲线坐标的x和y值,例如因为曲线坐标是时间相关的(因为点不会以一般速率变化)。我需要一种方法来同步两组点的实际坐标。我想过将两组点插值到特定数量的点,但同样,弯曲点集的时间依赖性使得该解决方案无效。

有人可以建议一个好方法,概述基础知识吗?我非常感谢你的帮助。

要尝试的代码(伪):

xLine = [value1 value2 ...]
yLine = [value1 value2 ...]
xCurve = [value1 value2 ...]
yCurve = [value1 value2 ...]

xLineInterpolate = %interpolate of every 10 points of x until a certain value. same with yLineInterpolate, xCurveInterpolate and yCurveInterpolate.

然后,我可以从每个数组中获取相同的索引并做一些代数来获得距离。我担心的是,我的线值以恒定速率增加,而我的曲线值有时不会改变(x和y值具有不同的变化率),有时也会这样。这样的插值方法会不会错呢?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想知道直线和曲线之间的距离。最简单的方法是执行坐标转换,使直线为新的x轴。在该帧中,曲线的y值是您寻找的距离。

此坐标转换等于旋转和平移,如下所示:

% estimate coefficients for straight line
sol = [x1 ones(size(x1))] \ y1;
m = sol(1); %# slope
b = sol(2); %# y-offset at x=0

% shift curved line down by b 
% (makes the straight line go through the origin)
y2 = y2 - b;

% rotate the curved line by -atan(m)
% (makes the straight line run parallel to the x-axis)
a = -atan(m);
R = [+cos(a) -sin(a)
     +sin(a) +cos(a)];    
XY = R*[x2; y2];

% the distances are then the values of y3. 
x3 = XY(1,:);
y3 = XY(2,:);

答案 1 :(得分:0)

您需要使用插值。我不知道时间依赖性在这里是如何相关的 - 也许你正在考虑在两条曲线上拟合一条直线?这是一个坏主意。

只需假设每两个相邻点通过直线连接,就可以对任何曲线进行简单插值。这可以显示为曲线的合理近似值。

所以,假设您正在查看彼此相邻的(x1,y1)和(x2,y2),现在选择x3和x2之间的x3(x1

找到y3的简单方法如下:

p=(x3-x1)/(x2-x1)
y3=y1+p*(y2-y1)

这个想法是p显示x1和x2之间的相对位置(例如,0.5将是中间),然后使用p作为y1和y2之间的相对位置。