How to test if a line segment intersects an axis-aligned rectange in 2D?

前端 未结 12 736
执念已碎
执念已碎 2020-11-30 07:33

How to test if a line segment intersects an axis-aligned rectange in 2D? The segment is defined with its two ends: p1, p2. The rectangle is defined with top-left and bottom-

12条回答
  •  -上瘾入骨i
    2020-11-30 08:02

    coding example in PHP (I'm using an object model that has methods for things like getLeft(), getRight(), getTop(), getBottom() to get the outer coordinates of a polygon and also has a getWidth() and getHeight() - depending on what parameters were fed it, it will calculate and cache the unknowns - i.e. I can create a polygon with x1,y1 and ... w,h or x2,y2 and it can calculate the others)

    I use 'n' to designate the 'new' item being checked for overlap ($nItem is an instance of my polygon object) - the items to be tested again [this is a bin/sort knapsack program] are in an array consisting of more instances of the (same) polygon object.

    public function checkForOverlaps(BinPack_Polygon $nItem) {
      // grab some local variables for the stuff re-used over and over in loop
      $nX = $nItem->getLeft();
      $nY = $nItem->getTop();
      $nW = $nItem->getWidth();
      $nH = $nItem->getHeight();
      // loop through the stored polygons checking for overlaps
      foreach($this->packed as $_i => $pI) {
        if(((($pI->getLeft()  - $nW) < $nX) && ($nX < $pI->getRight())) &&
           ((($pI->getTop()  - $nH) < $nY) && ($nY < $pI->getBottom()))) {
          return false;
        }
      }
      return true;
    }
    

提交回复
热议问题