我有两条线,一条直线,一条曲线。两者都有定义行的任意数量的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值具有不同的改变率),有时却不改变。这样的插值方法会出错吗?
最佳答案
如果我理解正确,则想知道一条直线和一条曲线之间的距离。最简单的方法是执行坐标转换,以使直线成为新的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,:);
关于arrays - Matlab-两条线的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12809426/