【问题标题】:Matlab - Distances of two linesMatlab - 两条线的距离
【发布时间】:2012-09-30 08:08:00
【问题描述】:

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

【问题讨论】:

  • 您的问题似乎更适合Math StackOverflow site。但是,除此之外,如果您已经在 Matlab 中解决了您的问题,并且需要解决它,您可以在此处发布。
  • @jrd1 - 抱歉,没有意识到这个“数学家使用的软件”出现在他们的常见问题解答中。我已 ping 数学模块以查看问题并让我知道是否可以迁移。
  • intl - 请不要交叉发布您的问题,正如 jrd1 正确指出的那样,您在 Matlab 中为这个问题所做的任何工作(阅读代码)都可能是有用的补充信息。
  • @intl,我们都会犯诚实的错误。话虽如此,我建议将其迁移到math.stackexchange.com 的原因是因为您在询问如何以数学方式解决问题,这也意味着您正在尝试/或将在您弄清楚如何编码后尝试对其进行编码去做——这就是你现在所处的位置。这就是为什么。不是因为 Matlab 是数学家使用的软件——因为它的用途不是数学专有的,它被用于各种领域(甚至是心理学)。但是,如果您尝试了解决方案并需要帮助,那么这里就是正确的地方。
  • 您希望将其迁移到 Maths 网站,还是您在这里感到满意?其中一个数学模组也建议阅读:mathoverflow.net/questions/40748/… - 在 other 数学网站上。如果你愿意,@ ping 我或标记。

标签: arrays matlab integration area


【解决方案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,:);

【讨论】:

    【解决方案2】:

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

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

    所以,假设您正在查看彼此相邻的 (x1,y1) 和 (x2,y2),现在您选择了一个介于 x1 和 x2 (x1

    找到 y3 的简单方法如下:

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

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

    【讨论】:

    • 我的意思是时间相关性,因为曲线的某些 x 和 y 值变化更慢,而其他一些变化更快。
    • @intl 值以不同速率变化的事实无关紧要,这已在斜率中考虑在内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多