1,判断两矩形区域是否相交
不考虑矩形是斜的情况,但是看别人写的代码都比较复杂,所以不敢肯定百分之百正确,有认为是错误的请留言,多谢!
代码实现(c++)
struct
RECT
{
int left;
int top;
int right;
int bottom;
};
// judge whether two rects intersect
bool IsIntersect(RECT &rect1, RECT &rect2)
{
return ! (rect1.left > rect2.right || rect2.left > rect1.right || \
rect1.top > rect2.bottom || rect2.top > rect1.bottom);
}
{
int left;
int top;
int right;
int bottom;
};
// judge whether two rects intersect
bool IsIntersect(RECT &rect1, RECT &rect2)
{
return ! (rect1.left > rect2.right || rect2.left > rect1.right || \
rect1.top > rect2.bottom || rect2.top > rect1.bottom);
}
除上面的算法外,以前还用过一种算法,通过计算两个矩形框的中心点的距离。具体代码就不贴上来了
2,合并两矩形区域
代码实现(c++)
void
MergeRect(RECT
&
dest_rect, RECT
&
source_rect)
{
dest_rect.top = dest_rect.top < source_rect.top ? dest_rect.top : source_rect.top;
dest_rect.left = dest_rect.left < source_rect.left ? dest_rect.left : source_rect.left;
dest_rect.right = dest_rect.right > source_rect.right ? dest_rect.right : source_rect.right;
dest_rect.bottom = dest_rect.bottom > source_rect.bottom ? dest_rect.bottom : source_rect.bottom;
}
{
dest_rect.top = dest_rect.top < source_rect.top ? dest_rect.top : source_rect.top;
dest_rect.left = dest_rect.left < source_rect.left ? dest_rect.left : source_rect.left;
dest_rect.right = dest_rect.right > source_rect.right ? dest_rect.right : source_rect.right;
dest_rect.bottom = dest_rect.bottom > source_rect.bottom ? dest_rect.bottom : source_rect.bottom;
}
3,求点到矩形区域的距离
代码实现(c++)
#include
<
math.h
>
struct POINT
{
int x;
int y;
};
int GetDistance(RECT & rect, POINT & point)
{
POINT nearest_point;
if (point.x < rect.left)
nearest_point.x = rect.left;
else if (point.x > rect.right)
nearest_point.x = rect.right;
else
nearest_point.x = point.x;
if (point.y < rect.top)
nearest_point.y = rect.top;
else if (point.y > rect.bottom)
nearest_point.y = rect.bottom;
else
nearest_point.y = point.y
return sqrt((point.x - nearest_point.x) * (point.x - nearest_point.x) + (point.y - nearest_point.y) * (point.y - nearest_point.y));
}
struct POINT
{
int x;
int y;
};
int GetDistance(RECT & rect, POINT & point)
{
POINT nearest_point;
if (point.x < rect.left)
nearest_point.x = rect.left;
else if (point.x > rect.right)
nearest_point.x = rect.right;
else
nearest_point.x = point.x;
if (point.y < rect.top)
nearest_point.y = rect.top;
else if (point.y > rect.bottom)
nearest_point.y = rect.bottom;
else
nearest_point.y = point.y
return sqrt((point.x - nearest_point.x) * (point.x - nearest_point.x) + (point.y - nearest_point.y) * (point.y - nearest_point.y));
}