この方法を使用してレベル サーフェス ビジュアライザーを開発しようとしています (これが標準的な方法なのか、それとももっと良い方法があるのかはわかりません)。
-
1. 任意の関数
f(x,y,z)=k(k は定数) と、x、y、および z の境界を取ります。また、2 つのグリッド パラメーター stepX と stepZ を取得します。
-
2. レベル曲線の問題に還元するには、zMin から zMax まで stepZ 間隔で繰り返します。そう
f(x,y,z)=k => f(x,y,fixedZ)=k
-
3. stepX で同じ手順を実行して、問題を次のように減らします。
f(fixedX, y, fixedZ)=k
-
4.
f(fixedX, y, fixedZ) - k = 0その方程式を満たす y のすべての値を求めます (ある種の根探索アルゴリズムを使用して)。
-
5. 生成されたすべてのポイントについて、それらをレベル カーブとしてプロットします (内側のループは、指定された z でレベル カーブを生成し、異なる z 値に対してレベル カーブのスタックが存在するだけです)。
-
6 (オプション)。レベル セットに属するこれらのレベル カーブ/ポイントからメッシュを生成します。
私が直面している問題は、ステップ 4 にあります。その方程式を満たす y の可能な値の数 (より具体的には、y の一意の実際の値の数) を事前に知る方法はありません。
また、プログラムを可能な限り一般的なものにしようとしているので、元の関数f(x,y,z)=kを平滑性や多項式などの制約に制限しないようにしていますが、k 以外はレベル サーフェスに必要な定数でなければなりません。
複数のルートがある場合でも、関数のルートを識別できるアルゴリズム (CAS/シンボリック解法を使用しない) はありますか? 領域全体で符号が変化しない可能性があるため、二分法がこれに苦労することは知っていますが、セカント/ニュートン法はどのように機能しますか? セカント/ニュートン法を使用できる関数のセットはどれですか?また、与えられた 2 つの範囲内ですべての一意の実根を検出して見つけることができますか? または、レベル サーフェスを生成/視覚化するためのより良い方法はありますか?