如何创建贝塞尔曲线以表示平滑折线?

xan*_*xan 4 math graphics spline

我有一条近似曲线的折线,我想在PostScript中绘制它作为平滑曲线,支持Bezier曲线绘制.为此,我需要在每对折线点之间生成两个控制点.(我无法从源中获取原始曲线,只能获得折线.)

我从这个描述中使用了基数样条函数取得了一些成功,但其中的参数与维基百科GDIPlus.DrawCurve不同,两者都涉及张力.MS没有细节,维基百科有不完整的细节(基数样条忽略x值?).

基于张力的控制点的公式是什么?

Ily*_*nov 14

请参阅此链接http://www.ibiblio.org/e-notes/Splines/Cardinal.htm,它提供了简单的公式,可用于计算多段平滑曲线的Bezier控制点.

方程式非常简单,但对于那些不想重复计算的人,我提供了我的结果:

设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 
Run Code Online (Sandbox Code Playgroud)

其中"a"是一个系数(这可能意味着你提到的"张力"),例如a = 2.

然后,对于从Pi到Pi + 1的每个段i(i = 1..n-1),Bezier控制点B1i和B2i将是:

B1i = Pi + Pi'/3
B2i = Pi+1 - Pi+1'/3
Run Code Online (Sandbox Code Playgroud)