作业帮 > 数学 > 作业

给出一个算法,判断一个二维多边形是否是一个简单多边形,

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:数学作业 时间:2024/04/30 22:55:46
给出一个算法,判断一个二维多边形是否是一个简单多边形,
给出一个算法,判断一个二维多边形是否是一个简单多边形,
给定一个起点沿着逆时针方向遍历,沿着前进方向可以获取两个邻接边的向量.依次遍历所有的顶点,如果所有邻接边的向量夹角(逆时针求取)为锐角说明是凸多边形,(也就是你说的简单多边形),否则为凹多边形也就是复杂多边形.
再问: 简单多边形本身就分凹凸的吧。。。怎么变成凸的是简单,凹的是复杂了。。复杂多变形是像飞地或者图形中间有挖掉的那种吧。。。。
再答: 恩,如果是孤岛,且你的基础数据没有区分孤岛和边界,那么就很复杂。算法大致分两步1. 根据所有的边分析最小回路,思路是,沿着某一个点逆时针遍历多边形,遍历的时候总是选择转角最小的那条边进行遍历,每条边至多被共享2次。如此可以提取到所有的最小回路。2. 判断最小回路之间是否存在交点,如果存在包含的情况,可认定为孤岛。
如果你的数据比较完备,通常可以使用小平面边界(也有的叫做边表描述模型),参考下图第三方的库较多,比如CGAL
再问: 好高端。。。那不考虑复杂多边形,就按题意“对一个二维多边形判断是否为简单多边形”,你先给出的算法:“给定一个起点沿着逆时针方向遍历。。。” 是用来判断凹凸吧,简单多边形本身包括了凹多边形和凸多边形,那个算法不行吧,怎么样判断一个二维多边形是否是简单多边形呢?
再答: 我不太清楚你的边界条件,假设你有一个多边形,也知道它的边,你可以某个起点对边进行遍历,当回到原点的时候,如果多边形的边集中还存在没有遍历过的边,那么它必然是复杂多边形,因为多边形里存在孔洞,反之就是简单的多边形