カーディナル スプラインの描画

カーディナル スプラインとは、特定の点を滑らかに通過する曲線のことです。 カーディナル スプラインを描画するには、 Graphics オブジェクトを作成し、ポイントの配列のアドレスを Graphics::D rawCurve メソッドに 渡します。 次の例では、指定された 5 つのポイントを通過するベル形のカーディナル スプラインを描画します。

Point points[] = {Point(0, 100),
                  Point(50, 80),
                  Point(100, 20),
                  Point(150, 80),
                  Point(200, 100)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5);

次の図は、曲線と 5 つの点を示しています。

5 点のセットを通過するカーディナル スプラインの図

Graphics クラスの Graphics::D rawClosedCurve メソッドを使用して、閉じたカーディナル スプラインを描画できます。 閉じたカーディナル スプラインでは、曲線は配列の最後の点を通過し、配列の最初の点に接続します。

次の例では、指定された 6 つの点を通過する閉じたカーディナル スプラインを描画します。

Point points[] = {Point(60, 60),
   Point(150, 80),
   Point(200, 40),
   Point(180, 120),
   Point(120, 100),
   Point(80, 160)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawClosedCurve(&pen, points, 6);

次の図は、閉じたスプラインと 6 つの点を示しています。

6 点のセットを通過する閉じたカーディナル スプラインの図

Graphics::D rawCurve メソッドにテンション引数を渡すことで、カーディナル スプラインの曲げ方を変更できます。 次の例では、同じ点のセットを通過する 3 つのカーディナル スプラインを描画します。

Point points[] = {Point(20, 50),
                  Point(100, 10),
                  Point(200, 100),
                  Point(300, 50),
                  Point(400, 80)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5, 0.0f);  // tension 0.0
graphics.DrawCurve(&pen, points, 5, 0.6f);  // tension 0.6
graphics.DrawCurve(&pen, points, 5, 1.0f);  // tension 1.0

次の図は、3 本のスプラインとそのテンション値を示しています。 テンションが 0 の場合、点は直線で結ばれることに注意してください。

同じポイントのセットを通過する 3 つのカーディナル スプラインの図が異なる張力で