我需要使用凹多边形。基本上我需要知道它们的宽度和高度,一种知道点是否在多边形内部的方法,以及可能包围它的矩形的x,y坐标(因此我可以轻松实现拖放功能)。我可以使用什么?
我可以定义一个自定义的Polygon类型,但考虑到多边形是凹的,我会遇到实现“Contains”经典方法的问题。
:建议?
答案 0 :(得分:1)
您可以使用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);
答案 1 :(得分:1)
您可以使用Shape
,而在Polygon
Class中,与这些对象的交互特别简单,但如果您处理数千个边缘,我建议使用DrawingVisual
Class,可用于在屏幕上渲染矢量图形的可视对象及其RenderOpen
方法。
DrawingVisual
不提供事件处理,因此如果使用Shape
您可以使用事件与边缘进行互动,则DrawingVisual
需要实现Hit-Testing。
使用Polygon
了解Height
和Width
只需使用元素属性。
如果您想检查多边形内是否有Point
,可以使用InputHitTest
Method或esle VisualTreeHelper.HitTest
Method:
let res = yourPolygon.InputHitTest(new Point(x, y))
let res = VisualTreeHelper.HitTest(yourPolygon, new Point(x, y))
总之:如果您寻求一种优雅的方法来检查某个点是否在多边形内部,请查看this答案。
答案 2 :(得分:0)
有一些很好的例程可以找出一个点是否在多边形内。查看http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm