問題タブ [catmull-rom-curve]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - CatmullRomSplines とその他の滑らかなパス
2 次元平面上のオブジェクトをいくつかの制御点で定義された滑らかな曲線に沿わせようとしています。私が見つけたものから、Catmull-Rom-Splineを探しています。
私は自分のプロジェクトで LibGDX を使用しており、独自の Catmull-Rom-Spline 実装がありますが、Catmull を実装するドキュメントやその他のソース コードを見つけるのに苦労したため、それがどのように機能するかについて頭を悩ませています- LibGDX を使用した Rom-Splines。
LibGDX Catmull-Rom-Spline 実装の説明、または Catmull-Rom-Splines または別の方法を使用して制御点を実装するスムーズなパスを実装する別の方法を探しています。私が探しているのは、パスを生成し、そのパス上のポイントの x 座標と y 座標を返す機能だけです。誰かに提案や指針があれば、それをいただければ幸いです。ありがとう。
opengl - 線形補間による高速 Catmull-Rom テクスチャ ティルタリングの実行方法
GL_LINEAR を使用した高速な 3 次補間を紹介する記事をいくつか読みました。
- [1] http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter20.html
- [2] http://0xef.wordpress.com/2013/01/12/third-order-texture-filtering-using-linear-interpolation/
[1] は正誤表が多いので、形式を理解したい場合は [2] を読むことをお勧めします。
どちらもこの方法の制限について言及しています。GL_LINEAR でフィルタリングされたテクスチャの場合、次のリレーションは0 <= b/(a+b) <= 1 の場合にのみ保持されます
a*f(i, j) + b*f(i+1, j) = F(i+b/(a+b), j)
ここで、f は元の画像データ、F は OpenGL によって線形補間されたテクスチャです。
これが問題です。[1] は、この方法が Catmull-Rom バイキュービックにも適用できると述べています。
この方法は、Catmull-Rom スプラインなどの補間フィルターにも適用できます。
ただし、負の部分を含む Catmull-Rom 重み関数では、条件 (0 <= b/(a+b) <= 1) が満たされないことは明らかです。実際、同じロジックで Catmull-Rom を実装しようとしましたが、ぼやけた画像しか生成しません。
[1] と [2] の方法を Catmull-Rom 補間に適用する特別な方法はありますか? または、Catmull-Rom 用に 16 テクセルすべてを取得する必要がありますか?
libgdx - CatmulRomSpline libgdx の制御点の最小数
libgdx のCatmullRomSplineクラスを使用して、3 点を通る滑らかな曲線を作成しています。基本的に、2 つのプラットフォームの間にコインを湾曲したパスに配置したいと考えています。そのために、次のアルゴリズムに従いました
最初のプラットフォームの終点を最初のコントロール ポイントとします。
最初のプラットフォームの上端と 2 番目のプラットフォームの上端の中間点を取り、y 方向に少し高さを追加し、この点を 2 番目のコントロール ポイントとします。
上のスタート ポイントを 2 番目のプラットフォームとして、3 番目のコントロール ポイントとします。
これらの 3 つの制御点を使用してコイン生成のためのスムーズなパスを作成しようとすると、t が使用する値は 1 つだけになります (CatmullRomSpline は bw 0 と 1 を変化させる必要があるパラメーターとして float 値 t を使用します)。
私が欠けているものはありますか?より多くの制御点を提供する必要があるということですか?
c# - スプライン曲線に沿って移動するように Unity ゲームオブジェクトを更新するには?
こんにちは、
8 つの制約付きランダム値を指定して、Cubic CatMull-Rom スプラインに沿って移動するゲーム オブジェクトを Unity に実装しようとしています。3 次 Catmull-Rom 曲線上のポイントを返す関数ComputePointOnCatmullRomCurveを実装しました (0 から 1 までのスカラー 'u' と、補間に使用する 4 ポイントを示す segment_number が与えられた場合)。
GameObject をスムーズに動かすための更新機能の実装に問題があります。私は現在、更新ごとにComputePointOnCatmullRomCurveを呼び出しており、そのたびに segment_number をインクリメントしています。次に、ゲームオブジェクトの位置が関数の結果に設定されます。
ただし、これは非常に速く動くゲームオブジェクトにつながります。Update 関数が間違っていると思いますが、補間関数によって出力されているポイントに関してゲームオブジェクトを移動する方法がわかりません。
誰かが私が間違っていることを説明したり、例を提供したり、例へのリンクを提供したりできる場合は、非常に役立ちます!
曲線上の点を計算する関数:
更新機能:
変数:
ありがとう!
マット
r - R で 2D スプライン曲線を計算する
xy 座標のシーケンスを通過するベジエのようなスプライン曲線を計算しようとしています。例はcscvn
、Matlab の関数からの次の出力のようになります ( example link )。
(もうメンテナンスされていない)grid
パッケージがこれを行うために使用されていたと思います ( grid.xspline
function?) が、アーカイブされたバージョンのパッケージをインストールできず、私が望むものと正確に一致する例が見つかりません.
パッケージも有望に見えますが、bezier
非常に遅く、完全に理解できません。
ご覧のとおり、終了値以外のポイントを通過していません。
ここでいくつかのガイダンスをいただければ幸いです。
java - libgdx で終点と始点を指定して CatmullRomSpline を描画する
したがって、私の目標は、これに似たスプラインを描くことです(線が各ポイントを通過する場所):
ただし、スプラインはループします (終点 2 から始点に戻ります)。
catmullromspline の「連続」ブール値を変更してみましたが、画面の中央にドットしか描画されませんでした。
線画も最後の点に到達した時点で終了しましたが、始点と終点で線がまだ曲がっていたので、結果は醜いものでした。
ソース コードを隅々まで調べましたが、ループを防止できる関数は見つかりませんでした。
そして、私の知る限り、ベジェ スプラインはすべてのポイントを通過するわけではありません (ポイントの近くを通過するだけです)。
それで、私は何をすべきですか?
これが私のコードです:
matrix - Chordal Catmull-Rom スプライン
サイド プロジェクトで Catmull-Rom スプラインを動作させることに取り組んでいますが、必要なことを実行するのに苦労しています。次の 2 つの実装を試してみましたが、どちらもうまくいきませんでした。また、それらのコードに関連するコードのエラーを追跡できませんでした (テスト済みであると想定する必要があります)。私は彼らを「ABC」ソリューションと呼びます:
https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline
次に、次のソリューション(「マトリックス」ソリューションと呼んでいます)を実装し、編集されたバージョン3の投稿を使用して機能しました: https://www.opengl.org/discussion_boards/showthread.php/159518-catmull-rom-スプライン
ただし、このマトリックス ソリューションは、マトリックスに組み込まれた 0.5 'a' 値を使用して Catmull-Rom を実装するだけです。Chordal を機能させたいので、'a' == 1 が必要です。
ABC バージョンの私の解決策が問題を引き起こしていたので、ここ ( http://algorithmist.net/docs/catmullrom.pdf ) のマトリックスを使用して、独自の「a」を渡そうとしました。元の 0.5 コードに続いて、ユーザー指定の 'a' を渡す変更済みコードを次に示します。
元のコード:
変更されたコード:
これはもちろんうまくいきません。しかし、私はその理由を見ていません。PDFの4ページ目の下部に、「a」が含まれるマトリックスが表示されます。上記の変更されたコードでそれを置き換えてトリプルチェックしましたが、スプラインが台無しになっています。それは私に同じ答えを与えるべきだった。二重に紛らわしいのは、5 ページの彼の結果がその結果の行列を取り、それに 0.5 を掛けると、行列のエントリからすべての /2 が削除されることです。最終的なマトリックスはこれらの値を使用しますが、4 ページの元のマトリックスは 0.5 * マトリックスではなく、単なる「マトリックス」です。この 0.5 が勝手に追加されたのはなぜですか? また、それがないとすべてが壊れてしまうのはなぜですか?
とにかく、誰かが私の方程式で何が間違っているのか知っていますか? この行列形式を使用して、独自の 'a' を 0 ~ 1 から渡して、一様スプライン、求心スプライン、弦スプラインを作成できますか? それとも ABC 形式を使用する必要がありますか?
前もって感謝します!