2

SOに関する 2 つの個別の質問を通じて、一般的な問題にアプローチしようとしまし。これらへの回答は、私が今投稿しているより大きな問題の再定式化に私を導きました.

私が達成しようとしているのは、(Rで)一連の(単調ではない)制御点が与えられた場合、制御点によって与えられたパスに沿ってbスプラインを描く方法です。B-スプラインは両端で固定する必要があります。これは純粋にグラフィカルな目的のためです。

注: コントロール ポイントに基づいて値を予測しようとしているわけではありません。と の組み合わせを使用すると、predictB スプラインを制御パスに合わせる」で提案されているように、制御点 (点ではない) を通過しようとする ab スプラインが生成されます。特にスプラインがクランプされるように設定または設定されている場合、このアプローチ過剰適合につながり、スプラインはすべての制御点を通過します。lmbsdfknots

最終的に、このアプローチは数百または数千の個別のコントロール ポイント セットに適用されるため、アルゴリズムの効率が重要な要素になりますが、現在はそれを実現する方法を探しているところです。

おもちゃのデータ(リンクされた質問と同じ):

path <- data.frame(
    x = c(3, 3.5, 4.6875, 9.625, 5.5625, 19.62109375, 33.6796875, 40.546875, 36.59375, 34.5, 33.5, 33),
    y = c(0, 1, 4, 5, 6, 8, 7, 6, 5, 2, 1, 0)
)

これはすべて、R で階層エッジ バンドルを計算するためのものです。

編集:

さて、内部で使用されている基本的な b-spline 実装にアクセスできないようです (または、十分に努力しなかった可能性があります)。とにかく、Jason Yu-Tseh Chiの de Boor アルゴリズムに触発された独自の Rcpp ベースの実装を作成することになりました。これの利点は、複数のパスを一度に構築できるようにベクトル化できることでした。これは、今後の CRAN パッケージ (hierarchicalSets) の一部になりますが、当面の間、興味を示している方と喜んで共有します (ここに投稿するには長すぎます)...

アップデート:

これに興味のある方は、スプライン描画がggforce拡張パッケージの ggplot2 の geom/stat 拡張として実装されます。

4

0 に答える 0