最小的矩形,用于封装另外两个矩形

时间:2014-12-01 17:23:06

标签: c algorithm

我试图找到最小的矩形,它将封装另外两个矩形,比如R1和R2。每个矩形的定义如下。

  struct _Rectangle {
  int32_t swX; 
  int32_t swY;
  uint32_t Height;
  uint32_t Width; 
};

我已经尝试绘制并查看通用算法。但是我只得到了具体案例。例如,如果R1在象限2中,R2在象限4中,或者R1在象限1中,R2在象限3中。

我知道必须有一种简单的方法来评估新矩形所需的4个数量。

2 个答案:

答案 0 :(得分:3)

易。找出两个矩形的所有8个点的x和y的最小值和最大值。

边界矩形将由4个点定义:(min_x,min_y),(min_x,max_y),(max_x,min_y),(max_x,max_y)

使用您的代表,您将执行以下操作:

int32_t minX = r1.swX > r2.swX ? r2.swX : r1.swX;
int32_t minY = r1.swY > r2.swY ? r2.swY : r1.swY;
int32_t maxX = ( r1.swX + r1.Width ) > ( r2.swX + r2.Width ) ? 
               r2.swX + r2.Width : r1.swX + r1.Width;
int32_t maxY = ( r1.swY + r1.Height ) > ( r2.swY + r2.Height ) ? 
               r2.swY + r2.Height : r1.swY + r1.Height;

br.swX = minX;
br.swY = minY;
br.Width = maxX - minX;
br.Height = maxY - minY;

答案 1 :(得分:1)

你可以

  1. 将您的表示转换为2(x,y)对:(minx,miny)和(maxx,maxy)。
  2. 然后取相应值的最大值/分钟(即minx的最小值,maxi的最大值)
  3. 转换回您的原生代表