2017-11-01 23 views
1

三角形の点の配列int[][]を与え、3点ごとに三角形を表すように、個々の三角形複数のポイントがマークされています。Delaunay三角測量のすべての三角形から1つの頂点のみをマークする方法

私はすべての三角形が1つのポイントだけ上昇し、他のポイントは両方ともz値が0になるように各ポイントにz値を追加しようとしています。私が平らな三角形を必要としない理由はなぜなら、通常の角度は常に光に面しているので、私の光源は三角形にほとんど影響を及ぼさないからです。

ここに動画があります。マウスカーソルは上の光源を表します(マウスが照明に影響を与えない最初の部分は無視します)。あなたは、私はちょうど三角形の重心にポイントを追加しようとしたすべてのポイントが0

https://streamable.com/w5spi

のZ値を持っているので、三角形のいくつかは彼らに一定の色を持って気づくでしょうし、 3つの新しい三角形が作成されますが、三角形の間隔の均一性が失われます。

答えて

2

Delaunayは深度を生成するための簡単な手段を提供していないので、Simplex noise関数とDelaunay三角点の組み合わせを使用することをお勧めします。

このようにして、2つをお互いに「マップ」して、シンプレックスノイズ関数から正規化されたDelaunay三角点の下の値を抽出し、それをZ /標高に使用します。

Illustration
原理:正規化されたX/Y位置を使用してSN機能を介してドロネー、抽出Zから三角形の点を正規化します。

JavaScriptには、シンプレックスノイズimplementationsが多数あります。 3Dバージョンは、特許に記載されている技術を使用する場合は、patent attachedとなります。 3Dが必要な場合にはOpenSimplex noiseを参照してください。npm - この場合、2Dバージョンでは十分でしょう。

+1

シンプレックスノイズを使用すると、ポイントにランダムな整数を割り当てるだけでなく、より自然なz値が生成されるようです。私は[open-simplex-noise](https://www.npmjs.com/package/open-simplex-noise)を使用して終了しました。 – getmicah

関連する問題