18

次の形式の 2D 高さマップがあります

06 36 39 42 43 55 ... 
37 40 43 43 45 46 ...
40 43 44 45 46 48 ...
44 44 46 47 48 50 ...
41 44 45 47 48 48 ...
...

そして、それをグリンベースの輪郭形式に再マップする必要があります(さらにスプライトにマップできるようにするため)

. . . . | . . 
. . . . \ . . 
. . . / / . . 
. . . | . . . 
. . . | . . . 
. / - / . . . 

ここでは、平坦なエリア、まっすぐな崖、崖の角 (それぞれ 2 つの異なる可能性を表しています).を意味します。|-/\

標準的なマーチング スクエア アプローチを試してみましたが、隣接するケースに過負荷がかかるため、3 つの近傍のみをサンプリングすると、かなり多くの問題が発生することがわかりました。(下の余分な場違いなまっすぐな崖に注意してください)

. . . . | . \ 
. . . . \ \ .
. . . / / - .
. . . | - . .
. . . | . . .
. / - / . . .

私が望むのは、この種の処理に役立つアルゴリズム/アプローチへの参照です。ある種の深さ優先検索を使用した輪郭ウォーキングがオプションであることは知っていますが、まだ試していないため、最後の手段として残しておくことをお勧めします。一部のフィーチャの表現の問題もあります。たとえば、1 要素の厚さの崖の尾根を含めるか、単に無視するかです。もう 1 つのオプションは、生成された輪郭を通過させ、それらを変更して滑らかに適合させることですが、これは本当にハックに思えます...

4

1 に答える 1

1

補間/ベスト フィット関数を作成します。モデルは、次数が「ちょうどいい」2D 多項式 (xおよびy) である必要があります。高すぎてすべてがオーバーフィットすることはありませんが、低すぎて詳細が失われることはありません。

を設定することで、スライスできる数学関数ができましたf(x,y) = height。この方程式の解は等高線です。解析的に解けるかどうかに応じて、2 つの選択肢があります。

  • 分析的に解くことができないと仮定しても、曲線の近似を簡単にトレースできます。
    • の場合はグリッドを白に、 の場合はf(x,y)>height黒に着色することから始めf(x,y)<heightます。ほぼ <1 グリッド離れた範囲内で黒から白への遷移があるすべての「遷移」領域に注意してください。これらは、輪郭が配置される正方形です。
    • トランジション スクエアをランダムに選択し、おおよそ <1 グリッド半径内で を検索f(x,y)==heightして、輪郭上のポイントを見つけます。その時点 (グリッド上である必要はありません) で、勾配∇f(x,y) = (∂f/∂x, ∂f/∂y)(「上りベクトル」) を計算します。いずれかの方向に 90 度回転させます: (∂f/∂y, -∂f/∂x): この方法は輪郭に沿っています。非常にゆっくりと (グリッドよりもはるかに小さいステップ サイズで) 輪郭をトレースします。これにより、輪郭を一周します。
    • このトレース中にグリッドボックスを通過するたびに、勾配の平均がどの方向を指しているかなどに応じて、{|、-、/、} のいずれかのラベルを付けます。(まだラベルが付けられていないかのように、近隣にもラベルを付ける必要.があります。[*] を参照してください。)
    • その後、まだトランジション グリッドボックスが残っている可能性があることに注意してください。たとえば、丘が 2 つある場合、1 つの円が塗りつぶされますが、輪郭は 2 つの円になります。上記の手順を別のランダムな (ラベルのない) "遷移" グリッドボックスで繰り返します (これが [*] が必要な理由です。そうしないと、既に説明したスポットの近傍に固執する可能性があります)。ラベルのない「トランジション」グリッドボックスがなくなるまで繰り返します。
    • height等高線として描きたいレベルごとにこれを行えば完了です。
  • 円錐曲線の場合と同じように分析的に解決できる場合がありますが、これはおそらくそうではなく、この質問の範囲を超えています。曲線を解くことができれば、さまざまな手法を使用してそれを「グリッド化」できます (たとえば、パラメータ化してから、おそらく半分のグリッドのステップ サイズを使用して等高線に沿って歩き、最近傍に注目します)。

(コンターの 1 つが別のコンターとオーバーラップしている場合、コンターの高さの間隔が小さすぎます。特定のコンターに満足できない場合、一連の可能性 {-,|,/,} が小さすぎます。)

于 2012-04-06T03:32:26.587 に答える