コンテキスト:私はSpigot(Minecraftサーバープラグイン)用のプラグインを開発中です。指定された座標を含む領域を見つける
複数の領域を複数の目的で定義したいと考えています。あなたが見ることができるように
Regions
Region1:
P1:
X: 0
Y: 0
Z: 0
P2:
X: 1
Y: 1
Z: 1
Region2:
P1:
X: -1
Y: -1
Z: -1
P2:
X: 2
Y: 2
Z: 2
、私は2点の反対の座標で領域を格納している:私はこのような設定ファイル(YAML)に格納します。
私は、与えられた座標を含むすべての領域を配列に格納することができるアルゴリズムを試してみようとしています。例えば
、私が今やっている何を(0,0,0)
=>[Region1, Region2]
と(2,2,2)
=>[Region1]
は次のとおりです。
- 人口X座標かどうかのチェックすべての領域を持つ配列
- があります領域を定義する2つのX座標の間
- そうでない場合、配列から領域を削除します。 trueの場合、2に移動し、Z座標を確認し、その後、Y.
このソリューションは、いくつかの領域(20を超えない)のために実行可能なようだが、これがトリガされるイベントで使用されますので、 1秒に何回も、より多くの地域に対応し、より迅速に対応できる優れたソリューションでこれを実現したいと考えています。
私はData structures that can map a range of values to a key?を見ましたが、私の地域は重複する可能性がありますので、この方法では使用できません。
ご存知ですか?
Worldedit/Worldguard APIは使用しませんが、「汎用」Java APIは問題ありません。
kdツリーのかもしれません良い選択肢になります。チェックアウト[このような質問](http://stackoverflow.com/questions/15827012/multi-dimensional-segment-trees) –
@NicoSchertlerオーバーラップ領域にどのように使用しますか? –
@ValentinLorentzどのような種類の拡張オブジェクトにも同じ方法で使用できます。平面を横切る場合は、それらを分割するか、両方のサブツリーにリージョンを配置します。 –