web-dev-qa-db-ja.com

二次ベジェ曲線を使用して、特定の範囲内にとどまる洞窟を生成します

私は、一連の2次ベジェ曲線を生成してそれらを接続し、1つのセグメントの終わりから次のセグメントの始まりまでの勾配を維持して、遷移をスムーズにするプロジェクトに取り組んでいます。問題は、パスはスムーズですが、画面から頻繁に外れる傾向があることです。

これが現在行われている方法:

P0 = new Point(0, gapStart);  
P2 = new Point(wallWidth, gapEnd);  
P1 = getAnchorPoint();

どこ:
GapStartは前の曲線のP2.yです
wallWidthは定数です
gapEndは、洞窟生成の唯一のランダムな側面です。曲線が終了するのはY値です。

GetAnchorPoint関数は、ポイント0と2を取得し、アンカーポイントを生成して、このセグメントの開始時の勾配が前のセグメントの終了時と同じになるようにします。

したがって、主な質問は、次の曲線に曲線が画面から送信されないようにするためのgapEndの値は何でしょうか。

言い換えると、次の曲線が安全になるように、gapEndの最小値と最大値を決定するにはどうすればよいですか?

さらに、これらの値が次の曲線を不可能にすることを妨げないことが重要です。つまり、次の曲線に、継続的な曲線の生成を可能にする可能な解決策がないことを許可できません。

洞窟生成プロセスの画像

4
Ethan Roseman

3次ベジェ曲線またはBスプラインのどちらかを使用する方が簡単だと思います。

キュービックベジェ曲線は2つの制御点で機能し、一方の勾配を他方に影響を与えることなく指定できます。 C1の連続性を強制するには、2つのコントロールポイントを並べるだけです。共通の曲線点からの距離を調整することにより、1対の制御点の重みを変更できます。

B-スプライン 一連の点を処理し、それらの谷(または近く)の曲線を補間します。一連のポイントがあると、操作がはるかに簡単になります。

1
Markus Jarderot