0

間に滑らかな線を引きたいポイントのリストがあります。私は描画にRVGライブラリを使用しているので、ポイントからSVG文字列を取得できれば幸いです。調べてみると、Catmull-Romがおそらく使用するアルゴリズムであることがわかりました。

KamelopardおよびRubyvisライブラリでいくつかの実装を見つけましたが、私のポイントリストからそれらの使用方法を理解できませんでした。

したがって、問題は、(x、y)ポイントの配列を取得し、それらからCatmull-Rom補間SVG曲線を取得するにはどうすればよいかということです。

4

1 に答える 1

1

Catmull-Rom はおそらく開始するのに適した場所です。私は最近 Kamelopard バージョンを再実装しました

行列の乗算を理解していれば、かなり簡単です。描画しているパス上のポイントごとに 1 回、何度も評価する必要がある行列方程式ができあがります。制御点 A、B、C、および D があり、B と C の間に曲線を描きたい場合、A、B、C、および D が行である行列を作成し、それを次の式に挿入します。私がリンクした論文のトップ。リストの最後のマトリックスになります。知っておく必要があるその他の値は、0 から 1 の範囲の "u" と、スプラインの "張力" である "T" です。方程式を複数回評価し、そのたびに u をそのドメイン全体でインクリメントします。張力は 0 から 1 の間で自由に設定でき、スプラインのカーブの鋭さに影響します。0.5 が一般的な値です。

たとえば、リストの最初の 2 つのコントロール ポイントまたは最後の 2 つのコントロール ポイントの間の曲線を評価しようとしている場合、行列の作成に問題があることがわかります。評価するポイント。このような場合、必要に応じて最初または最後のコントロール ポイントを複製します。

于 2013-06-18T18:03:58.490 に答える