我正在寻找一种方法来将一堆连接线渲染为postscript中的一条漂亮的连续曲线。渲染曲线通过我的所有点非常重要。
curveto
似乎是绘制曲线的唯一可用方法,但该函数需要bezier控制点,我没有。
那么,有没有办法计算我的点的控制点,以便可以使用curveto
?最好在后记中。
作为参考,我以前在.NET中使用了GraphicsPath.addCurve(float[]),它在渲染之前在内部转换为三次Bézier控制点。我在后记中寻找类似的内容。
(我可以使用样条函数对点进行插值,然后使用大量的单独行进行渲染。它看起来不错,但实际上并不是一个很好的解决方案)
答案 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点绘制平滑曲线”)解决了这个问题。