【发布时间】:2011-06-10 07:06:45
【问题描述】:
对于多边形,点以逆时针方式给出。对于孔,点以顺时针方式给出。那么给定一个多边形列表,如何构造所有带孔的多边形呢?
下面是多边形列表的几个前提:
- 一个多边形可以包含多个孔,但一个孔必须包含在多边形内。
- 一个洞不能包含一个或多个多边形。
- 所有孔都必须位于多边形内部,而不是在多边形外部
- 孔的边缘可以碰到多边形。
- 并且所有多边形和孔不能与其他多边形/孔相交,尽管它们可以相互接触。
- 多边形/孔可以是凸的或凹的。
如何设计一种算法来构造带孔的多边形?
我正在寻找一个通用算法,因此欢迎任何 C#、C++ 和 matlab 形式的代码。
编辑:这是我的输入(在 C# 中)
public class PolygonWithHoles
{
public List<Point> OuterBoundary;
public List<List<Point>> Holes;
}
//input: a list of point list. If the point list constructs a polygon in Counter clock wise, then it is a general polygon, else it is a holes
public List<PolygonWithHoles> ConstuctPolyHoles(List<List<Point>> Polys)
{
}
【问题讨论】:
-
我不清楚你想要什么输出。你能举个例子吗?
-
@Erno,添加了示例输入/输出
-
多边形和/或孔是凸的吗?
-
@Erno,它可以是凸的或凹的,有关系吗?
-
是的,我认为确实如此。因为当它们可以是凹的时,很难确定点列表是孔还是多边形。
标签: c# c++ matlab geometry computational-geometry