C++中如何计算两个区域是否有交集
来源:互联网 发布:java thread run start 编辑:程序博客网 时间:2024/05/19 16:48
判断两个矩形是否相交,可以自己写一个函数判断,也可以用你说的那个函数判断,但你说的那个函数主要的目的不是为了判断两个矩形是否相交。
用该函数的方法:
HRGN hRgn1 = CreateRectRgn(rc1.left, rc1.top, rc1.right, rc1.bottom);
HRGN hRgn2 = CreateRectRgn(rc2.left, rc2.top, rc2.right, rc2.bottom);
//用RGN_AND标志表示你要合并两个区域并得到交集
HRGN hRgnSum = NULL;
int nRet = CombineRgn(hRgnSum, hRgn1, hRgn2, RGN_AND);
if (nRet == SIMPLEREGION)
{ //有交集
//得到交集矩形
RECT rc3;
GetRgnBox(hRgnSum, &rc3);
}
else if (nRet == NULLREGION)
//没有交集
DeleteObject(hRgnSum);
DeleteObject(hRgn2);
DeleteObject(hRgn1);
- 补充:
第二种方法:
//用来将所有的矩形调整为左上右下的形式
//其中swap函数没有实现,因为太简单了
void AdjustRect(RECT &rc)
{
if (rc.left > rc.right)
swap(rc.left, rc.right);
if (rc.top > rc.bottom)
swap(rc.top, rc.bottom);
}//用来判断是否有交集,最后的参数返回有交集时候的矩形
//max和min函数没有实现,因为太简单了
BOOL HasIntersect(const RECT &rc1, const RECT &rc2, RECT &rc3)
{
RECT src1 = rc1;
AdjustRect(src1);
RECT src2 = rc2;
AdjustRect(src2);rc3 = RECT(0, 0, 0, 0);
if (((src1.right < src2.left) && (src1.bottom < src2.top))
|| ((src1.left > src2.right) && (src1.top > src2.bottom)))
return FALSE;rc3.left = max(src1.left, src2.left);
rc3.right = min(src1.right, src2.right);
rc3.top = max(src1.top, src2.top);
rc3.bottom = min(src1.bottom, src2.bottom);
return TRUE;
}
- C++中如何计算两个区域是否有交集
- 如何确定两个区间是否有交集?
- 判断两个时间段是否有交集
- 判断两个矩形是否有交集
- 判断两个时间段是否有交集
- 求两个长方形是否有交集
- 判断两个矩形是否有交集
- Java判断两个时间段是否有交集
- 判断两个窗口是否有交集
- SQL判断两个时间段是否有交集
- php 判断两个时间段 是否有交集
- PostGis 如何判断两个多边形是否有重叠的区域
- PHP计算两个时间段是否有交集(边界重叠不算)
- 如何判断两个矩形是否存在交集
- C语言:计算两个集合的交集
- 在ORalce 中,怎么判断两个时间段之间是否有交集, 编写的一个函数.
- SQL Server 查询两个时间段是否有交集
- sql语句判断两个时间段是否有交集
- HDU 1535 Invitation Cards
- 第二步:添加sprite精灵
- [LeetCode] Triangle
- yii基本安装配置介绍
- Android的Animation之LayoutAnimation使用方法
- C++中如何计算两个区域是否有交集
- MFC 用UnionRect计算两个CRect的合集
- MFC消息映射机制和绘图DC的获取
- 避免闪烁的方法(OnEraseBkgnd)
- OnPaint()函数的作用原理
- vc中常用到的几个内存分配函数
- linux 安装rabbitmq 简易记录
- Visual C++ 2010创建Ribbon界面(上)
- Visual C++ 2010创建Ribbon界面(下)