問題タブ [spline]
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.
python - ベジエ曲線と線分との交点
私は、新しいゲームごとにランダムだが見栄えの良い「海」を生成する必要がある Python (pygame を使用) でゲームを作成しています。長い検索の後、 padlib.pyで定義されているベジエ曲線を含むアルゴリズムに落ち着きました。padlib によって生成された曲線がいつ線分と交差するかを把握する必要があります。
強引な方法は、padlib によって生成された一連の近似線分を使用して答えを見つけることです。しかし、より良い答えは分析的に見つけられると思います。スプライン セグメントは数十しかありません。それらの検索は、数千の線分よりも高速です。
少し検索すると、次のようになりました。ベジエ曲線 -> Kochanek-Bartels スプライン-> 3 次エルミート スプライン
最後のページで、次の関数を見つけました。
p (t) = h 00 (t) p 0 + h 10 (t) m 0 + h 01 (t) p 1 + h 11 (t) m 1
ここで、p (t) は実際には点 (2 次元ベクトル) であり、h ij (t) 関数は 3 次多項式、p 0、p 1、m 0およびm 1は padlib コードから取得できる点です。
ここで、問題の解決策はp (t) = u + v * t 1であることがわかります。ここで、 uとvは線分の終わりです。
ただし、分析ソリューションを作成することは私にはできません。ここで誰かが既存のソリューションを知っていますか? または、方程式を解くのを手伝ってもらえますか?
r - Rで配列を滑らかにするにはどうすればよいですか?
行と列のグリッドの値データを表す R の 2 次元配列があります。次のようになります。
これらの値を「滑らか」にしたい。この概念実証の時点では、一般的な平滑化関数を使用しても問題ありません。私は現在、smooth.spline
関数を使用しようとしています:
(単純に)呼び出すことによって
これを実行すると、次のエラーが発生します。
Smooth.spline(a) のエラー: 少なくとも 4 つの一意の「x」値が必要です
私の配列には各次元に 4 つ以上の一意の値があるため、入力データを適切にフォーマットする方法がわからないと考えています。誰かが私にこの種のことへのいくつかの指針を与えることができますか? のような関数の例はsmooth
、1 次元のベクトルで動作するように見えますが、2 次元の世界に外挿することはできないようです。私は R の初心者なので、用語の誤用をここで訂正してください。
python - wxPython で 4 点を指定してベジエ曲線を描くにはどうすればよいですか?
DCがあらゆる種類の曲線をサポートしているのはスプラインのみであるように私には思えます。ベジェ機能を追加するライブラリはありますか、またはベジェ曲線をスプラインに変換する方法はありますか?
python - Python 最小二乗自然スプライン
加重最小二乗を最小化する自然なスプラインに適合する数値パッケージを見つけようとしています。
不自然なスプラインに必要なことを行うscipyのパッケージがあります。
graphics - 3 次ベジエ曲線の最も近い点は?
平面内の任意の点 P に最も近い 3 次ベジエ曲線に沿って点 B(t) を見つけるにはどうすればよいですか?
c# - Catmull-Rom スプラインを使用して円を作成する
catmull-rom スプラインの制御点を入力すると、スプラインに沿って実行される点のリストが返されるクラスがあります。
円を作成するには、どの点を入力する必要がありますか?
c++ - (種類)C++でのコンテナの要素の回転とスライス
私は(x、y、zおよび他のいくつかの非ポインター型)std::vector
を保持するを持っています。Point struct
これらの点は、bスプライン曲線を描くための制御点です。曲線を描くのに問題はありませんが、曲線を閉じる必要がある場合に問題が発生します。これには、特定の順序でコントロールポイント(コンテナ内にすでに存在する)を追加する必要があります。
たとえば、5つのコントロールポイントがある場合
次のような5つのシーケンスを取得する必要があります。
最初はと一緒に行きましstd::rotate
たが、それが私が探していたものではないことに気づきました。
これを実装するのに問題があります。私が得た最高のものは、C ++で動作しないバージョンです(これが失敗する理由は問題ではありません。ここにスニペットがあります)。
これを行う方法はありますか?多くのネストされたforループを使用して実装できることはわかっていますが、それを避けて、よりエレガントなものを探しています(単語が適合する場合)。
前もって感謝します。
math - 数学: 時間制約のあるエルミート曲線を使用してディスプレイスメントをイーズ イン、イーズ アウトします。
0 から x (1 次元でのオブジェクトの位置) までを時間の経過とともに補間するメソッドを作成しようとしています。最初は加速し、最後は減速 (イーズ アウト/イーズ イン) を使用します。および加速と減速の期間が提供されます。モーションは慣性効果を再現する必要があり、非線形部分のエルミート曲線を検討しています。
誰かがそれを行うコードの一部を教えてもらえますか? エルミート曲線を積分する方法がわからないため、加速部分または減速部分でどれだけ移動するかがわからず、直線の速度がどうなるかわかりません部分。
ありがとう。
私の質問を説明するための参照。
編集:
- 開始速度と終了速度は null で、現在の時刻もメソッドのパラメーターの一部です。署名を更新しました。
- 基本的には、距離 d を一定の速度で移動することを想像すると、合計の持続時間が得られます。次に、同じ期間を維持しながら、加速フェーズと減速フェーズを追加します。したがって、決定する未知の新しい巡航速度が得られます (エルミート フェーズでは、置き換えられた線形フェーズよりも移動が少ないため)。おそらく、エルミート フェーズで失われる移動の量は、同じ期間の直線的な移動と比較して、曲線の上部と下部の領域の比率であり、専門家ではないアイデアにすぎません。
編集: Roman と Bob10 は、完全に機能するソリューションを提供しています。Roman のコードを実装しました。ありがとうございます!あなたの完璧なサポートと詳細な解決策に感謝します。長い検索と試行を節約できました。
c# - double 配列の Akima 補間
double の配列があると仮定すると、 Akima 補間を使用してこのシリーズをサンプリングするのに適したアルゴリズムは何ですか? 私は愚かすぎて、その数学的な記述をコードに変換できません。