BoundingBox.java


Below is the syntax highlighted version of BoundingBox.java from §9.1 Geometric Primitives.


/******************************************************************************
 *  Compilation:  javac BoundingBox.java
 *  Execution:    java BoundingBox
 *  Dependencies: Point.java
 *
 *  Implementation of an axis-aligned rectangle.
 *
 ******************************************************************************/

public class BoundingBox { 
    private double x1, y1;   // lower left
    private double x2, y2;   // upper right
   
    public BoundingBox(double x1, double y1, double x2, double y2) {
        this.x1 = Math.min(x1, x2);
        this.x2 = Math.max(x1, x2);
        this.y1 = Math.min(y1, y2);
        this.y2 = Math.max(y1, y2);
    }

    public BoundingBox(Point p, Point q) {
        this(p.x, p.y, q.x, q.y);
    }

    // is Point p inside this BoundingBox?
    public boolean contains(Point p) {
        return (p.x >= x1 && p.x <= x2 && p.y >= y1 && p.y <= y2);
    }

    // does this BoundingBox r intersect s?
    public boolean intersects(BoundingBox s) {
        BoundingBox r = this;
        return (r.x2 >= s.x1 && r.y2 >= s.y1 && s.x2 >= r.x1 && s.y2 >= r.y1);
    }


    // return the area
    public double area() {
        return (x2 - x1) * (y2 - y1);
    }

    // return the area
    public String toString() {
        return "[(" + x1 + ", " + y1 + ") (" + x2 + ", " + y2 + ")]";
    }



    // test client
    public static void main(String[] args) {

        // check rectangle intersection
        BoundingBox r0 = new BoundingBox(0.25, 0.25, 0.75, 0.75);

        BoundingBox r1 = new BoundingBox(0.4, 0.4, 0.6, 0.6);    // r0 completely contains r1
        BoundingBox r2 = new BoundingBox(0.1, 0.1, 0.9, 0.9);    // r2 completely contains r0
        BoundingBox r3 = new BoundingBox(0.2, 0.2, 0.6, 0.6);    // intersection
        BoundingBox r4 = new BoundingBox(0.2, 0.2, 0.6, 0.6);    // intersection
        BoundingBox r5 = new BoundingBox(0.3, 0.3, 0.8, 0.5);    // intersection
        BoundingBox r6 = new BoundingBox(0.3, 0.3, 0.5, 0.8);    // intersection
        BoundingBox r7 = new BoundingBox(0.3, 0.3, 0.5, 0.8);    // intersection
        StdOut.println(r0.intersects(r1));
        StdOut.println(r0.intersects(r2));
        StdOut.println(r0.intersects(r3));
        StdOut.println(r0.intersects(r4));
        StdOut.println(r0.intersects(r5));
        StdOut.println(r0.intersects(r6));
        StdOut.println(r0.intersects(r7));

        BoundingBox r8  = new BoundingBox(0.1, 0.1, 0.2, 0.2);    // no intersection
        BoundingBox r9  = new BoundingBox(0.1, 0.1, 0.2, 0.8);    // no intersection
        BoundingBox r10 = new BoundingBox(0.1, 0.1, 0.8, 0.2);    // no intersection
        StdOut.println(r0.intersects(r8));
        StdOut.println(r0.intersects(r9));
        StdOut.println(r0.intersects(r10));
    }
}


Copyright © 2002–2016, Robert Sedgewick and Kevin Wayne.
Last updated: Tue Aug 30 10:09:18 EDT 2016.