/* Lab : Lab7 Day : Tuesday [ 23 Sept 08 ] Problem Number: 02 Problem Title : Developing two methods by use of class Axis_parallel_rect Theory : Please go through the code */ // This class had been discussed in class on 19sept (lecture 21) class point { double x; double y; public void setX(double x_value) { x = x_value; } public void setY(double y_value) { y = y_value; } public double distance_from_origin() { return Math.sqrt(x*x+y*y); } public void show_point() { System.out.print(" (" + x + "," + y + ")" ); } }; // This class had been discussed in class class triangle { point x; point y; point z; public void setX(point x_value) { x = new point(); x.setX(x_value.x); x.setY(x_value.y); } public void setY(point y_value) { y = new point(); y.setX(y_value.x); y.setY(y_value.y); } public void setZ(point z_value) { z = new point(); z.setX(z_value.x); z.setY(z_value.y); } public void show_triangle() { System.out.print(" (" + x + "," + y + "," + z+")" ); } } // Implimentation of class axis_parallel_rect [ problem 01 of this lab ] class axis_parallel_rect { point lower_left_corner; point upper_right_corner; // constructor with two point as parameter public axis_parallel_rect(point L, point U) { lower_left_corner = new point(); upper_right_corner = new point(); lower_left_corner.x = L.x ; lower_left_corner.y = L.y ; upper_right_corner.x = U.x ; upper_right_corner.y = U.y ; } // constructor with one point and two distance parameter public axis_parallel_rect(point L, double x_length, double y_length) { lower_left_corner = new point(); upper_right_corner = new point(); lower_left_corner.x = L.x ; lower_left_corner.y = L.y ; upper_right_corner.x = L.x + x_length; upper_right_corner.y = L.y + y_length; } // constructor without parameter public axis_parallel_rect() { lower_left_corner = new point(); upper_right_corner = new point(); lower_left_corner.x = 0; lower_left_corner.y = 0; upper_right_corner.x = 0; upper_right_corner.y = 0; } public double area() { return (upper_right_corner.x - lower_left_corner.x) * (upper_right_corner.y - lower_left_corner.y); } public double perimeter() { return 2*((upper_right_corner.x - lower_left_corner.x) + (upper_right_corner.y - lower_left_corner.y)); } public point center() { point centre = new point(); centre.x = (upper_right_corner.x + lower_left_corner.x) / 2 ; centre.y = (upper_right_corner.y + lower_left_corner.y) / 2 ; return centre; } public boolean is_inside(point P) { if ( (P.x >= this.lower_left_corner.x) && (P.x <= this.upper_right_corner.x) && (P.y >= this.lower_left_corner.y) && (P.y <= this.upper_right_corner.y) ) { return true; } return false; } }; class sol_lab7_prob02{ public static boolean Intersect(axis_parallel_rect R1, axis_parallel_rect R2) { point p = new point(); // Check any of the corners of R2 lies in R1 // Lower Left if( R1.is_inside(R2.lower_left_corner)) return true; // Lower Right p.setX(R2.upper_right_corner.x); p.setY(R2.lower_left_corner.y); if( R1.is_inside(p)) return true; // Upper Left p.setX(R2.lower_left_corner.x); p.setY(R2.upper_right_corner.y); if( R1.is_inside(p)) return true; // Upper Right if( R1.is_inside(R2.upper_right_corner)) return true; // Check any of the corners of R1 lies in R2 // Lower Left if( R2.is_inside(R1.lower_left_corner)) return true; // Lower Right p.setX(R1.upper_right_corner.x); p.setY(R1.lower_left_corner.y); if( R2.is_inside(p)) return true; // Upper Left p.setX(R1.lower_left_corner.x); p.setY(R1.upper_right_corner.y); if( R2.is_inside(p)) return true; // Upper Right if( R2.is_inside(R1.upper_right_corner)) return true; return false; } public static boolean Intersect(axis_parallel_rect R, triangle T) { /* Assumption: when any one out of the three corners of triangle lies inside the rectangle then only we say that the triangle and the rectangle does intersect. */ if( R.is_inside( T.x ) ) return true; if( R.is_inside( T.y ) ) return true; if( R.is_inside( T.z ) ) return true; return false; } public static void main(String args[]) { point point1 = new point(); point point2 = new point(); point1.setX( Integer.parseInt(args[0]) ); point1.setY( Integer.parseInt(args[1]) ); point2.setX( Integer.parseInt(args[2]) ); point2.setY( Integer.parseInt(args[3]) ); axis_parallel_rect A = new axis_parallel_rect(point1,point2); point1.setX( 0 ); point1.setY( 0 ); axis_parallel_rect rect2 = new axis_parallel_rect(point1,5,5); System.out.print("Rectancle A = " ); A.lower_left_corner.show_point(); A.upper_right_corner.show_point(); System.out.print("\nArea of rectangle A =" + A.area() ); System.out.print("\nPerimeter of rectangle A =" + A.perimeter() ); System.out.print("\nLength and Width of rectangle A =" + (A.upper_right_corner.x - A.lower_left_corner.x) +"," + (A.upper_right_corner.y - A.lower_left_corner.y) ); System.out.print("\nCentre of rectangle A ="); A.center().show_point(); System.out.print("\nWhether origin lies in A ="+ A.is_inside(point1) ); triangle tri1 = new triangle(); point1.setX( 1 ); point1.setY( 0 ); tri1.setX( point1 ); point1.setX( -1 ); point1.setY( 0 ); tri1.setY( point1 ); point1.setX( 0 ); point1.setY( 1 ); tri1.setZ( point1 ); System.out.print("\nWhether the triangle with endpoints : {(1,0)(-1,0)(0,1)} intersects the rectangle A : " + Intersect(A,tri1) ); System.out.println("\nWhether the axis parallel rectangle {(0,0), (5,5)} intersects the rectangle A : " + Intersect(A,rect2) ); } }