我正在尝试使用HTML5画布创建复杂路径的动画。我将我的路径划分为一些贝塞尔曲线,并使用三次贝塞尔曲线公式和 javascript 函数 lineTo() 绘制每条曲线。问题是曲线相互连接的点。它们连接不顺畅。我已经意识到,如果我使用 B 样条曲线而不是贝塞尔曲线,这个问题将得到解决。所以,我想知道是否有任何方法可以将贝塞尔曲线转换为 b 样条曲线?
理论上,贝塞尔曲线可以被认为是单段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) 平滑连接。如何选择线条的方向取决于您。