0

単一の変数で定義された 2d パスがあります。

var point = path(t);  // --> [0.113, 0.883]

tから0までを繰り返す1ことで、パス全体を列挙し、連続するペアをグラフ化できます[x,y]。パスは x 軸上で重なっていないので、理論的には関数を作成できるはずですが、正確なアプローチは現時点ではわかりません。x 軸に投影して [x,y] --> y を取ると、x と y を移動しているため、グラフは間違っています。 ×これは一次元に射影すると反映されない。2D パスを x から y へのマッピングとして表す関数を作成するにはどうすればよいですか?

編集: これは曲線のイメージです (白い線はベジェ スプライン パス(t) --> [x,y]、灰色の円は元のデータ ポイント、緑の線は生成に使用している元のキーフレーム データです)残りの行は無視してください):

ここに画像の説明を入力

4

2 に答える 2

0

私はついにこれを理解しました!path(x) を試行し、[x,y] ペアで返された x と求められた x との差を判断するバイナリ検索アルゴリズムを作成しました。次に、差の半分を追加して再試行します。イプシロンが与えられると、これは対数時間で正しい [x,y] ペアに近づきます!

誰かがそれを望むなら、私はコードを持っています。

編集:コードは次のとおりです(バイナリ検索部分の場合):

function buildBinary(at, epsilon) {
  return function(x) {
    var guess = x;
    var near = at(guess);
    var approx = near[0];
    var diff = x - approx;

    while (Math.abs(diff) > epsilon) {
      guess = guess + diff * 0.5;
      near = at(guess);
      approx = near[0];
      diff = x - approx;
    }

    return near[1];
  }
}

atは関数 path(t) -> [x,y] であり、epsilonどれだけ近いかは許容されます。よく働く!

于 2013-06-14T19:03:06.877 に答える