質問: いつもお世話になっております。 現在簡易的なCAD(2D)を作っております。 色々模索している状況ではありますが、 図形を二次元平面に並べたときに、 指定されたある点を占有している図形を求めるにはどうすればよいでしょうか 例えば長方形がいくつか、座標平面に存在するとして、 点(5,2)を占有している長方形は何番か、みたいなことが知りたいです まさか、すべての図形に対してループ文で、「お前は点(5,2)を占有しているか?」なんて聞くのは違うと思いますし(この方法だと平面に存在する図形が多くなればなるほど、特定に時間がかかるので)、、、 方針としてどのようなものがありますでしょうか 下の図で説明させていただきますと、 1(2,3)に存在する図形はあるか、という入力に対して、 四角形Iを返すような方法、 同様に2(5,6)では 四角形II、四角形IIIを返し、 3では「存在しません」を返します この例ではいずれも四角形の領域内(3以外)ですが、線分上や円弧上、が最終的な目標です(CADでは図形が閉じているとは限らず、むしろ選択の対象はある線(直線または曲線)なので ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/4fcdbcec68ccdf6f725352699fd6b4f0.png) (もしかしたらゲームなんかでこの考え方があるんじゃないかと思い、タグに一応Unityを入れさせていただきました) --追記-- お二方から回答いただき、今回の方針としては、(範囲を絞り込んで)すべての図形に対して座標占有の有無の問い合わせをする、ということで実装したいと思います。 ところで、まだ疑問が残るのでこちらにも回答いただけると助かります * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 人間が、このような図形を見てある座標を指さした場合、 (重なっているかは別として)ピンポイントでそこに描かれている図形を知ることができます しかし、プログラム上で似たようなことを実現しようとしたら、 範囲を絞り込む等したとしても、最終的には、その周辺に存在する図形すべてに対して「ある座標」を占有しているかどうか問い合わせるのが普通、ということでしょうか 人間がやるように、ピンポイントで図形を見つけるにはそれこそ、すべての座標において(といっても、0.1、0.01単位でみていくと無数になる)インデックスを作らなければならないという、非現実的なことになりますでしょうか
回答: 図形がいくつあるのか知りませんが、全部に聞く以外にないと思います。 逆引きできるよう各点にインデックスを作るのは現実的ではありません。 図形の大まかな位置とサイズを示すプロパティがあるのではないかと思いますが、それである程度絞り込んでおけばいいのではないでしょうか? 最終的なヒットテストには Region.IsVisible メソッドが使えるのではないかと思います。