贝塞尔曲线:我想实现一种算法,用贝塞尔算法绘制连续曲线

时间:2016-05-20 08:28:47

标签: algorithm math bezier graphic

通过互联网,我通过给定三个控制点找到了二次beizer曲线。但如果我有一套积分,我该怎么办?

  

x =(1-t)*(1-t)* p [0] .x + 2 *(1-t)* t * p [1] .x + t * t * p [2]。 X;

     

y =(1 - t)*(1 - t)* p [0] .y + 2 *(1 - t)* t * p [1] .y + t * t *   P [2] .Y;

在我的程序中,我将有一个触摸事件,当用户触摸它并在屏幕上移动手指时,程序开始绘制曲线。

如果我正在使用Android,我可以使用quadTo,但我无法这样做因为我想在很多平台上做到这一点

1 个答案:

答案 0 :(得分:0)

为此,您需要使用曲线拟合算法,这通常使用最小二乘解决方案迭代完成。

对此的常见参考是graphics-gems FitCurve.c,请参阅:

https://github.com/erich666/GraphicsGems/blob/master/gems/FitCurves.c

虽然这是一个很好的参考,但它不像图书馆功能那么可用,因为它在任何地方都使用静态变量。

我已经将open-toonz曲线拟合(也基于FitCurve.c)提取到一个独立的单文件C库中 - 它可以计算出曲线。
https://developer.blender.org/diffusion/B/browse/master/extern/curve_fit_nd/intern/curve_fit_cubic.c
(有各种改进,详见标题)