在给定到插值点的距离的情况下,如何插值点在直线上的位置

时间:2018-06-27 15:17:08

标签: c interpolation linear

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

1 个答案:

答案 0 :(得分:1)

假设以下内容:

  • 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的方向”,而将负距离解释为相反的方向。