명품 자바 프로그래밍 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("충돌 안함!");
}
}
}
}
}
'Works > Java' 카테고리의 다른 글
[Java] 소수점 이하 값이 있는 경우 출력, 값이 없는 경우 출력하지 않는 방법 (1) | 2020.05.16 |
---|
댓글