首页 > 解决方案 > 给定到插值点的距离,如何在一条线上插值点的位置

问题描述

我希望编写一个 C 代码,我可以在其中找到一个点在二维坐标网格中两点之间的线上的位置。我知道的两个点的位置,以及每个点到新的所需点的距离。但是,我不希望使用三角函数,因为事实证明这比我想要的要贵。我听说过一个使用一维插值的简单解决方案,但我不熟悉这个解决方案。有人可以解释一下吗?谢谢!

标签: clinear-interpolation

解决方案


假设如下:

  • p1 是第一个点,具有坐标 (p1.x, p1.y);
  • p2 是第二个点,具有坐标 (p2.x, p2.y);
  • pi 是连接 p1 和 p2 的线上的插值点;
  • d1i 是从 p1 到 pi 的给定距离;
  • di2 是从 pi 到 p2 的给定距离。

令 d12 为从 p1 到 p2 的距离。那么:d12 = d1i + di2。

(或者,d12 = sqrt((p2.x-p1.x)*(p2.x-p1.x) + (p2.y-p1.y)*(p2.y-p1.y)) 通过定理毕达哥拉斯的。)

让比率 = d1i / d12。

然后:

  • pi.x = p1.x + 比率 * (p2.x - p1.x)
  • pi.y = p1.y + 比率 * (p2.y - p1.y)

如果 d1i 和 di2 作为有符号距离给出,这也有效,其中正距离被解释为“在从 p1 到 p2 的方向”,而负距离被解释为相反的方向。


推荐阅读