【问题标题】:Plot a curved trajectory on a 2D coordinate system在二维坐标系上绘制曲线轨迹
【发布时间】:2016-02-28 17:41:39
【问题描述】:

我在二维坐标系中有几个有序点(少于 10 个)。 我有一个代理在系统中移动,我想按照它们的顺序找到这些点之间的最短路径。 作为背景,可以给代理一个推力去的位置,我的目标是绘制最快的路线,因为代理具有最大推力和最大角速度。 经过一番研究,我意识到我可能正在寻找一种曲线拟合算法,但我不知道底层函数,因为这些点是随机分布在坐标系中的。 请帮我找到解决这个问题的方法。 我愿意接受任何建议,我最喜欢的编程语言是 C++。

【问题讨论】:

  • Google 是您的朋友:C++/Boost 有多项式拟合库可供您使用。在拟合方面,点的随机性无关紧要。您对最短时间、最大推力和角速度的限制是更困难的问题。我建议您将问题分解成碎片并以这种方式解决。放松一些约束,找到解决方案,然后重新添加约束。当我听到“最短时间”时,我会通过图表想到 Dijkstra 的算法。也许您需要评估所有可能的图表并选择最小的一个。
  • @duffymo 谢谢,你能详细说明 Boost 中的多项式拟合吗?老实说,我在拟合方面迷失了方向;我的程序员朋友也谈到了 Djikstra,但我不确定如何将此算法与我的问题联系起来
  • @JensHöpken 问题是:我的代理必须遵循点之间的确定顺序
  • 那么就更简单了:你知道路径。要检查的就更少了。您的措辞不正确:您不想要最短路径,您想要最短时间遍历已知路径。每个 NASCAR 赛车手都知道,“砰砰”的控制让您以最快的速度到达那里:油门全开,刹车全开。

标签: c++ math 2d curve


【解决方案1】:

我确信有一个纯数学解决方案,例如 spacecraft trajectory optimization for example,但这是我会考虑从编程/退火角度处理它的方法。

即使您需要一条连续的路径,您也可以以谨慎的步骤开始路径搜索,并以足够接近每个点的容差作为开始。

  • 为每一步分配一定的时间,并在每一步改变施加的角力和推力。
  • 计算生成的角动量和位置以开始下一步。
  • 通过随机搜索为下一步选择参数,或遍历每个参数以找到最接近下一个目标点的参数(量化角度和推力的选择开始)。重复步骤,直到您足够接近下一个目标点。然后重复以到达下一点。

一旦您有了粗略的路径,您就可以通过减少步骤的时间/大小和对目标点的容差开始对其进行细化(也许使用上一次运行中的粗略点作为新路径中的目标点)。

在评估每个步骤的参数适合度时,您可能需要考虑,一旦达到目标点,您可能还希望在下一个点的方向上具有动量。如果考虑多条路径并且适应度函数考虑最短总时间,这应该是一个紧急属性。

如果您使用 std::priority_queue 和 std::map 来跟踪潜在路径,

c++ 可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多