题目介绍: 在坐标系中设定左上方点为原点坐标(0, 0),以矩形的左上点坐标和右下点坐标来表示一个矩形.求两个矩形相交的区域(该区域为矩形). 代码实现: /* 函数结果状态代码 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; /* 点结构体定义 */ typedef struct tagPoint_t { int iCdX; /* Coordinate X */ int iCdY; /* Coordinate Y */ }Point_t; /* 矩形结构体定义 */ typedef struct tagRectangle_t { Point_t stLeftUp; /* 左上点 */ Point_t stRightDown; /* 右下点 */ }Rectangle_t; /****************************************************************************/ /* 取大数 */ /****************************************************************************/ int GetMax(int iData1, int iData2) { return iData1 > iData2 ? iData1 : iData2; } /****************************************************************************/ /* 取小数 */ /****************************************************************************/ int GetMin(int iData1, int iData2) { return iData1 > iData2 ? iData2 : iData1; } /****************************************************************************/ /* 检测矩形相交 */ /****************************************************************************/ Status CheckInter(Rectangle_t RectA, Rectangle_t RectB) { if ((RectB.stLeftUp.iCdX < RectA.stRightDown.iCdX) && /* 矩形B左上点X < 矩形A右下点X */ (RectB.stLeftUp.iCdY < RectA.stRightDown.iCdY) && /* 矩形B左上点Y < 矩形A右下点Y */ (RectB.stRightDown.iCdX > RectA.stLeftUp.iCdX) && /* 矩形B右下点X > 矩形A左上点X */ (RectB.stRightDown.iCdY > RectA.stLeftUp.iCdY)) /* 矩形B右下点Y > 矩形A左上点Y */ { return TRUE; /* 矩形A与B相交 */ } return FALSE; } /****************************************************************************/ /* 取得矩形相交区域 */ /****************************************************************************/ Status GetInterRect(Rectangle_t RectA, Rectangle_t RectB, Rectangle_t InterRect) { /* 检测矩形A与B是否相交 */ if (!CheckInter(RectA, RectB)) { return ERROR; /* 2个矩形不相交 */ } /* 相交区域左上点X为2个矩形左上点X的最大值 */ InterRect.stLeftUp.iCdX = GetMax(RectA.stLeftUp.iCdX, RectB.stLeftUp.iCdX); /* 相交区域左上点Y为2个矩形左上点Y的最大值 */ InterRect.stLeftUp.iCdY = GetMax(RectA.stLeftUp.iCdY, RectB.stLeftUp.iCdY); /* 相交区域右下点X为2个矩形右下点X的最小值 */ InterRect.stRightDown.iCdX = GetMin(RectA.stRightDown.iCdX, RectB.stRightDown.iCdX); /* 相交区域右下点Y为2个矩形右下点Y的最小值 */ InterRect.stRightDown.iCdY = GetMin(RectA.stRightDown.iCdY, RectB.stRightDown.iCdY); return TRUE; }