2

これは数学の問題かもしれません...円形の軸上に一連の点があります。円を x、点の半径を y としましょう。問題は 2 つあります。

  1. すべての点で滑らかな線が必要です。これが通常の x/y グラフであると仮定しましょう。正確な座標はわかっています。これらすべてのポイント間にスムーズなパスを作成するにはどうすればよいでしょうか?
  2. 通常の x/y グラフではありません。a/r グラフ (角度/半径) です。1.の解決策は適用できると思いますが、どこでその線を引きますか? (a/r グラフであることがさらに難しくなるかどうかはわかりません。)

(Javascript でこれを作成したい<canvas>。熱心な人のために何かを設定しました: http://jsfiddle.net/rudiedirkx/5LfdP/1/ )

私が探しているのは

滑らかな折れ線グラフ

両端を合わせて円に巻き付けます (つまり、0% = 350 および 100% = 350)。

ポイント間のスムーズなパスを作成するには 3 次ベジエが必要なように感じますが、それだけで十分です。これは、私が通常使用するベジエ関数です。

私は何か意味がありますか?より良い画像が見つかりません。(たぶん名前が分からないからだと思います。)

編集1:それがどのように見えるかを描いた私の試み:http : //www.sketchtoy.com/26800595(アニメーションは忘れてください、それがsketchtoyの仕組みです)

編集 2: quadraticCurveTo() を使用してフィドルのデモを更新しましたが、それだけでは十分ではありません。曲線がポイントを通過するようにするには、ベジェ曲線と2倍の曲線が必要です。スプライン補間についてと同様ですが、できればもっと簡単です。

4

1 に答える 1

1

グラフの関数式がある場合は、円オフセットを使用して座標を極座標に変換するだけでプロットできます。これらのマッピングを使用して、「x」を角度として扱います (min_x は角度「0」、max_x は角度「360」、またはコンピューターの場合は「2π」)。

φ (the angle) = map x from interval (min_x,max_x) to interval (0,2π);
a (the amplitude) = map y from (min_y,max_y) to (0, max_distance);

関数をプロットする x/y 座標は次のとおりです。

nx = a * cos(φ);
ny = a * sin(φ);

また、グラフのプロットについては、値のルックアップ テーブルを作成することを強くお勧めします。これにより、元の x/y 値を常に計算する必要がなくなります。関数がなく、一連のポイントだけがある場合、この LUT は事実上既に存在します。

LUT の x/y 座標を変換した後、それらのそれぞれを通る見栄えの良い曲線を描くことは、ベジエではなく Catmull-Rom スプラインの仕事である可能性があります。なぜなら、Catmull-Rom スプラインは使用する各ポイントを通過するのに対し、ベジエ曲線はそうではないからです。 t、開始点と終了点を除くすべてのポイントを回避するため、やりたいことには適していません。

于 2013-03-29T16:29:44.620 に答える