平滑地连接两条Bézier曲线(C2连续)

pal*_*m3D 8 math graphics bezier continuous

(这个问题的后续行动.)

给定一系列三次Bézier曲线,如何最小化它们以使它们以C2连续方式连接?

输入:

  • 曲线P与控制点P0,P1,P2,P3
  • 曲线Q随控制点Q0,Q1,Q2,Q3
  • 如果它有帮助,你可以假设它们已经是C1连续的.

约束:

  • C0连续性: P3 = Q0
  • C1连续性: P2 - P3 = Q0 - Q1
  • C2连续性: P1 - 2*P2 + P3 = Q0 - 2*Q1 + Q2
  • 修改曲线尽可能接近原始曲线P和Q.

小智 3

让修改后的曲线尽可能接近原始曲线可以有多种解释,但可以认为保持远离连接点的端点和切线恒定是合适的。所以点P0, P1, P3 = Q0, Q2,Q3是常数。

我们可以改变原点,使得P3 = Q0 = 0,强制 C2 连续性可以表示为:

P1 - 2*P2 = 2*Q1 + Q2
Run Code Online (Sandbox Code Playgroud)

人们可以用复杂的表示形式来表达P2=a*e^i*rQ1=b*e^i*r(保持相同的角度可以增强 C2 的连续性。计算

(P1 - Q2)/2 = c*e^i*s
Run Code Online (Sandbox Code Playgroud)

加强 C2 连续性应该是选择和 的r=s组合,使得。解决方案有无数种,但人们可能会使用启发式方法,例如如果它是最小的,则进行更改(从而产生不太明智的更改)。aba+b =ca

如果这没有产生足够小的变化,请尝试两步优化:首先进行更改并P1接近,然后应用上述步骤。Q2sr