Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,709 questions

55,473 answers

573 users

How to determine whether two axis‑aligned rectangles overlap in PHP

1 Answer

0 votes
/*
Axis‑aligned rectangles are simply rectangles whose edges are parallel to the 
coordinate axes — meaning their sides are horizontal and vertical. 
That single assumption makes the overlap test dramatically simpler and faster.
*/

/*
    Rectangle overlap detection (axis-aligned)

    Each rectangle is defined by:
        - x, y : coordinates of its top-left corner
        - w, h : width and height

    Two rectangles DO NOT overlap if any separating condition is true:
        - One is completely to the left of the other
        - One is completely to the right of the other
        - One is completely above the other
        - One is completely below the other

    Otherwise, they overlap.

    This is the standard O(1) test for axis-aligned rectangles.
*/

class Rect {
    public float $x;   // top-left X
    public float $y;   // top-left Y
    public float $w;   // width
    public float $h;   // height

    public function __construct(float $x, float $y, float $w, float $h) {
        $this->x = $x;
        $this->y = $y;
        $this->w = $w;
        $this->h = $h;
    }
}

/*
    Returns true if rectangles A and B overlap.
*/
function rectanglesOverlap(Rect $A, Rect $B): bool {
    // Compute edges of A
    $A_left   = $A->x;
    $A_right  = $A->x + $A->w;
    $A_top    = $A->y;
    $A_bottom = $A->y + $A->h;

    // Compute edges of B
    $B_left   = $B->x;
    $B_right  = $B->x + $B->w;
    $B_top    = $B->y;
    $B_bottom = $B->y + $B->h;

    // Separating conditions:
    if ($A_right <= $B_left)   return false;   // A is left of B
    if ($B_right <= $A_left)   return false;   // B is left of A
    if ($A_bottom <= $B_top)   return false;   // A is above B
    if ($B_bottom <= $A_top)   return false;   // B is above A

    return true; // Otherwise, they overlap
}

// Example rectangles
$A = new Rect(10, 10, 30, 20);   // Example rectangle A
$B = new Rect(25, 15, 40, 25);   // Overlaps A
$C = new Rect(100, 100, 10, 10); // Does not overlap A

echo "A vs B overlap? " . (rectanglesOverlap($A, $B) ? "YES" : "NO") . "\n";
echo "A vs C overlap? " . (rectanglesOverlap($A, $C) ? "YES" : "NO") . "\n";



/*
run:

A vs B overlap? YES
A vs C overlap? NO

*/

 



answered Jul 18 by avibootz

Related questions

...