找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3657|回复: 26

[研讨] 凹多边形转换成凸多边形的问题

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-10-11 15:52:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
QQ截图20161011154856.png


论坛的高手们,凹多边形转成凸多边形,程序代码怎么写? 是否有很多种解?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-10-11 16:23:31 | 显示全部楼层
记得高飞大师发了一个捆扎法,凹点肯定就捆扎不到了。
转成凸,肯定有无穷解了。如果凹点刚好位捆扎线上(或者说凹点全部删除),这样就只有一个解了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-11 16:33:25 | 显示全部楼层

黄总,能不能写个代码,造福下后辈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-10-11 16:42:22 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2016-10-11 16:43 编辑

不知道你要什么样的,再说这段时间忙。说一下我的思路,
1 求得多边形各顶点
2用高飞大师的凸包扫描(这个N版也发过),求得各凸点。
3 删除多边形的点(不是凸点的全部删除)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-10-11 16:49:39 | 显示全部楼层
凹点之间按顺序连接即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-11 16:53:22 | 显示全部楼层

把不是凸点的删除了,那还能生成里面那些凸多边形吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-10-11 17:01:38 | 显示全部楼层
未验证
(defun C:w1 ()
  (setq e (car (entsel "\n多段线")))
  (setq en (entget e))
  (setq pts (VL-REMOVE-IF-NOT '(lambda (x) (= (car x) 10)) en))
  (setq pts (mapcar 'cdr pts))
  (setq ptsT (Graham-scan pts))                                    ;凸点
  (setq p (VL-REMOVE-IF '(lambda (x) (member x ptsT)) pts))
  (cond (p (setq en (VL-REMOVE-IF '(lambda (x) (cdr x en)) p))))
  (entmod en)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-11 17:12:13 | 显示全部楼层

黄总,你这个是把一个凹多边形,变成一个凸多边形吧? 我想是得到分开的多个子凸多边形(他们组合成凹多边形)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6489个

财富等级: 富甲天下

发表于 2016-10-11 19:17:51 | 显示全部楼层
谢谢提供,学习一下!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-10-11 19:17:58 来自手机 | 显示全部楼层
本帖最后由 iLisp 于 2016-10-11 21:27 编辑

1:向量法:按照逆时钟的方向计算边向量的叉积结果,并且记录叉积结果z分量的符号。 如果z分量变为负值,则多边形为凹多边形,可以沿叉积向量对中第一条边的延长线将 多边形分解开。对新得到的两个多边形重复前面步骤,最后把凹多边形分成若干个凸 多边形。 2:旋转法:绕多边形逆时钟前进,将多边形顶点Vk平移到坐标原点。然后顺时针旋转, 使下一个顶点Vk+1在x轴上。 如果下下一个顶点Vk+2在x轴下方,则多边形为凹多边形,沿x轴将多边形分割为两个新多边形,对这两个新的多边形重复进行凹多边形测试。 否则继续旋转x轴上的顶点,并测试顶点的y值是否为负。



具体算法如下:
0) 初始化ma = pi
1)将凹多边形放入凹多边形队列
2)从队首取出一个多边形G
3)遍历G每个顶点,找出其中一个凹顶点p。
4)过p和另一个顶点q作这个多边形的一条弦(我想一定至少可以找到一个q能做一条弦,但是没有证明过),这条弦将原先的凹顶角分割成两个角a,b
5)记 angle = min(a, b)
6)如果弦的另一端点q也是凹顶点,且angle < pi/2,则令angle = angle - pi/2,(这是为了将凹多边形尽可能少地分割成凸多边形块)
7)若ma > angle ,则令ma = angle,记分割弦 cd = line_segment(p,q)
8)回到4)直到遍历过所有的顶点
9)用分割弦分割多边形,判断分割出的两个子多边形是否为凹多边形,若是,放入队列
10)回到2)直到队列为空

算法的时间复杂度为O(n^2)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1865个

财富等级: 堆金积玉

发表于 2016-10-12 09:25:10 | 显示全部楼层

你要的子凸多边形的个数是最少,还是最多?比如正六边形本身就是一个凸多边形,也可以分成四个三角形。你要得到哪种结果?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2016-10-12 09:32:19 | 显示全部楼层
支持楼主大人了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-12 09:51:12 | 显示全部楼层

如果有相对最优的结果,就要这个,比如多边形数目最少。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2016-10-12 10:34:10 | 显示全部楼层
正需要,支持楼主大人了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-12 10:37:52 | 显示全部楼层

谢谢楼上各位,我想,主要是判断是否是凹多边形,如果是,把凹多边形分解为最少的凸多边形组合。当然您说的把已经是凸多边形的在细分,另外写个代码最好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-22 03:02 , Processed in 0.243103 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表