【问题标题】:Deconstruct Bezier Curve into Line Segments with Equally Spaced Slopes将贝塞尔曲线解构为等间距斜率的线段
【发布时间】:2015-08-23 03:18:33
【问题描述】:

我目前正在开发一个程序,该程序采用赛道的比例 SVG 文件,并使用数据将赛道近似为点数组。理想情况下,任何两个连续点之间的斜率的绝对值应该是相同的,因为这可以让我将角度、弧长和半径近似为已知精度,以用于计算曲线周围的最大速度。

SVG 使用带有 2 个控制点的贝塞尔近似值。我有一个函数,它需要一个起点、2 个控制点和一个终点以及参数变量 t。我在这里找到了代码: Drawing Bezier curves using De Casteljau Algorithm in C++ , OpenGL

我想要的结果是直道由很少的线段组成(坡度变化很小),而急转弯由许多线段组成(坡度变化很大)。这将在计算中保持恒定的准确性。

对 t 使用恒定步长不会在两点之间提供恒定斜率,这对计算来说是一个大问题。知道结果线段的期望斜率,有什么方法可以找到正确的 t 值?

【问题讨论】:

  • 最大曲率将出现在端点之一。如果您找到最大曲率,那么您应该能够确定一个步长,以确保您的斜率在连续线段之间不会发生太大变化。
  • @squeamishossifrage:对不起,我应该说二阶导数,而不是曲率。几何曲率可以在任何地方最大。但是,x 和 y w.r.t t 的二阶导数(的绝对值)将在端点之一处达到最大值,因此您应该能够确定加速度的上限。看起来这可能很有用,因为当曲线在中间附近具有较高的几何曲率时,它实际上正在减慢 w.r.t t,因此线段会自动变短。但我可以看到这并不完美。
  • 你的最终目标是计算最大速度出现的t值吗?
  • 这感觉就像XY Problem formulation。你想做什么,你认为你需要这个?因为您不是“在一个程序上工作,该程序采用赛道的比例 SVG 文件并使用数据将赛道近似为点数组”,所以我很确定最终您想要对这些点做一些事情:你想对他们做什么?你想形成等距线段吗?与赛车等进行等速曲线穿越等?

标签: c++ svg bezier parametric-equations


【解决方案1】:

经过大量搜索和优化术语,我找到了一个网站,可以深入解释我的问题的答案。原来我的问题和绘制贝塞尔曲线的渲染引擎一样,Anti-Grain Rendering Engine有一个很棒的教程,介绍如何细分贝塞尔曲线来近似各种曲折。

https://web.archive.org/web/20180307160123/http://antigrain.com/research/adaptive_bezier/index.html

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2012-07-27
    • 1970-01-01
    • 2016-10-05
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多