我正在研究二维平面中粒子的轨迹。该轨迹通常包含5到50个点(在极少数情况下,更多点)(离散整数坐标)。我已经匹配了数据集的点以形成轨迹(因此我具有时间分辨率)。
我想对该轨迹的曲率进行一些分析,不幸的是,我使用的分析框架不支持拟合轨迹。据我所知,可以使用样条曲线/贝塞尔曲线完成此操作,但我希望您提出意见和/或建议使用什么。
因为这只是我工作的可选部分,所以我不能花费大量时间自行实现解决方案或了解复杂的框架。解决方案必须尽可能简单。
让我从可能的库中指定所需的功能:
-从不同数量的点创建轨迹
-由于这些点是离散的,因此应该对它们的位置进行插值;只要轨迹和点之间的距离小于阈值,就不需要对所有点进行精确匹配
-对于任何给定的点,库都必须能够产生轨迹的导数
-如果图书馆可以报告插值的质量水平(例如适合拟合的chiSquare),那将是有益的
编辑:阅读评论后,我想补充一点:
轨迹不一定与这些点完全匹配。这些点是根据像素矩阵的值创建的,因此它们形成坐标的离散矩阵,其空间分辨率受每个给定距离的像素数限制。因此,这些点(位于发射像素的中心)与粒子的实际轨迹不完全匹配。内插或拟合对我来说都很好,只要解决方案可以应对可能/最有可能既不是双射也不是内射的轨迹。
因此,大多数传统的拟合方法(例如使用多项式拟合或使用最小二乘拟合的指数函数进行拟合)都无法满足我的标准。
另外,我尝试过的所有传统拟合方法都产生了一个函数,该函数似乎很好地描述了轨迹,但是当查看它们的一阶导数(或更高的分辨率)时,会发现大量的“微振荡”(根据我的解释)将非直线函数拟合到(几乎)轨迹的直线部分的过程。
编辑2:评论中有一些讨论,这些轨迹可能是什么样的。尽管我试图排除在前面的步骤中重叠或交叉的轨迹,但实际上基本上任何东西都可以具有形状,长度和“弯曲度”。我在下面提供了两个示例;忽略彩色框,它们只是原始像素矩阵值的表示。黑色的圆点是我想与轨迹匹配的点,如您所见,它们始终位于像素的中心,因此可能只有离散(整数)值。
在此先感谢您的帮助和贡献!
最佳答案
这可能是要走的路
http://alglib.codeplex.com/
根据您的描述,我会说参数样条插值可能符合您的要求。我自己没有使用上面的库,但是它确实支持样条插值。使用插值法意味着您不必担心拟合优度-曲线将穿过您给出的每个点。
关于c++ - 轨迹插补和导数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11036231/