2

我正在寻找一种将一堆连接线渲染为后记中漂亮的连续曲线的方法。渲染曲线穿过我的所有点很重要。

curveto似乎是绘制曲线的唯一可用方法,但该功能需要贝塞尔控制点,而我没有。

那么,有没有办法为我的点计算控制点以便curveto可以使用?最好在后记中。

作为参考,我之前在 .NET 中使用过GraphicsPath.addCurve(float[]),它在渲染之前在内部转换为三次贝塞尔控制点。我正在后记中寻找类似的东西。

(我可以使用样条函数对点进行插值,然后使用大量单独的线对其进行渲染。看起来不错,但并不是一个很好的解决方案)

4

2 回答 2

2

如果您使用样条函数对点进行插值,那么您就有一些曲线片段的三次方程。并且可以将它们转换为伯恩斯坦多项式基以找到相应贝塞尔曲线的控制点。

A*t^3+B*t^2+C*t+D = P0*(1-t)^3+P1*3*t*(1-t)^2+P2*3*t^2* (1-t)+P3*t^3

做一些代数 - 扩大括号,等于 t 的相同幂的系数,通过三次方程系数 A,B,C,D 表示 P(i)

 p0 = D
 p1 = D + C/3
 p2 = D + C * 2/3 + B/3
 p3 = D + C + B + A
于 2012-06-12T16:53:34.990 回答
1

我通过使用此处的代码示例(“使用 Bezier Primitives 通过一组 2D 点绘制平滑曲线”)解决了这个问题。

于 2012-06-13T13:11:33.957 回答