2015-10-19 21 views
1

我有一個名爲Rectangle的類,它由兩對整數組成,意思是表示一個矩形的左上角和右下角的XY座標。我還有一個名爲Quadrant的類,它由X值分別爲正方形區域上的最左邊,中間和最右邊的點(分別爲leftX,midX和rightX)以及頂部,中部和底部的相似值Y平面(botY,midY,topY)。我想確定給定的矩形是否接觸給定象限的x或y平面的中間部分。現在,這是我這樣做代碼:查找矩形是否觸及一條線

boolean isIntersect(Rectangle rect, Quadrant node) 
    { 

     boolean xOver = false; 
     boolean yOver = false; 




     if((rect.bottomRight.x >=node.midX && rect.topLeft.x <= node.midX) || 
      (rect.bottomRight.x <=node.midX && rect.topLeft.x >= node.midX)) 

     { 
      xOver = true; 
     } 

     if((rect.bottomRight.y <= node.midY && rect.topLeft.y >= node.midY) || 
      (rect.bottomRight.y >= node.midY && rect.topLeft.y <= node.midY)) 
     { 

      yOver = true; 
     } 



     if (yOver || xOver == true) 

     { 
      System.out.println("intersection found"); 
      return true; 
     } 

     else 
     { 
      System.out.println("no intersection found"); 
      return false; 
     } 

    } 

測試此代碼與隨機矩形後,我知道有很多這並不能掩蓋的情況下,但我不知道哪些或如何解決它們。有誰知道更好,更徹底的算法?

+0

那麼矩形是ax-paralell? – AlexWien

+0

你可能會考慮在codereview.stackexchange.com上發佈此代碼後,你認爲你已經獲得了大部分(或全部)角落:) –

回答

1

你的算法很好。這裏實施了一點清潔劑;你正在使用比你需要更多的布爾值。

boolean isIntersect(Rectangle rect, Quadrant node) 
{ 
    return (rect.bottomRight.x >=node.midX && rect.topLeft.x <= node.midX) 
     || (rect.bottomRight.y <= node.midY && rect.topLeft.y >= node.midY) 
} 

在代碼中,它看起來像你還在試驗,其中,爲矩形,

bottomRight.x <= node.midX && topLeft.x >= node.midX 

意味着右下角真的是你的矩形的左下角的情況下左上角確實是右上角。 (在你的y值測試中有類似的情況。)

創建矩形時,你會做任何事情來確保給出的右下角和左上角的座標真的代表那些角?