QuadTreeクラスを作成していますが、ネイバー検索を含める必要があります。私は、Cの実装を含むこのペーパーに沿ってフォローしています。(基本的にはC#に変換しています。)そして、2進数の操作があまり得意ではないため、問題が発生しています。私は次のことをする必要があります:
#100と#010が与えられたら、それらを組み合わせて#110を取得します。1が重なることはありません。今私がしているのは100と10を保存することです。それらを追加すると、110になります。
#011のような数値に対して左右の2進シフトを実行します。今、私は011を保存し、それに>>または<<演算子を適用していました。これは私に完全に間違った数を与えますが、奇妙なことに、一般的な四分木親を見つけるためにそれを使用したロジックはうまく機能していました。
与えられた#011と#001は、それらを合計して#100を取得します。現在、11と1を保存していますが、これは明らかにまったく機能しません。
上記と同じですが、+の代わりに-ビット単位の減算を実行します:)
AND、OR、およびXORを実行します。
したがって、現在、すべてを2進値のように見える整数として格納しており、数学はAND、OR、XOR、およびシフトに対して機能しているようです。数字は真ん中で狂っていますが、私は最終的に正しい答えを得ることができます。
私は今、2進数の値である整数値を格納する実装を試みていますが、何度も変換する必要があります。値の整数表現間で変換しているため、これは特に苦痛です。 2進数自体の数値と文字列表現の。コードの2行ごとに新しい文字列を作成することは、パフォーマンスの悪夢になります。
C#で2進数を操作するための基本的な戦略をお勧めできますか?
PS私はこれらの数の整数表現を見る必要はありません。#010 == 2であることは本当に気にしません。私がしなければならない作業は、それを#010の話の終わりと見なします。
うまくいけば、これは私の元の投稿よりも明確です!