0

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

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

建议?

4

3 回答 3

1

您可以使用ShapeClass ,尤其是与这些对象交互特别简单,但如果您要处理数千条边,我建议使用PolygonClass,这是一个可用于在屏幕上渲染矢量图形的可视对象,DrawingVisual并且它的RenderOpen方法。

DrawingVisual不提供事件处理,所以如果Shape你可以使用事件与边缘交互,DrawingVisual你需要实现Hit-Testing

Polygon了解Height并简单地使用Width元素属性。

如果要检查 aPoint是否在多边形内,可以使用InputHitTestMethod或 esle VisualTreeHelper.HitTestMethod

let res = yourPolygon.InputHitTest(new Point(x, y))
let res = VisualTreeHelper.HitTest(yourPolygon, new Point(x, y))

总之:如果您寻求一种优雅的方法来检查一个点是否在多边形内,请查看答案。

于 2012-06-13T11:13:28.937 回答
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);
于 2012-06-13T00:10:17.933 回答
0

有一些很好的例程可以确定一个点是否在多边形内。查看http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm

于 2012-06-13T00:02:18.263 回答