社区
数据结构与算法
帖子详情
求:线段分割多边形的算法
yingkoz
2009-03-05 12:17:52
给定一个任意形状的不自交、封闭多边形(包括凸的和凹的)和一条线段,
1.求线段和多边形的交点个数。
2.保存分割后形成的所有的多变形。
谁有和上面类似的算法啊,麻烦告诉一下,谢谢了!!!
...全文
1031
18
打赏
收藏
求:线段分割多边形的算法
给定一个任意形状的不自交、封闭多边形(包括凸的和凹的)和一条线段, 1.求线段和多边形的交点个数。 2.保存分割后形成的所有的多变形。 谁有和上面类似的算法啊,麻烦告诉一下,谢谢了!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
油焖大侠
2012-02-24
打赏
举报
回复
怎么按顶点顺序绕一圈啊?[Quote=引用 1 楼 dlyme 的回复:]
这个问题并不复杂,不需要什么特别的算法:
1.最简单的办法,依次判断给出的线段和多边形的n条边是否相加(判断两线段是否相交总会计算吧?高效一些的可以用跨立法),就可以得到交点的个数;
2.由于你给出的是“线段”,所以存在只有一个交点的特殊情况,这时多边形没有被分割。
如果交点个数在2个或2个以上:
a)对于凸多边形来说,最多就2个交点。此时多边形被这两个交点连成的线段分割成了两个小的凸多变……
[/Quote]
umlzhijia
2009-03-13
打赏
举报
回复
我最近写了两个图形∩∪差的算法,原理很简单,先把图形调整为逆时钟旋转,在交点处不断转换在不同边中行走,就可以找出∩∪的集合,差集时,在a-b 时,在a中逆时钟行走,b中顺时钟行走走出的结果集 就是差集了。
大王派我去巡山
2009-03-11
打赏
举报
回复
画一下图就很清楚了,其实就是这个意思:
swiftwqq
2009-03-10
打赏
举报
回复
我最近也在研究这个算法,讲一个复杂多边形切割成多个小多边形,切割之后的每个小多边形至少有一段、至多有两段“割线”来作为它的边?这个是一段还是两端的如何判断?
问dlyme兄,能否再讲的详细点,谢谢。
????
想象一下,将所有的顶点和交点按照顺时针(绕多边形顺时针绕一圈)的顺序围成一个大圆。
有效(原多边形内部)割线对应的交点之间用线段连起来,这些弦不会发生交叉。
圆怎么被切的,多边形就是怎样被切的,一样的道理~
????
ningyong58
2009-03-06
打赏
举报
回复
收藏
kon3155
2009-03-06
打赏
举报
回复
[Quote=引用 1 楼 dlyme 的回复:]
对于凹多边形来说,情况要稍微复杂一点,因为交点连成的“割线”可能落在原来的多边形之外,需要对这种情况进行判断(判断两个交点的中点是否在原多边形内部,射线法、转角法...都可以)。然后按照顶点(包括交点)的顺序绕一圈,就可以得到分割后的所有多边形[/Quote]
“判断两个交点的中点是否在原多边形内部”,是那两个交点?按什么顺序的交点?像下面这个多边形被直线分割,可没那么简单啊!
大王派我去巡山
2009-03-06
打赏
举报
回复
想象一下,将所有的顶点和交点按照顺时针(绕多边形顺时针绕一圈)的顺序围成一个大圆。
有效(原多边形内部)割线对应的交点之间用线段连起来,这些弦不会发生交叉。
圆怎么被切的,多边形就是怎样被切的,一样的道理~
大王派我去巡山
2009-03-06
打赏
举报
回复
[Quote=引用 11 楼 kon3155 的回复:]
判断出内部和外部之后,怎么绕呢?如下图,怎么绕才能得到填充的多边形呢?
[/Quote]
注意切割之后的每个小多边形至少有一段、至多有两段“割线”来作为它的边。
假设有m段(在内部有效的)割线,原来的多边形就会被切成m+1块
图就不画了,这部分并不复杂,自己琢磨一下就清楚了~
大王派我去巡山
2009-03-06
打赏
举报
回复
把一个“回”字形的凹多边形一刀切成两半,看看是不是有段“割线”落在外面了?
你要求的是原来的多边形切割之后的被划分成的区域,总不能凭空多出一块来吧?
kon3155
2009-03-06
打赏
举报
回复
[Quote=引用 1 楼 dlyme 的回复:]
然后按照顶点(包括交点)的顺序绕一圈,就可以得到分割后的所有多边形
[/Quote]
判断出内部和外部之后,怎么绕呢?如下图,怎么绕才能得到填充的多边形呢?
绿色夹克衫
2009-03-06
打赏
举报
回复
因为第二问不是要保存多边形么,在里面的就成为了多边形的新的边,在外面的就不是!
[Quote=引用 9 楼 yingkoz 的回复:]
引用 1 楼 dlyme 的回复:
b)对于凹多边形来说,情况要稍微复杂一点,因为交点连成的“割线”可能落在原来的多边形之外,需要对这种情况进行判断...
为什么要判断交点连成的“割线”是否落在多边形之外?
[/Quote]
yingkoz
2009-03-06
打赏
举报
回复
[Quote=引用 1 楼 dlyme 的回复:]
b)对于凹多边形来说,情况要稍微复杂一点,因为交点连成的“割线”可能落在原来的多边形之外,需要对这种情况进行判断...
[/Quote]
为什么要判断交点连成的“割线”是否落在多边形之外?
大王派我去巡山
2009-03-06
打赏
举报
回复
[Quote=引用 5 楼 kon3155 的回复:]
“判断两个交点的中点是否在原多边形内部”,是那两个交点?按什么顺序的交点?像下面这个多边形被直线分割,可没那么简单啊!
[/Quote]
当然是按照射线的反向、判断射线上相邻两个交点的中点是在内部还是外部~
yingkoz
2009-03-06
打赏
举报
回复
不能沉啊!!!
绿色夹克衫
2009-03-05
打赏
举报
回复
就像1楼说的,依次求多边形的各个边同直线的交点,求交点可以用快斥法+跨立法(也是前两天刚学的!)
jlj84237485
2009-03-05
打赏
举报
回复
帮顶一下
yingkoz
2009-03-05
打赏
举报
回复
自己顶一下!
大王派我去巡山
2009-03-05
打赏
举报
回复
1
这个问题并不复杂,不需要什么特别的算法:
1.最简单的办法,依次判断给出的线段和多边形的n条边是否相加(判断两线段是否相交总会计算吧?高效一些的可以用跨立法),就可以得到交点的个数;
2.由于你给出的是“线段”,所以存在只有一个交点的特殊情况,这时多边形没有被分割。
如果交点个数在2个或2个以上:
a)对于凸多边形来说,最多就2个交点。此时多边形被这两个交点连成的线段分割成了两个小的凸多变形;
b)对于凹多边形来说,情况要稍微复杂一点,因为交点连成的“割线”可能落在原来的多边形之外,需要对这种情况进行判断(判断两个交点的中点是否在原多边形内部,射线法、转角法...都可以)。然后按照顶点(包括交点)的顺序绕一圈,就可以得到分割后的所有多边形。
java 泰森
多边形
算法
可实现渲染
基于java的泰森
多边形
算法
代码简介 方便 可实现对于
多边形
的渲染
多边形
裁剪
算法
程序
多边形
裁剪
算法
程序
多边形
裁剪
算法
程序
多边形
裁剪
算法
程序
多边形
裁剪
算法
程序
多边形
切割
算法
与
多边形
有的一些
算法
,比如计算面积可以用切割法等
基于VC++的
线段
、
多边形
裁剪,中点法和边线切割
基于VC++的
线段
、
多边形
裁剪,中点法和边线切割 基于VC++的
线段
、
多边形
裁剪,中点法和边线切割 基于VC++的
线段
、
多边形
裁剪,中点法和边线切割
多边形
拓扑关系
算法
C++程序
多边形
之间的拓扑关系,解决
多边形
之间几种常见的拓扑关系,非常实用
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章