私は、Wpfジオメトリオブジェクトの抽象的なサイズの大きなIEnumerableコンテナを持っています。ジオメトリオブジェクトの境界は自明ではありません。それらは長方形や円のような単純な幾何学的形状ではなく、複雑なポリゴンです。リストは最初に入力された後は決して変更されません。WPFジオメトリのコレクションで最適化ヒットテスト
私はポイントを持っていますが、どのジオメトリにそのポイントが含まれているかを調べたいと思います。
List<Geometry> list = getList();
var point = new Point(x,y);
list.Any(y => y.Bounds.Contains(point) && y.FillContains(point));
このコードは機能しますが、一般に遅いです。最初のBoundsチェックは短絡で、それがない場合より約50%速くなります。私は複雑さの次の層は、プリレンダリングされたヒットマップ辞書のいくつかの並べ替えを設定することだと思う。
このタスクをよりパフォーマンスに優れた方法で実現するには、WPFに既に存在するものはありますか?
これらのジオメトリをすべてGeometryGroupに追加してから、GeometryGroupのFillContainsメソッドを呼び出そうとしましたか? – Clemens
それは、ジオメトリが特定のポイントではなくそのポイントに存在するかどうかだけを通知します。私はGeometryGroupでいくつかのことを試しました。ランダムなサイズの1000個のジオメトリのリストを作成しました。 GeometryGroupはほぼ10倍遅くなりました。 –