我正在寻找一种方法让我的应用程序在手绘模式下产生更流畅的结果。现在它只是简单地添加每个 mousemove 点并从中创建一个多边形。我注意到现代 vector 应用程序会生成贝塞尔曲线,使其看起来更平滑,我想知道这是如何完成的?那么我怎样才能得到这 4 个点来使用平滑曲线的粗略用户输入进行贝塞尔插值呢?
谢谢
最佳答案
如果想解决一般问题,可以使用levenberg-marquardt (LM)优化。
您想用少量点定义一条贝塞尔曲线。您可以使用 LM 通过最小化所有点到曲线的平方距离来优化曲线参数(点位置)。这是您的目标函数,距离平方和。
诀窍是计算 LM 的梯度和 hessian。你可以用数字来做到这一点,而不必计算任何数学。使用 numerical differentiation计算用于查找梯度的 Jacobian (J)。 (雅可比也被 LM 用来逼近 Hessian。)
Matti 提到了用于平滑样条的 GSL。我不知道 GSL,但事实证明它有 LM 和数值微分的实现。
关于c++ - 从粗糙点生成三次贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225851/