カーディナル スプライン

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

6 つの定義されたポイントを通過するカーディナル スプラインを示す図

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

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

同じ 3 点を通る 4 つのカーディナル スプラインを示す図

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

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

myGraphics.DrawCurve(&myPen, myPointArray, 3, 1.5f);