凹面ポリゴンで作業する必要があります。基本的に、それらの幅と高さ、点が多角形の内側にあるかどうかを知る方法、およびおそらくそれに外接する長方形の x、y 座標を知る必要があります (したがって、ドラッグ アンド ドロップ機能を簡単に実装できます)。何を使用できますか?
カスタムの Polygon タイプを定義することはできますが、ポリゴンが凹状であることを考えると、「Contains」の従来の方法を実装するには問題があります。
提案しますか?
特にClassを使用するShape
と、これらのオブジェクトとやり取りするのは特に簡単ですが、何千ものエッジを扱う場合は、Classを使用することをお勧めします。その方法。Polygon
DrawingVisual
RenderOpen
DrawingVisual
ではイベント処理が提供されないため、イベントをShape
使用してエッジとやり取りできる場合は、 Hit-TestingDrawingVisual
を実装する必要があります。
要素のプロパティPolygon
を知ってHeight
、Width
簡単に使用できます。
Point
aがポリゴン内にあるかどうかを確認したい場合は、 InputHitTest
Methodまたは esle the VisualTreeHelper.HitTest
Methodを使用できます。
let res = yourPolygon.InputHitTest(new Point(x, y))
let res = VisualTreeHelper.HitTest(yourPolygon, new Point(x, y))
結論として、ポイントがポリゴンの内側にあるかどうかを確認するエレガントな方法を探している場合は、この回答をご覧ください。
使用できますSystem.Drawing.Drawing2D.GraphicsPath
:
GraphicsPath path = new GraphicsPath();
path.AddPolygon(new[] {new Point(0,1), new Point(5,8), new Point(2,4)});
bool isPointInPolygon = path.IsVisible(4, 1);
ポイントがポリゴン内にあるかどうかを確認するための優れたルーチンがいくつかあります。http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htmをチェックしてください