2009-08-10 3 views
4

私は曲線に近似するポリラインを持っており、ベジェ曲線描画をサポートするPostScriptで滑らかな曲線として描画したいと考えています。これを行うには、ポリラインポイントの各ペアの間に2つのコントロールポイントを生成する必要があります。 (私はソースから元の曲線、ちょうどポリラインを取得することはできません。)平滑化されたポリラインを表現するベジェ曲線を作成するにはどうすればよいですか?

を私はthis descriptionからカーディナルスプラインを使用して、いくつかの成功を収めていましたが、パラメータが参照どちらも、WikipediaGDIPlus.DrawCurveは異なるがありますテンション。 MSには詳細はなく、ウィキペディアには詳細が不完全です(カーディナルスプラインはx値を無視します)。

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

答えて

14

このリンクを参照してくださいhttp://www.ibiblio.org/e-notes/Splines/Cardinal.htmマルチセグメント滑らかな曲線のベジェ制御点を計算するために使用できる簡単な公式を提供します。

方程式は本当に簡単ですが、私は私の結果を提供しています計算を繰り返したくない人のために:

レッツパイ(I = 1..nの)ポリラインポイントも。

まず、パイのデリバティブを計算する方法を学ぶ:

P1' = (P2 - P1)/a 
Pi' = (Pi+1 - Pi-1)/a (for i=2..n-1) 
Pn' = (Pn - Pn-1)/a 

"" インスタンスA = 2のために、(おそらくあなたが言及した "緊張" の意味)coeffecientです。

そして、I(I = 1..nの-1)パイからパイ+ 1の各セグメントに対して、ベジエ制御点B1IとB2Iは次のようになります

B1i = Pi + Pi'/3 
B2i = Pi+1 - Pi+1'/3 
+1

誰かが決定的に知って期待していたが、 DrawPathの結果を調べることで、あなたの答えに使われる言葉に2/aという緊張があると思います。 – xan

+0

素晴らしい!私はそのような短いと働いているソリューションのためのしばらく探していた:) – mmbrian

0

2段階のプロセスでこれを行うことができます。まず、3次のbスプラインを行い、次にこれから3次のベジェ曲線を取得します。

ベジェ曲線を当てはめるトリックは、セグメントの端点で導関数をマッチングさせることです。これは本質的にスプラインが行うことです。スプラインの表現を得ることができれば、端点のポイントと各セグメントのコントロールポイントが必要です。そうでなければ、各セグメントの終点での傾きを決定することができ、制御点は外挿された線の交点になります。

関連する問題