次の方法で共有


カーディナル スプライン

カーディナル スプラインは、より大きな曲線を形成するために結合された個々の曲線のシーケンスです。 スプラインは、点の配列とテンション パラメータによって指定されます。 カーディナル スプラインは、配列内の各ポイントをスムーズに通過します。鋭い角がなく、曲線の締まりの急激な変化もありません。 次の図は、一連のポイントと、セット内の各ポイントを通過するカーディナル スプラインを示しています。

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

物理的なスプラインは、薄い木材またはその他の柔軟な材料です。 数学的スプラインが出現する前、設計者は物理スプラインを使用して曲線を描画しました。 デザイナーは、スプラインを紙の上に配置し、特定のポイント セットに固定します。 その後、鉛筆でスプラインに沿って描画することで、曲線を作成できます。 ポイントのセットを指定すると、物理スプラインのプロパティに応じて、さまざまな曲線が生成される可能性があります。 たとえば、曲げに対する抵抗が高いスプラインは、非常に柔軟なスプラインとは異なる曲線を生成します。

数学的スプラインの数式は柔軟なロッドの特性に基づいているため、数学スプラインによって生成される曲線は、かつて物理スプラインによって生成された曲線に似ています。 異なる張力の物理的なスプラインは、特定のポイントセットを通じて異なる曲線を生成するのと同様に、テンションパラメータの異なる値を持つ数学的スプラインは、特定の点のセットを通じて異なる曲線を生成します。 次の図は、同じ点のセットを通過する 4 つのカーディナル スプラインを示しています。 各スプラインの張力が表示されます。 0 の張力は無限の物理的な張力に対応し、曲線はポイント間の最短の方法 (直線) を取るように強制されることに注意してください。 1 の張力は物理的な張力に対応しないため、スプラインは最小合計曲げのパスを取得できます。 テンション値が 1 より大きい場合、曲線は圧縮されたばねのように動作し、長いパスを取るようにプッシュされます。

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

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

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

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