我希望用户使用鼠标定义多边形并单击以定义点。第二个任务是,一旦我有一组定义的多边形,我想检查一些随机生成的点是否位于这些多边形中的任何一个。
我正在使用C#.net平台。感谢。
答案 0 :(得分:2)
这不是一项简单的任务。例如,您应该将点集分析为Convex或Concave Hull并对其进行排序。您可以使用以下链接作为资源:
http://ubicomp.algoritmi.uminho.pt/local/concavehull.html
http://marknelson.us/2007/08/22/convex/
Is there an efficient algorithm to generate a 2D concave hull?
http://courses.csail.mit.edu/6.854/06/scribe/s26-randomIC.pdf
http://softsurfer.com/Archive/algorithm_0109/algorithm_0109.htm
答案 1 :(得分:1)
我回答了一个相当类似的问题,你可能会发现answers there是一个很好的起点。
答案 2 :(得分:0)
旧线程,但直接解决方案。如果您充分利用Graphics和Drawing2D命名空间,这实际上非常简单。
GraphicsPath.AddLines( Point[] )
Graphics.DrawPath( Drawing2D.GraphicsPath )
Graphics.FillPath( Drawing2D.GraphicsPath )
所以你只需创建一个新路径,然后调用AddLines传递你的点数组,然后调用CloseFigure。
如果您想用笔抚摸它,请使用DrawPath。如果要用画笔填充它,请使用FillPath。
对多边形内任何点的命中测试也很简单,你可以使用Drawing.Region( Drawing2D.GraphicsPath )和Region.IsVisible的任何重载来指定位置和图形对象。