如何将 BezierCurve 转换为 B-Spline?

Sae*_*eed 2 bezier vector bspline html5-canvas

我正在尝试使用 HTML5 画布创建复杂路径的动画。我将我的路径分成了一些贝塞尔曲线,并使用三次贝塞尔曲线公式和 javascript 函数 lineTo()绘制了每一条曲线。问题是曲线相互连接的点。他们没有顺利连接。我意识到如果我使用 B-Spline 曲线而不是贝塞尔曲线,这个问题将得到解决。所以,我想知道是否有任何方法可以将贝塞尔曲线转换为 b 样条曲线?

fan*_*ang 5

理论上,可以将贝塞尔曲线视为单段 B 样条曲线。所以,真的没有“将贝塞尔曲线转换为 B 样条曲线”这样的东西。如果可以根据维基百科页面中的信息实现三次贝塞尔曲线评估函数,那么根据De Boor算法实现B样条曲线应该不难。

如果您不想使用实现 B 样条曲线的额外长度,那么您可以做的是在本地修改贝塞尔曲线的控制点,使它们平滑地连接在一起。假设您有两条由 P0、P1、P2 和 P3 定义的三次贝塞尔曲线 C1(t) 和由 Q0、Q1、Q2 和 Q3 定义的 C2(t),其中 P3=Q0。您可以通过将 P2 和 Q1 投影到通过公共点 P3 的线上,使 C1(t) 和 C2(t) 平滑连接。您如何选择线路的方向取决于您。

  • @June Wang:例如,控制点为 P0、P1、P2 和 P3 的三次贝塞尔曲线与节点向量为 [0,0,0,0,1] 的相同阶数和相同控制点的 B 样条曲线相同,1,1,1]。 (3认同)
  • @June Wang:然后,您需要在第二个结处多次执行“结插入”,直到该结的重数等于(度+1)。请参阅这篇文章了解更多详细信息。https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/subdivision.html (2认同)