社区
图形处理/算法
帖子详情
把不规则多边形分割成矩形的问题
bdxxxx
2011-11-07 04:56:43
有一个由多个矩形重叠成的不规则图形,要重新分割成多个矩形不重叠组成的图形,求思路或者算法,自己写了很多次不是太麻烦就是太局限就是考虑不周到。。。
分割的结果类似下图
...全文
2021
17
打赏
收藏
把不规则多边形分割成矩形的问题
有一个由多个矩形重叠成的不规则图形,要重新分割成多个矩形不重叠组成的图形,求思路或者算法,自己写了很多次不是太麻烦就是太局限就是考虑不周到。。。 分割的结果类似下图
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caozl
2011-11-10
打赏
举报
回复
[Quote=引用 12 楼 bdxxxx 的回复:]
引用 11 楼 caozl 的回复:
如果任一分法都可以的话 是不是这样认为呢
既然是由多个矩形重叠成的不规则图形 那就一个一个的把矩形给累加上去
两个矩形的并结果最多可以分成三个矩形。然后再把下一个矩形与这些结果分别做并。
两个矩形有重叠部分 最一般的结果不是3个矩形,而是一个矩形和2个L型多边形
[/Quote]
我的意思并不是求交 而是指X轴方向或Y轴方向上切开并运算的结果 这样可以得到3个矩形吧
然后就是不断的添加矩形与当前存在的矩形去运算。把运算结果取出再重新添加
bdxxxx
2011-11-10
打赏
举报
回复
[Quote=引用 11 楼 caozl 的回复:]
如果任一分法都可以的话 是不是这样认为呢
既然是由多个矩形重叠成的不规则图形 那就一个一个的把矩形给累加上去
两个矩形的并结果最多可以分成三个矩形。然后再把下一个矩形与这些结果分别做并。
[/Quote]
两个矩形有重叠部分 最一般的结果不是3个矩形,而是一个矩形和2个L型多边形
caozl
2011-11-10
打赏
举报
回复
如果任一分法都可以的话 是不是这样认为呢
既然是由多个矩形重叠成的不规则图形 那就一个一个的把矩形给累加上去
两个矩形的并结果最多可以分成三个矩形。然后再把下一个矩形与这些结果分别做并。
caozl
2011-11-10
打赏
举报
回复
[Quote=引用 15 楼 bdxxxx 的回复:]
引用 14 楼 caozl 的回复:
我对这个问题的基本思路是:
定义CRECT类 在这个类里有一个方法:
bool CRECT::AddRect(CRect& rect, std::vector<CRect>& rectResults);
当两个矩形相交或者可以合并为一个矩形的时候,这个方法返回true, 并把合并的结果传出
输入为一个std::……
[/Quote]
不需要整理 因为
bool CRECT::AddRect(CRect& rect, std::vector<CRect>& rectResults);
当两个矩形相交或者可以合并为一个矩形的时候,这个方法返回true, 并把合并的结果传出
如果生成的矩形可以和相邻的矩形合并的话 在添加进结果数组的时候就会合并了。
peterormike
2011-11-10
打赏
举报
回复
沿着凹点分割,递归处理。以9楼的图形为例:
http://hi.csdn.net/attachment/201111/10/2530173_1320907025RRCC.jpg
bdxxxx
2011-11-10
打赏
举报
回复
[Quote=引用 14 楼 caozl 的回复:]
我对这个问题的基本思路是:
定义CRECT类 在这个类里有一个方法:
bool CRECT::AddRect(CRect& rect, std::vector<CRect>& rectResults);
当两个矩形相交或者可以合并为一个矩形的时候,这个方法返回true, 并把合并的结果传出
输入为一个std::vector<CRect> rectInput;
输出为……
[/Quote]
应该是可以 但是这会导致分块越来越小,矩形越来越多,还需要在分成小块之后进行整理
caozl
2011-11-10
打赏
举报
回复
我对这个问题的基本思路是:
定义CRECT类 在这个类里有一个方法:
bool CRECT::AddRect(CRect& rect, std::vector<CRect>& rectResults);
当两个矩形相交或者可以合并为一个矩形的时候,这个方法返回true, 并把合并的结果传出
输入为一个std::vector<CRect> rectInput;
输出为一个std::vector<CRect> rectOutput;
把rectInput里的矩形分别与rectOutput中的矩形做AddRect运算 如果返回TRUE 就把返回的结果给push_back到rectInput的后面。并把rectOutput中的这个矩形给删除。
bdxxxx
2011-11-09
打赏
举报
回复
呃 看来没人有兴趣啊
laviewpbt
2011-11-07
打赏
举报
回复
利用WINDOWS的GDI函数GetRegionData 的话可以得到如下的四个矩形。
谁是我的谁的谁
2011-11-07
打赏
举报
回复
不要瞎出主意了 典型的图形学2维几何(可以中空-有孔) 运算(并)问题
用户 昵称
2011-11-07
打赏
举报
回复
[Quote=引用 6 楼 bdxxxx 的回复:]
引用 2 楼 jennyvenus 的回复:
可不可以这样
把边界的线段提取出来,一定要提取到最短的线段,不能再分,然后找共有线段。
然后判断如果没有共有线段的话,某个矩形是不是一个矩形
这个样子分出来的矩形是不是太小了。。。
[/Quote]
不知道啊,俺所能想像的就是这个了
bdxxxx
2011-11-07
打赏
举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
可不可以这样
把边界的线段提取出来,一定要提取到最短的线段,不能再分,然后找共有线段。
然后判断如果没有共有线段的话,某个矩形是不是一个矩形
[/Quote]
这个样子分出来的矩形是不是太小了。。。
bdxxxx
2011-11-07
打赏
举报
回复
[Quote=引用 3 楼 bhybhybhy2 的回复:]
查 图形学 2维图形的几何运算
代码到cgal里面找
[/Quote]
多谢
bdxxxx
2011-11-07
打赏
举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
你所画的只是一个很简单的特例,能选择的拆分方法只有一种。而对于复杂的重叠情况,可能能够满足条件的拆分方法并不止一种,你如何要求哪种是正确的,或者任何一种都可以呢?
[/Quote]
我画的却是是很简单的,实际情况是还有可能是中空的, 满足拆分条件的都任一分法都可以
谁是我的谁的谁
2011-11-07
打赏
举报
回复
查 图形学 2维图形的几何运算
代码到cgal里面找
用户 昵称
2011-11-07
打赏
举报
回复
可不可以这样
把边界的线段提取出来,一定要提取到最短的线段,不能再分,然后找共有线段。
然后判断如果没有共有线段的话,某个矩形是不是一个矩形
快乐鹦鹉
2011-11-07
打赏
举报
回复
你所画的只是一个很简单的特例,能选择的拆分方法只有一种。而对于复杂的重叠情况,可能能够满足条件的拆分方法并不止一种,你如何要求哪种是正确的,或者任何一种都可以呢?
C#实现
不规则
图形
分割
成
多个
矩形
组合可视化工具, 核心是一个找最大内切
矩形
的算法
C#代码,
不规则
图形
分割
成
多个
矩形
,可视化工具, 核心是一个找最大内切
矩形
的算法 牵涉到的知识点: 1. 图片的加载和像素解析,绘制到pictureBox上 2.控制pitctureBox缩放(ctrl+滚轮)和移动 3.动态生
成
bitmap,绘制点和
矩形
,显示到pictureBox上 4.找出属于不同区域的相连的
不规则
图形对应的数据块 5.
不规则
图形数据查找最大内嵌
矩形
算法 6.拆分剩余上下左右4个区域,递归找到更小的
矩形
。 关联博文: https://blog.csdn.net/zhenmu/article/details/125852065
图像
多边形
标注与Python
多边形
矩形
圆线点和图像水平标志标注.zip
python
6
多边形
及其内角和 (2).ppt
6
多边形
及其内角和 (2).ppt
不规则
窗口
根据指定图形裁剪
不规则
窗口
多边形
裁剪算法程序
多边形
裁剪算法程序
多边形
裁剪算法程序
多边形
裁剪算法程序
多边形
裁剪算法程序
图形处理/算法
19,471
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章