4

この方法を使用してレベル サーフェス ビジュアライザーを開発しようとしています (これが標準的な方法なのか、それとももっと良い方法があるのか​​はわかりません)。

    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 つの範囲内ですべての一意の実根を検出して見つけることができますか? または、レベル サーフェスを生成/視覚化するためのより良い方法はありますか?

4

3 に答える 3

2

私は自分の問題の解決策を見つけたと思います。もう少し調査を行ったところ、レベル サーフェスは等値面と同義であることがわかりました。したがって、理論的には、マーチング キューブ メソッドのようなものが機能するはずです。

于 2011-01-12T22:35:33.607 に答える
2

マーチング キューブ アルゴリズムの例が必要な場合は、こちらをご覧ください。

http://stemkoski.github.com/Three.js/Marching-Cubes.html

(グラフィックには JavaScript/Three.js を使用します)。

理論の詳細については、次の記事をご覧ください。

http://paulbourke.net/geometry/polygonise/

于 2012-08-27T20:41:30.163 に答える
1

簡単な方法で、

2D: color = floor(q*f(x,y)) で (x,y) をグレースケールでプロットします。ここで、q は任意の係数です。3D: プロット (x,y, floor(q*f(x,y))

実質的に等価な関数の高さは、同じ水平面上に表されます。

レベル カーブを取得する場合は、2D メソッドとエッジ検出/領域分類を使用して、同じレベルのポイント (x、y) を取得できます。

于 2011-01-13T20:17:13.880 に答える