如何为postscripts curveto operator生成控制点?

时间:2012-06-12 14:41:13

标签: postscript bezier spline

我正在寻找一种方法来将一堆连接线渲染为postscript中的一条漂亮的连续曲线。渲染曲线通过我的所有点非常重要。

curveto似乎是绘制曲线的唯一可用方法,但该函数需要bezier控制点,我没有。

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

作为参考,我以前在.NET中使用了GraphicsPath.addCurve(float[]),它在渲染之前在内部转换为三次Bézier控制点。我在后记中寻找类似的内容。

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

2 个答案:

答案 0 :(得分:2)

如果使用样条函数插值点,则曲线块有一些三次方程式。并且它们可以转换为Bernstein多项式基础,以找到相应Bezier曲线的控制点。

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

答案 1 :(得分:1)

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