平滑连接两条贝塞尔曲线(C2连续)。

10

(跟进此问题。)

给定一系列三次贝塞尔曲线,如何最小地修改它们以使它们以C2连续的方式连接?

输入:

  • 控制点为 P0P1P2P3 的曲线 P
  • 控制点为 Q0Q1Q2Q3 的曲线 Q
  • 如果有帮助,您可以假设它们已经是 C1 连续的。

约束条件:

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

3
将修改后的曲线尽可能接近原始曲线可以有多种解释,但是人们可以考虑保持端点和切线远离连接点不变。因此,点P0P1P3=Q0Q2Q3是固定的。
我们可以改变原点,使得P3=Q0=0,这样强制C2连续性可以表示为:
P1 - 2*P2 = 2*Q1 + Q2

我们可以使用复数表示法来表达P2=a*e^i*rQ1=b*e^i*r(保持相同的角度可以强制执行C2连续性)。请计算:

(P1 - Q2)/2 = c*e^i*s

强制保持C2连续性应该选择 r=s,并找到一组 ab 的组合,使得 a+b=c。有无限多个解决方案,但可以使用启发式算法,例如如果 a 是最小的,则改变它(从而产生较不明智的更改)。
如果这样仍然不能产生足够小的变化,请尝试两步优化:首先改变 P1Q2 以使 s 更接近 r,然后应用以上步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接