320*240的窗口区域中有一堆杂乱分布(位置不定,大小不定)的矩形,其中有一些是部分相交的,现在想合并这些矩形,合并的原则是如果两矩形相交的区域同时大于两矩形各自面积的50%,下面代码中的m_rectarray是一个集合类对象,其中已经将窗口内的所有矩形RECT *指针压入。大虾们能不能帮我写一下啊?多谢!!
void CFileView::CombineRectangle()
{        CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));    
CPen pen(PS_SOLID,1,RGB(255,255,0));
dc.SelectObject(pBrush);
dc.SelectObject(&pen);
int t=m_rectarray.GetSize();
              ?
              ?
              ?
              ?}

解决方案 »

  1.   

    一般用
    CRect::UnionRect 
    BOOL UnionRect( LPCRECT lpRect1, LPCRECT lpRect2 );>合并的原则是如果两矩形相交的区域同时大于两矩形各自面积的50%,
    这个要算法自己处理
      

  2.   

    其实矩形框的合并很简单,遍历它们顶点中的最左,最上,最右,最下点就得到了。如果两矩形相交的区域同时大于两矩形各自面积的50%,这个条件就麻烦点了。
    那就需要用到IntersectRect求两个矩形的相交矩形大小再计算这个面积是不是大于两个矩形的50%了,如果是就UnionRect。