問題タブ [octree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - バイト内の設定されたビット位置を見つける
この問題に遭遇したとき、nVidia (「効率的なスパース ボクセル オクトリー」)の人々がボクセルのことを行っていたように、スパース オクトリーの実装を作成するのに苦労していました。
octree のリーフがどこにあるかを示す byte 型 (8 ビットのみ) のビットフィールドがあります (1 はリーフを意味し、0 はリーフがないことを意味し、8 つのノードが接続されている --> 8 ビット)。私が今やりたいことは、葉の位置の配列を返すことです。私の現在の実装では、while ループを使用して、LSB が設定されているかどうかを確認しています。入力はその後 1 シフトされます。だからここに私がそれを行う方法があります:
これは見栄えがよくなく、気になる点が 2 つあります。
- この while ループは for ループを模倣しています
- 結果の配列は 8 つの値よりも小さくなる可能性が高いですが、サイズ変更にはコストがかかります
結果[2,4,6]
は 42 のようになると思い(0010 1010)
ます。
まだ読みやすい、よりエレガントなソリューションを提供できる人はいますか?
結果
以前に実装した octree リーフ カウントの関数を使用して、配列を適切なサイズに設定しています。
java - Java - 3D Arrays のトリム メソッドが動作する
オクトリーで使用する 3D 配列をトリミングするために、このメソッドを作成しました。トリミングされた配列をゼロでいっぱいに戻した後、私が理解できない奇妙な理由があります。それがもので満たされるべきとき。
よりよく説明するコードは次のとおりです。
印刷マトリックスメソッド(ゼロのみを出力して、存在するかどうかを確認するために使用されます)(存在するべきではありません):
トリミング方法 (x、z、y はトリミングを開始する場所を示すためのもので、3D 配列を Octree の 8 つの部分にトリミングできます) (注: ボクセル配列にゼロが含まれないことを意味する自殺は決して起こりません):
今、私は想像力の範囲でJavaの初心者ではありませんが、なぜこれが機能しているのか理解できません。
search - 3D半径検索のkd-treeとoctree
ポイントのいくつかの半径検索、kd-treeまたはoctreeを実行するのに適した構造を見つけようとしていますか? この質問ですでに言及されていましたが、答えはありませんでした。オクトリーはリーフのサイズが固定されているため、アクセスする必要があるブランチをすでに計算できますが、kd-tree の場合は、半径がカバーされるまで繰り返しブランチにアクセスする必要があります。
geometry - キューブが球の内側にあるかどうかをテストする - 最速の方法
8 つのコーナーが球の内側にあるかどうかを個別にテストするよりも、軸が整列した立方体が球の内側にあるかどうかを確認するより速い方法はありますか?
立方体の葉が交差しているか、球体に囲まれているかどうかをチェックするオクツリーを歩いています。ここで交差点の方法を見つけました: Cube sphere Intersection Test?
囲い込みをテストするためのより効率的な方法を見つけたいと思っていました。最終的に必要なのは、次の 3 つの状態のいずれかを返すテストです。
- 球の外側
- 交差球
- 球の内側
立方体は 2 点で定義され、球は中心点と半径で定義されます。
c++ - C ++分岐再帰構造?
私は次のものを持っています。構造体はプロトタイプ化されているため、正常にコンパイルされます。
私はoctreeのことを書こうとしています。私がやりたいことは、再帰関数を使用して、特定のポイントに到達するまで各ノードにノードを追加し続けることです。その時点で、関数は別のノードを追加するのではなく、リーフを追加します。可能であれば、ノードまたはリーフが追加されていない場合は、メモリを使用したくありません。
この状況ではテンプレートが役立つかもしれませんが、それらの使用方法がわかりません...
自分のことをうまく説明できていないと思います。これが図です:
私が求めていることが不可能なのか、理解するのが難しすぎるのか、それとも単純にばかげているのか、私にはわかりませんが、自分でそれを理解することはできません. うまく説明できなくてすみません。
C++98/03 (VC++2008) を使用していますが、C++11 を使用できません
どんな助けでも大歓迎です。
追加情報:
より良い説明: データの配列の配列の配列の配列が必要です。これにはメモリ使用量が非常に重要です (私は数百万の要素を保存しているので、1 バイトが大きな違いになります)。各配列にはさらに 8 つの配列を含めることができますが、それを使用する必要があるまでは、各配列がメモリを使用しないようにしたいと考えています。それは一種のオクトリーです。
その他の追加情報:
これが別の図です。少し大きいので、右クリックして選択する必要があるかもしれませんOpen image in new tab
。
私が望んでいないのは、すべてのボックスがより多くのノードとリーフ データの両方のためにメモリを予約する「茶色」(赤 + 緑) のボックスです。それは私のニーズに対してあまりにも多くのメモリを使用します。
これは基本的に私が達成しようとしているもので、簡単にするために 2D として描かれています。