title: Area of the nearest boxes
body: <p>This question is similar to my previously asked <a href="https://stackoverflow.com/questions/17328004/count-the-number-of-adjacent-boxes">this question</a> . But instead of returning only the number of nearest boxes, I would like to find the area of corresponding boxes.</p>
  
  <p><strong>Details:</strong>
  Suppose I have a set of coordinates of boxes like this-</p>
  
  <pre><code>#Rect    x1      y1          x2       y2         area
  
  1     0.0000   0.0000      0.8147   0.1355      0.1104
  2     0.8147   0.0000      1.0000   0.1355      0.0251
  3     0.8147   0.1355      0.9058   0.8350      0.0637
  4     0.0000   0.1355      0.1270   0.9689      0.1058
  5     0.9058   0.1355      0.9134   0.2210      0.0006
  6     0.9058   0.8350      1.0000   1.0000      0.0155
  7     0.8147   0.8350      0.9058   1.0000      0.0150
  8     0.1270   0.1355      0.6324   0.3082      0.0873
  9     0.1270   0.9689      0.8147   1.0000      0.0214
  10    0.0000   0.9689      0.1270   1.0000      0.0040
  11    0.9134   0.1355      1.0000   0.2210      0.0074
  12    0.9134   0.2210      1.0000   0.8350      0.0532
  13    0.9058   0.2210      0.9134   0.8350      0.0047
  14    0.6324   0.1355      0.8147   0.3082      0.0315
  15    0.6324   0.3082      0.8147   0.9689      0.1205
  16    0.1270   0.3082      0.6324   0.9689      0.3339
  </code></pre>
  
  <p>Suppose these coordinates split an unit square into sub-rectangles like this picture-
  <img src="https://i.stack.imgur.com/gLQ5E.jpg" alt="enter image description here"></p>
  
  <p>Now this code returns the value of the number of nearest boxes, but it fails to returns the area of that boxes. Here is my code-</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;cstdlib&gt;
  #include &lt;vector&gt;
  #include &lt;stdio.h&gt;
  
  using namespace std;
  
  class Rect {
    public:
    double x1, x2, y1, y2, area; 
  
    Rect(double X1, double Y1, double X2, double Y2, double Area) {
      if (X1 &lt; X2) {
        x1 = X1; x2 = X2;
      } else {
        x2 = X1; x1 = X2;
      }
      if (Y1 &lt; Y2) {
        y1 = Y1; y2 = Y2;
      } else {
        y2 = Y1; y1 = Y2;
      } Area =area;
  
    }
  
    bool NearestBox(Rect rect) {
  
      //for x-axis
      if (x1 == rect.x2 || x2 == rect.x1) {     
  
        if (y1 &gt;= rect.y1 &amp;&amp; y1 &lt; rect.y2) {
          return true;
        }
        if (y2 &gt; rect.y1 &amp;&amp; y2 &lt;= rect.y2) {
          return true;
        }
      }              
  
      // for y-axis    
  
      if (y1 == rect.y2 || y2 == rect.y1) {
        if (x1 &gt;= rect.x1 &amp;&amp; x1 &lt; rect.x2) {
          return true;
        }
        if (x2 &gt; rect.x1 &amp;&amp; x2 &lt;= rect.x2) {
          return true;
        }
      }
  
      return false;  
  
    }
  };
  
  int main() {
  
    vector&lt;Rect&gt; rects;     
                  //Rect(  x1 ,  y1  ,   x2  ,  y2   ,  area) 
    rects.push_back(Rect(0.0000,0.0000, 0.8147,0.1355, 0.1104));
    rects.push_back(Rect(0.8147,0.0000, 1.0000,0.1355, 0.0251));
  
    rects.push_back(Rect(0.8147,0.1355, 0.9058,0.8350, 0.0637));
    rects.push_back(Rect(0.0000,0.1355, 0.1270,0.9689, 0.1058 ));
  
    rects.push_back(Rect(0.9058,0.1355, 0.9134,0.2210, 0.0006));
    rects.push_back(Rect(0.9058,0.8350, 1.0000,1.0000, 0.0155));
    rects.push_back(Rect(0.8147,0.8350, 0.9058,1.0000, 0.0150));
  
  
  
    rects.push_back(Rect(0.1270,0.1355, 0.6324,0.3082, 0.0873));
    rects.push_back(Rect(0.1270,0.9689, 0.8147,1.0000, 0.0214));
    rects.push_back(Rect(0.0000,0.9689, 0.1270,1.0000, 0.0040));
  
    rects.push_back(Rect(0.9134,0.1355, 1.0000,0.2210, 0.0074));
    rects.push_back(Rect(0.9134,0.2210, 1.0000,0.8350, 0.0532));
    rects.push_back(Rect(0.9058,0.2210, 0.9134,0.8350, 0.0047));
  
  
    rects.push_back(Rect(0.6324,0.1355, 0.8147,0.3082, 0.0315));
    rects.push_back(Rect(0.6324,0.3082, 0.8147,0.9689, 0.1205));
    rects.push_back(Rect(0.1270,0.3082, 0.6324,0.9689, 0.3339));
  
    int b=13;
    int nearBox_count = 0;
    //double area=0;
    double TotalArea=0;
  
    for (int x = 0; x &lt; rects.size(); ++x) {
  
      if (rects[b].NearestBox(rects[x])) {  
        if (x==b) {
          continue; //this is our box , so do not count it.
        }
  
      nearBox_count++;
      printf("box[%d] is nearest to box[%d] and has area %f \n", (b+1), (x+1), rects[x].area);
  
      TotalArea +=rects[x].area;
  
      }
    }
  
    printf("Total number of nearest box for box[%d] = %d, and the sum of area is= %f \n", (b+1), nearBox_count, TotalArea );
  
    return 0;
  }
  </code></pre>
  
  <p>It prints the results-</p>
  
  <pre><code>box[14] is nearest to box[1] and has area 0.000000 
  box[14] is nearest to box[3] and has area 0.000000 
  box[14] is nearest to box[8] and has area 0.000000 
  box[14] is nearest to box[15] and has area 0.000000 
  Total number of nearest box for box[14] = 4, and the sum of area is= 0.000000 
  </code></pre>
  
  <p>So by comparing the results with the picture above, you can see that it returns the value of the nearest boxes but fails to return the value of their corresponding areas.</p>
  
  <p>Can anyone help me to fix that?</p>