• ベストアンサー

探索アルゴリズム

aという対象の位置は(x,y) その周辺10の距離内にいるモノを見つけたい このモノというのはたくさんあるとします。モノの座標は一覧としてもっています。 x+10, x-10,y+10,y-10を境界にifで処理するとモノ一つに対して4度処理を必要として、モノの数だけ処理をする必要があり非効率だと思ったのですが他の効率的な方法が思い浮かびません なにかいい方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#208507
noname#208507
回答No.3

点(モノ)の数だけ処理するのを避けたいなら、 R木のように事前にデータを整理する必要があります。 いきなり探索するとしたら、総当りしかないでしょう。 また、「距離」は一般にはユークリッド距離を指します。 二つの点 (x1,y1) と (x2,y2) のユークリッド距離は  √((x1-x2)^2 + (y1 - y2)^2) で求まります。 例として点(0,0)と(9,9)の距離は、約12.7になります。 つまり、(0,0)と(9,9)の距離は10を大きく超えています。 > x+10, x-10,y+10,y-10を境界にifで処理すると とのことですが、それでは正しい判定はできません。 No.2さんの言うように、2点間の距離を計算して 2点間の距離をif文一回で判定すべきでしょう。 ユークリッド距離でなく、市街地距離やチェス盤距離で 内外判定したいなら、上の境界とif文ででもできますが。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

2つの間の距離を計算して、if 距離<=10 とかすれば、ifは一つです。 ifで分岐させるのと、どっちが効率がいいかはわかりません。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

(x+1,y+1)なども(x,y)から距離10だと思いますが、それは調べなくていいのですか ?

who_ray_sis
質問者

補足

距離10以内という意味でした。 すいません言葉足らずでした。

関連するQ&A