c++ - 将贝塞尔曲线解构为具有等间距斜率的线段

标签 c++ svg bezier parametric-equations

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

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

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

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

最佳答案

经过大量搜索和提炼术语后,我找到了一个可以深入解释我的问题答案的网站。事实证明,我的问题与用于绘制贝塞尔曲线的渲染引擎所面临的问题相同,而 Anti-Grain 渲染引擎有一个关于 segmentation 贝塞尔曲线以近似各种曲折的精彩教程。

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

关于c++ - 将贝塞尔曲线解构为具有等间距斜率的线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162841/

相关文章:

c++ - 在不知道文件描述符的情况下设置 TCP_NODELAY

c++ - OllyDbg 无法调试visual studio exe

使用三次贝塞尔函数的自定义动画

c++ - 从c++中的外部点到cardinalspline样条曲线的最短距离

c++ - shared_ptr 和 weak_ptr 失败的小例子

c++ - 如何使用 boost::any_cast 转换为基本类型?

javascript - Svg Path 在 Chrome 和 Firefox 中给出不同的 bbox 值

html - 如何应用 SVG 使其在 IE 背景图像中工作

internet-explorer - Internet Explorer 中的 SVG 太小

glsl - 是否可以仅使用 GPU 来加厚二次贝塞尔曲线?