Geometry 找到曲线上距离给定点最近的点

Geometry 找到曲线上距离给定点最近的点,geometry,interpolation,Geometry,Interpolation,曲线实际上是公交车的轨迹,曲线由曲线上的许多(多达数千个)离散点表示(这些点由安装在公交车上的GPS设备记录)。 输入一个点P,我需要在曲线上找到离点P最近的点。点P通常距离公共汽车轨道不超过30m。注意,最近点不一定是GPS设备记录的点,它可能是两个记录点之间的某个点 首先,我需要一个算法来从这些记录点恢复轨迹。如果插值曲线能够显示公交车的急转弯,那就太好了。哪种曲线最适合此类任务?贝塞尔曲线足够好吗?最后我要计算曲线上最近的点,当然算法完全取决于选择的曲线类型 我正在做一些研究,在曲线插值方

曲线实际上是公交车的轨迹,曲线由曲线上的许多(多达数千个)离散点表示(这些点由安装在公交车上的GPS设备记录)。 输入一个点P,我需要在曲线上找到离点P最近的点。点P通常距离公共汽车轨道不超过30m。注意,最近点不一定是GPS设备记录的点,它可能是两个记录点之间的某个点

首先,我需要一个算法来从这些记录点恢复轨迹。如果插值曲线能够显示公交车的急转弯,那就太好了。哪种曲线最适合此类任务?贝塞尔曲线足够好吗?最后我要计算曲线上最近的点,当然算法完全取决于选择的曲线类型


我正在做一些研究,在曲线插值方面没有太多的知识,所以欢迎您提出任何建议。

对于从记录点计算轨迹,我建议使用向心或弦长Catmull Rom样条线。有关更多详细信息,请参阅。Catmll Rom样条曲线实际上是特殊的三次Hermite曲线,可以很容易地转换为三次Bezier曲线。请注意,Catmull Rom样条曲线的结果通常仅为G1曲线。如果希望轨迹具有更高的连续性(如C2),可以使用自然三次样条曲线或常规B样条曲线插值。无论采用何种方法,建议样条曲线的阶数不高于5。三级学位是一个受欢迎的选择

一旦有了轨迹的数学表示,就可以计算给定点p和轨迹之间的最小距离。通常,点P和曲线C(t)之间的平方距离表示为D(t)=P-C(t)|^2。D的最小值将出现在其一阶导数为零的位置,这意味着我们必须找到以下方程的根:

dD/dt=2*(p-C(t)).C'(t)=0

当C(t)为3度时,dD/dt为5度。这就是为什么建议尽早使用低阶曲线的原因


有许多文献或在线资料讨论如何高效、稳健地找到多项式(任意阶)的根。下面是另一个可能有用的选项。

有许多可能的选项,但答案主要取决于您计划使用曲线的目的。在许多情况下,一个简单的多段线插值可以完成这项工作。。。对于点查找,只需找到与其最近的4个后续点,然后插值该点…cf。