5

我有两条线,一条直线,一条曲线。两者都具有定义行的任意数量的 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 值具有不同的变化率),有时会。那么这样的插值方法会出错吗?

4

2 回答 2

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,:);
于 2012-10-10T20:07:05.237 回答
0

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

只需假设每两个相邻点由一条直线连接,您就可以对任何曲线进行简单的插值。这可以被证明是曲线的合理近似。

因此,假设您正在查看彼此相邻的 (x1,y1) 和 (x2,y2),现在您选择了一个介于 x1 和 x2 (x1 < x2 < x3) 之间的 x3,并且想要找到y3 值。

查找 y3 的简单方法如下:

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

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

于 2012-10-10T01:01:24.037 回答