1

.Net Chartオブジェクトを使用して、ある範囲の値から別の範囲にマップするために使用するスプライン関数をインタラクティブに定義しようとしています。つまり、スプラインを使用して0〜100の範囲(y軸)に変換したい0〜4095の範囲(x軸)があります。ポイントのグループを介してスプラインをプロットするチャートを正常に設定しました。ユーザーは、ポイントをインタラクティブに移動して、目的の関数の形状を取得できます。よく働く。

さて...ユーザーが望むようにスプラインを取得したら、(スプライン関数を使用して)どのようにすれば任意のx値に対応するy値を見つけることができますか?

私はそれをする方法を見つけることができないようです。スプラインをプロットしているので、チャートオブジェクトがどこかで計算を行っていることを知っています...多分それらはそれにアクセスすることを提供しません。

別の方法は、スプライン計算を自分で行うことです...絶対に必要でない限り、そこには行きたくありません。

ありがとう。

ブライアン

4

1 に答える 1

1

xの目的の値を生成する「t」(張力パラメーター)の値を見つける必要があります。0から1の範囲を使用している場合、パラメーター「t」の値は0.5に近くなります。tがわかれば、対応するyの値を計算できます。xの同じ値になる「t」の3つの値を生成する3次方程式を解きます。以下のリンクを確認してください。

http://algorithmist.wordpress.com/2009/09/28/cardinal-splines-part-2/

枢機卿スプラインは、前の点から次の点へのベクトルに基づいて、内部点の接線を指定します。各接線は、このベクトルとその長さの倍数に平行です。たとえば、点P1での接線方向は、ベクトルP2 – P0に平行です。または、T1 = s(P2 – P0)のように単純に書くことができます。ここで、sは実数です。

以下のコードのこの部分を確認してください。ここで、xtargetは入力値xです。

コード:

 for (Double t = 0; t<=1; t += 0.01)
  {
      s = (1 - t) / 2;
P(t)x = s(-t3 + 2t2 – t)P1X + s(-t3 + t2)P2X + (2t3 – 3t2 + 1)P2X + s(t3 – 2t2 + t)P3X + (-2t3 + 3t2)P3X + s(t3 – t2)P4X

P(t)y = s(-t3 + 2t2 – t)P1Y + s(-t3 + t2)P2Y + (2t3 – 3t2 + 1)P2Y + s(t3 – 2t2 + t)P3Y+ (-2t3 + 3t2)P3Y + s(t3 – t2)P4Y

if(P(t)x=>xtarget)
{
return P(t)y;
}
}

上記の方法により、曲線上のおおよその点P(t)yが得られます。

于 2012-09-11T05:08:16.263 に答える