我有一条近似曲线的折线,我想在PostScript中将其绘制为平滑曲线,支持Bezier曲线绘制。为此,我需要在每对折线点之间生成两个控制点。 (我无法从源获取原始曲线,只能获得折线。)
我使用this description的基数样条曲线取得了一些成功,但其中的参数与Wikipedia和GDIPlus.DrawCurve不同,两者均指张力。 MS没有细节,维基百科有不完整的细节(基数样条忽略x值?)。
基于张力的控制点的公式是什么?
答案 0 :(得分:14)
请参阅此链接http://www.ibiblio.org/e-notes/Splines/Cardinal.htm,该链接提供了简单的公式,可用于计算多段平滑曲线的贝塞尔控制点。
方程式非常简单,但对于那些不想重复计算的人,我提供了我的结果:
设Pi(i = 1..n)为折线点。
首先,学习如何计算Pi上的导数:
P1' = (P2 - P1) / a
Pi' = (Pi+1 - Pi-1) / a (for i=2..n-1)
Pn' = (Pn - Pn-1) / a
其中“a”是一个系数(这可能意味着你提到的“紧张”),例如a = 2.
然后,对于从Pi到Pi + 1的每个段i(i = 1..n-1),Bezier控制点B1i和B2i将是:
B1i = Pi + Pi'/3
B2i = Pi+1 - Pi+1'/3
答案 1 :(得分:0)
您可以通过两个步骤完成此操作:首先执行立方b样条,然后从中获取三次贝塞尔曲线。
拟合Bezier曲线的技巧是匹配分段端点处的导数,这基本上是样条曲线的作用。如果可以得到样条曲线的表示,则应该为每个线段的端点和控制点指定点。否则,您可以确定每个分段终点处的斜率,控制点将是外推线的交点。