본문 바로가기
Works/Java

[Java] (x1,y1),(x2,y2) 두 점으로 이루어진 사각형이 (50,50,),(100,100) 두 점으로 이루어진 사각형과의 충돌 여부 판별 코딩

by Uncle.GOM 2020. 5. 17.

명품 자바 프로그래밍 2장 실습문제 8번

 

문제 : 2차원 평면에서 하나의 직사각형은 두 점으로 표현된다, (50, 50)과 (100, 100)의

        두 점으로 이루어진 직사각형이 있다고 하자. 이때 키보드로부터 다른 직사각형을

        구성하는 두점 (x1, y1), (x2, y2)를 입력받아 두 개의 직사각형이 서로 충돌하는지

        판별하는 프로그램을 작성하라.

import java.util.Scanner;

public class Chapter2_Training08 {
	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);

		/* 문제에 나온 것처럼 숫자 4개를 입력 받는 코드 
		 * System.out.println("두점 (x1,y1), (x2,y2)의 좌표를 입력하시오.");
 		 * int x1 = sc.nextInt();
		 * int y1 = sc.nextInt();
		 * int x2 = sc.nextInt();
		 * int y2 = sc.nextInt();*/

/* 숫자를 일일이 입력하기 귀찮아서 위의 코드는 주석 처리하고 
 * 1~200까지의 숫자 중 랜덤하게 4개를 받고 10번을 반복하게 만들었음 */

		for(int i=0; i<10; i++){
			int tmpX1 = (int)(Math.random()*199)+1;
			int tmpY1 = (int)(Math.random()*199)+1;
			int tmpX2 = (int)(Math.random()*199)+1;
			int tmpY2 = (int)(Math.random()*199)+1;
			int x1, x2, y1, y2;

/* 계산을 좀더 쉽게 하기 위해 tmpX1과 tmpX2, tmpY1과 tmpY2 각각 
 * 둘 중에 작은 수를 x1, y1에 배치, 
 * 사각형이기 때문에 x1과 x2, y1과 y2의 값이 서로 바뀌어도 상관 없음 */

			x1 = tmpX1; x2 = tmpX2; y1 = tmpY1; y2 = tmpY2;
			if (tmpX1 > tmpX2){ x1 = tmpX2; x2 = tmpX1;}
			if (tmpY1 > tmpY2){ y1 = tmpY2; y2 = tmpY1;}

			System.out.println("("+x1+", "+y1+")/("+x2+", "+y2+")");

/* x1 이나 y1이 100보다 크면 사각형의 시작점이 이미 (50,50),(100,100)의
 * 사각형의 범위를 넘어가 있어서 절대 충돌할 수 없음. */

			if (x1 > 100 || y1 > 100) {
				System.out.println("절대 충돌 안함!");
			}else{

/* 사각형의 시작점이 100보다 작고 사각형의 끝 점인 (x2,y2)가 
 * 최소 충돌 범위인 (50,50)안에 있으면 충돌 판정 */

				if (x2 >= 50 && y2 >= 50) {
					System.out.println("충돌");
				}else{
					System.out.println("충돌 안함!");
				}
			}
		}
	}
}

댓글