問題タブ [z-order-curve]
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++ - ビットを効率的にシャッフルするにはどうすればよいですか?
偶数インデックスが下位バイトに配置され、奇数インデックスが上位バイトに配置されるように、16 ビットの符号なし整数をシャッフルする必要があります。
現時点で私のコードは次のようになります。
個々のビットを単に抽出してシフトするよりもエレガントなソリューションがあるのだろうか?
c++ - フロートを使用した 2D ポイントからのモートン インデックス
次のような 2D ポイントがあります。
整数をどうするかはわかっていますが、浮動小数点数を使用する必要があります。また、特定のグリッド サイズのスケーリングも避けたいと考えています。
ウィキペディアの関連ページ:
latitude-longitude - 緯度と経度をモートン コード (z オーダー カーブ) に変換する方法
インターネットで検索したところ、緯度と経度をモートン コード (z オーダー カーブ) に変換する方法に関する情報が少ししか見つかりませんでした。リンクから、 2つの整数をモートンコードにする方法を知っています。しかし、緯度や経度などの float 値がある場合、float 値を int に変換するにはどうすればよいですか? 次に、int を Morton コードに変換できます。たとえば、C# コード:
ここでは、どちらを選択すればよいかわかりません。手伝っていただけませんか?「BitConverter.FloatToInt32Bits」のようなメソッドが見つかりませんでした。今のところ、その理由はわかりません。
Upate 1:ここで答えが見つかりましたが、答えがよくわかりません。
z-order-curve - 範囲検索でMorton Order(zオーダー曲線)を使用するには?
範囲検索でモートン順序を使用するには? wikiより、「範囲検索に一次元データ構造で使う」の段落で、
それは言う
「照会される範囲 (x = 2、...、3、y = 2、...、6) は点線の長方形で示されます。その最大の Z 値 (MAX) は 45 です。この例では、値はZ 値が増加する方向にデータ構造を検索すると、F = 19 が検出されます。......BIGMIN (例では 36).....BIGMIN と MAX の間の間隔でのみ検索します...."
私の質問は次のとおりです。
1) なぜFは 19 なのですか? なぜFは 16 であってはならないのですか?
2) BIGMINの入手方法は?
3) 範囲検索の方法を示す Web ブログはありますか?
c - Bit Twiddlings 64 ビットを使用した 2D 空間充填曲線
ニュートラル(単純なシフト)、モートン(バイナリマジックナンバー)、およびヒルベルト(モートンから)とは異なり、 Bit Twiddling で計算(インデックス)できる空間充填曲線はありますか?encode(xy2d)/decode(d2xy) の例はありますか?
c - 2dモートンコード64bitデコード機能
最初の関数は、[x, y] を 64 ビット幅のモートン コードとしてエンコードします。x と y は、バイナリ マジック ナンバーによるインターリーブ ビットを使用した 32 ビット幅の整数です。
逆関数とは何でしょう?
c - 2Dモートンデコード機能 64bit
最初の関数は、[x, y] を 64 ビット幅の Morton コードとしてエンコードします。x と y は、バイナリ マジック ナンバーによるインターリーブ ビットを使用した 32 ビット幅の整数です。
逆関数とは何でしょう?
c - unit64_t を入力として使用する 3D でのモートン順序付け
Morton コードを使用して、指定された (x,y,z) の一意のエンコードを生成しようとしています。ここで、x、y、z は倍精度浮動小数点数です。型キャストを使用して浮動小数点数を整数に変換し、それらの整数に対してモートン順序付けを実行できると思います。たとえば、次のC++
コードを考えてみましょう。(私は今では同じことをする方法を知りませんC
)
リーミングについても同様x,y
です。「再解釈された」値を取得したら、それらを Morton コーディングのサブルーチンとして使用したいと思います。
上記の型キャストを確認したところ、逆にうまくいきました
Morton コーディング用のコードをいくつか見つけました。このフォーラムでもいくつか見つけましたがint64_t
、3D で使用されているものはありませんでした。int64_t
したがって、整数 をエンコードおよびデコードする方法について、フォーラムの専門家の助けが必要になります。
次のコードをリバース エンジニアリングすることに成功しました。残念ながら、いくつかのバグがあり、デコード部分を実行したときに適切な数値を取得できません。何が間違っているのかを理解するための助けをいただければ幸いです。
2D モートン コード エンコード/デコード 64 ビット.
これを行っているのは、座標を 3D ポイント (x、y、z) として保存するのではなく、単一の長整数として保存し、必要に応じてデコードしたいからです。そうすることで、座標ストレージ配列のサイズを 3 分の 1 に減らします。
arrays - Morton エンコーディング Z-indexing スペース使用量
Z インデックスを計算するためにいくつかのアルゴリズムをテストしたので、少し混乱しています。(8, 8, 8) の場合は 3584 が得られ、(7, 7, 7) の場合は 511 が得られます。これは正しいです。問題は 8*8*8 = 512 ですが、z インデックスは 3584 です。つまり、1 次元配列を使用して z インデックスで格納すると、より多くのスペースを使用することになり、空になります。配列のスロット?同様に、7*7*7 = 343 で、これは 511 よりも小さいです。ウィキペディアの z-indexing/Morton エンコーディングのページを見ると、x と y のインデックスが 0 から始まる 8*8 の 2 次元の例が見つかります。ただし、最大の z-index は 111111 であり、これは 63 であり、0 から数えると正確に 64 番目の要素であるため、64 要素を格納するために必要以上のスペースを使用しません。ここで何か問題がありますか?
ありがとう