2016-11-17 17 views
-1

私はイメージに示されているようにダイヤモンドの配列を持っており、ダイヤモンドの位置とダイヤモンドの起点から任意の頂点までの距離を知っています中央からの距離)。私はまたポイントを与えられます。その情報が与えられれば、どのダイヤモンドがどのダイヤモンドの中にあるのかを見つける最も効率的な方法は何ですか?ポイントがダイヤモンド内にあるかどうかを確認する効率的な方法

私はすべてのダイヤモンドの位置からポイントの距離を調べることができますが、これを複数回行う。

enter image description here

また、これは問題ではないはず、私はこれを行うにはC#とユニティ3Dを使用しています。

+0

どのような講座を線形代数で使ったことがありますか?また、原点に最も近いダイヤモンドと原点との間の相対的なオフセットは何ですか? – templatetypedef

+0

バウンディングボックスのように見えるので、約4つのダイヤモンド以外のすべてを排除するので、いくつかのケースについて詳細なチェックを行うだけで済みます。 – stark

+0

私は現在、高等学校でPre-Calculusを受けています。私はすべてのダイヤモンドについてチェックを行うことでそれを見つけることができますが、それは効率的ではないようです。私はダイヤモンドごとにチェックを行わずに答えを得る方法があるのだろうかと思っていました。また、私はダイヤモンドの位置を得ることができ、原点は(0、0)であるので、相対オフセットを見つけることができると仮定します。そのオフセットと、私が言及した2つの他の事柄には、私が答えを得るために何ができるのかが分かっています。 – Bhaskar

答えて

2

あなたのダイヤモンドがあなたの写真のような規則的なパターンを形成しているならば、(0、0)を原点としてCWまたはCCWを45度回転させる座標変換を行うだけです。その後、問題は簡単になります。通常の直交グリッドに点を配置します。

+0

ああ、私はばかです。それは非常に意味をなさない。私はそれについて考えなかったと信じていません。ありがとうございました。 – Bhaskar

0

ダイヤモンド境界線式A0、B0は、uおよびvはセル座標であり、サイズがエッジ長さ(0、すなわち、セルが0を座標有する)ベースダイヤモンドのいくつかの頂点の座標である

x + y = a0 + u * Size 
y - x = b0 + v * Size 

を有します。ダイヤモンドポイント(px、py)がどのようなものであるかを調べるには、

u = Floor((px + py - a0)/Size)) 
v = Floor((py - px - b0)/Size)) 
関連する問題