.NET类多边形

时间:2012-06-12 22:20:06

标签: .net f# polygon

我需要使用凹多边形。基本上我需要知道它们的宽度和高度,一种知道点是否在多边形内部的方法,以及可能包围它的矩形的x,y坐标(因此我可以轻松实现拖放功能)。我可以使用什么?

我可以定义一个自定义的Polygon类型,但考虑到多边形是凹的,我会遇到实现“Contains”经典方法的问题。

:建议?

3 个答案:

答案 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了解HeightWidth只需使用元素属性。

如果您想检查多边形内是否有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