【问题标题】:How to generate control points for postscripts curveto operator?如何为操作员生成附言曲线的控制点?
【发布时间】:2012-06-12 14:41:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: postscript bezier spline


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多