c - 给定到插值点的距离,如何在一条线上插值点的位置
问题描述
我希望编写一个 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 作为有符号距离给出,这也有效,其中正距离被解释为“在从 p1 到 p2 的方向”,而负距离被解释为相反的方向。
推荐阅读
- asp.net-mvc - MVC5 Windows 身份验证适用于 IISExpress 但不适用于 IIS
- email - 您知道如何设计此电子邮件链接吗?
- android - Android 模拟器无法在 AMD Ryzen 2400G 上运行
- java - JSP 中的 Java PropertyNotFoundException
- java - 使用 Selenium/Katalon (Java) 打开并阅读具有特定标题的电子邮件文本(来自 Gmail)
- gnuplot - Gnuplot 图像到电影:闪烁效果
- ios - 如果 SuperView 中的 UITextField 是活动响应者,则 UIControl 不会调用事件处理程序
- django - 如何在 django 2.0 中设置注册和信号
- java - Android - 使用类似于 @SerializedName 的内容注释 Retrofit2 POST / PATCH 请求正文
- java - HTTP 状态 500 - 实例化 servlet 类 com.sar.pkg.MyServlet 时出错