1351: 마인크래프트 3차원 골격 구조물 렌더링
문제 설명
태윤이는 마인크래프트에서 3차원 골격 구조물을 평면에 나타내고자 한다.
골격 구조물은 점의 위치와 점과 점을 잇는 선분으로 이루어져 있다.
마인크래프트는 실수값을 블록으로 표현할 수 없으므로 선 인근의 격자점을 통하여 선을 표현한다.
이때 주어진 점의 위치와 선분을 가지고 다음 사진처럼 3차원 골격 구조물을 평면에 렌더링 하고자 한다.
이때 선분을 선분 인근의 격자점으로 표현할 때 사용할 알고리즘은 Bresenham's line algorithm이다.
이때 점의 3차원 좌표와 선분의 양 끝점이 정보로 주어질 때 주어진 모든 선분을 z = 0 인 평면에 투영된 그림을 출력하여라.
먼저 점을 평면에 투영한 후 점을 선분으로 이어보자.
출력량이 많으니 출력하는데 걸리는 시간을 줄이는 것이 중요하다.
입력 설명
첫 줄에 꼭짓점의 개수 n, 선의 개수 m, 시점 좌표 x, y, z가 주어진다.
두 번째 줄부터 n개의 줄동안 n+1번째 줄에 n번 꼭짓점의 x, y, z의 좌표를 준다.
n+2번째 줄부터 m개의 줄 동안 n+m+1번째 줄에 m번 선의 두 끝점 u ,v의 번호를 준다.
입력값의 범위
1<= n <= 50
1<= m <= (n*n-n)/2
시점의 z좌표는 0보다 크다.
모든 주어진 좌표의 절댓값은 400을 넘지 않는다.
점의 z좌표는 시점 좌표의 z좌표보다 크지 않다.
주어진 선 중 중복되는 선은 존재하지 않는다.
출력해야 할 점의 위치가 출력의 범위를 벗어나지 않는다.
출력 설명
n개의 점을 시점에 대하여 z = 0 인 평면에 투영한 다음 m개의 선에 해당하는 격자점을 다음과 같이 출력하여라.
출력할 격자점은 ‘@’, 빈 지점은 ‘.’으로 출력한다.
출력의 범위는 –400<= x, y <=400 이다. (801x801의 2차원 행렬)
연결되지 않은 주어진 점은 출력하지 않는다.
입력 예시 Copy
8 12 0 0 16
19 9 -6
19 9 -20
5 9 -6
5 9 -20
19 -5 -6
19 -5 -20
5 -5 -6
5 -5 -20
1 2
1 3
2 4
3 4
1 5
2 6
5 6
3 7
5 7
4 8
6 8
7 8
출력 예시 Copy
https://url.kr/swh8np 에서 확인하세요.