GDI+ でのカーディナル スプライン

カーディナル スプラインは、個々の曲線がつながって大きな曲線を形成する曲線のシーケンスです。 スプラインは、ポイントの配列とテンションのパラメーターによって指定されます。 カーディナル スプラインは配列内の各ポイントを滑らかに通ります。鋭い角はなく、曲線のカーブが急に変化することはありません。 次の図は、ポイントのセットと、それらの各ポイントを通るカーディナル スプラインを示しています。

Cardinal Spline

物理的なスプラインと数学的なスプライン

物理的なスプラインとは、薄いシート状の木やその他の柔軟な素材です。 数学的なスプラインが出現するまで、デザイナーは物理的なスプラインを使用していました。 デザイナーは、1 枚の紙の上にスプラインを置いて、いくつかのポイントを固定します。 その後でスプラインに沿ってペンや鉛筆でなぞると曲線を描くことができました。 ポイントのセットによって、物理的なスプラインの特性に応じた、さまざまな曲線が生まれます。 たとえば、曲がりづらいスプラインでは柔軟性が高いスプラインとは異なる曲線が作られます。

数学的なスプラインの数式は、柔軟な棒の特性に基づいているため、数学的スプラインによって生成される曲線は、物理的なスプラインによって生成された曲線に似ています。 テンションが違う物理的なスプラインで、ポイントのセットから異なるカーブが生成されるのと同様に、テンションのパラメーターの値が違う数学的なスプラインでは、ポイントのセットから異なるカーブが生成されます。 次の図は、同じポイントのセットを通る 4 つのカーディナル スプラインを示しています。 各スプラインのテンションが示されています。 テンション 0 は、無限大の物理的なテンションに相当します。曲線はポイント間の最短距離を取ります (直線)。 テンション 1 は、物理的なテンションがありません。スプラインは最小合計ベンドのパスを取ることができます。 テンション値が 1 より大きと、曲線は押し込まれたバネのように動作し、突き出してパスが長くなります。

Cardinal Splines

前の図の 4 つのスプラインは、開始ポイントで同じ接線を共有しています。 接線は、開始ポイントから次のポイントに向かい、曲線に沿って描画される線です。 同じく、終了ポイントで共有される接線は、終了ポイントから前のポイントに向かい曲線に沿って描画される線です。

カーディナル スプラインを描画するには、Graphics クラスのインスタンス、Pen、および Point オブジェクトの配列が必要です。Graphics クラスのインスタンスで提供される DrawCurve メソッドによって、スプラインが描画され、Pen によってスプラインの属性 (線の幅や色など) が格納されます。 Point オブジェクトの配列には、曲線が通るポイントが格納されます。 次のコード例は、myPointArray のポイントを通るカーディナル スプラインを描画する方法を示しています。 3 つ目のパラメーターがテンションです。

myGraphics.DrawCurve(myPen, myPointArray, 1.5f);
myGraphics.DrawCurve(myPen, myPointArray, 1.5F)

関連項目