将贝塞尔曲线分解为具有等间距斜率的线段

Deconstruct Bezier Curve into Line Segments with Equally Spaced Slopes

本文关键字:斜率 曲线 分解      更新时间:2023-10-16

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

SVG使用具有2个控制点的Bezier近似。我有一个函数,它有一个起点,两个控制点和一个终点,还有参数变量t。我在这里找到了这个函数的代码:在c++, OpenGL中使用De Casteljau算法绘制Bezier曲线

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

对t使用恒定步长不能提供两点之间的恒定斜率,这对计算来说是一个大问题。是否有办法找到正确的t值知道期望的斜率得到的线段?

经过大量的搜索和精炼,我找到了一个网站,它深入地解释了我的问题的答案。事实证明,我的问题与绘制贝塞尔曲线的渲染引擎所面临的问题相同,而反颗粒渲染引擎有一个关于细分贝塞尔曲线以近似各种曲折的精彩教程。

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