给定到插值点的距离,如何插值线上点的位置
How to interpolate the position of a point on a line given the distances to the interpolated point
我想编写一个 C 代码,我可以在其中找到二维坐标网格中两点之间的直线上的点的位置。我知道的两个点位置,以及每个点到新的所需点的距离。但是,我不想使用三角函数,因为事实证明它比我想要的要昂贵。我听说过一个使用一维插值的简单解决方案,但我不熟悉这个解决方案。有人可以阐明这一点吗?谢谢!
假设如下:
- 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 作为带符号的距离给出,这也有效,其中正距离被解释为 "in the direction from p1 to p2",负距离被解释为相反的方向。
我想编写一个 C 代码,我可以在其中找到二维坐标网格中两点之间的直线上的点的位置。我知道的两个点位置,以及每个点到新的所需点的距离。但是,我不想使用三角函数,因为事实证明它比我想要的要昂贵。我听说过一个使用一维插值的简单解决方案,但我不熟悉这个解决方案。有人可以阐明这一点吗?谢谢!
假设如下:
- 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 作为带符号的距离给出,这也有效,其中正距离被解释为 "in the direction from p1 to p2",负距离被解释为相反的方向。