
package homework.ex00;
import java.util.Scanner;
/*
3. 2차원 평면에서 하나의 직사각형은 두 점으로 표현된다. (50, 50)과 (100, 100)의
두 점으로 이루어진 직사각형이 있다고 하자.
이때 키보드로부터 다른 직사각형을 구성하는 두 점(x1, y1), (x2, y2)를 입력받아
두 개의 직사각형이 서로 충돌하는지 판별하는 프로그램을 작성하세요
*/
public class CollisionRect {
public static void main(String[] args) {
Rect mainRect = new Rect(50, 50, 100, 100);
Rect subRect = getRect();
if(isCollisionRect(mainRect, subRect))
System.out.println("충돌됨");
else
System.out.println("충돌되지 않음");
}
static Rect getRect() {
Scanner sc = new Scanner(System.in);
System.out.print("x1: "); int x1 = sc.nextInt();
System.out.print("y1: "); int y1 = sc.nextInt();
System.out.print("x2: "); int x2 = sc.nextInt();
System.out.print("y2: "); int y2 = sc.nextInt();
sc.close();
Rect subRect = new Rect(x1, y1, x2, y2);
return subRect;
}
static boolean isCollisionRect(Rect rootRect, Rect compRect) {
boolean isCollision = false;
// 충돌 판별식
if(compRect.right >= rootRect.left &&
compRect.right <= rootRect.right &&
compRect.bottom >= rootRect.top &&
compRect.bottom <= rootRect.bottom)
isCollision = true;
else if(compRect.left >= rootRect.left &&
compRect.left <= rootRect.right &&
compRect.bottom >= rootRect.top &&
compRect.bottom <= rootRect.bottom)
isCollision = true;
else if(compRect.left >= rootRect.left &&
compRect.left <= rootRect.right &&
compRect.top >= rootRect.top &&
compRect.top <= rootRect.bottom)
isCollision = true;
else if(compRect.right >= rootRect.left &&
compRect.right <= rootRect.right &&
compRect.top >= rootRect.top &&
compRect.top <= rootRect.bottom)
isCollision = true;
return isCollision;
}
}
class Rect{
int left, top, right, bottom;
public Rect(int x1, int y1, int x2, int y2) {
if(x1 < x2) {
left = x1;
right = x2;
}else {
left = x2;
right = x1;
}
if(y1 < y2) {
bottom = y2;
top = y1;
}else {
bottom = y1;
top = y2;
}
}
}