4

曲線を近似するポリラインがあり、ベジエ曲線の描画をサポートする PostScript で滑らかな曲線として描画したいと考えています。そのためには、ポリライン ポイントの各ペアの間に 2 つのコントロール ポイントを生成する必要があります。(ソースから元の曲線を取得することはできません。ポリラインだけです。)

この説明のカーディナル スプラインを使用してある程度成功しましたが、そこにあるパラメータはWikipediaGDIPlus.DrawCurveとは異なり、どちらも張力を参照しています。MS には詳細がなく、ウィキペディアには詳細が不完全です (カーディナル スプラインは x 値を無視しますか?)。

張力に基づく制御点の式は何ですか?

4

2 に答える 2

16

このリンク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) について、ベジエ制御点 B1i および B2i は次のようになります。

B1i = Pi + Pi'/3
B2i = Pi+1 - Pi+1'/3
于 2009-10-14T12:21:17.083 に答える
0

これは 2 段階のプロセスで行うことができます。最初に 3 次 B スプラインを作成し、それから 3 次ベジエ曲線を取得します。

ベジエ曲線をフィッティングするコツは、セグメントの終点で導関数を一致させることであり、これは基本的にスプラインが行うことです。スプラインの表現を得ることができれば、終点のポイントと各セグメントの制御点が必要です。それ以外の場合は、各セグメントの終点で勾配を決定でき、制御点は外挿された線の交点になります。

于 2009-08-11T01:39:47.877 に答える