프랙탈

시간 제한1초메모리 제한128 MB

요약
기본 폴리라인을 반복적으로 자기 유사하게 치환해 만든 프랙탈에서, 전체 길이 중 주어진 비율만큼 이동한 지점의 좌표를 구합니다.
난이도

보통10점 중 6점

유형
재귀, 기하, 수학
정답자
아직 제출이 없습니다

문제

프랙탈은 흥미로운 수학적 대상으로, 다음과 같은 성질을 자주 가진다.

  • 임의로 작은 규모에서도 나타나는 세밀한 구조,
  • 자기 유사성: 확대하면 부분이 전체의 복사본처럼 보인다,
  • 간단한 재귀적 정의.

근사적인 프랙탈은 구름, 눈송이, 산맥, 강줄기 등 자연 곳곳에서 볼 수 있다.

이 문제에서는 다음 절차로 만들어지는 프랙탈을 생각한다. 먼저 점 p1,p2,…,pnp_1, p_2, \dots, p_n 으로 정의되는 꺾은선(연결된 선분들의 사슬)에서 시작한다. 이 꺾은선이 깊이 1 의 프랙탈이다.

깊이 2 의 프랙탈을 만들려면 각 선분을 원래 꺾은선 전체를 축소·회전한 복사본으로 바꾼다. 이 복사본은 꺾은선의 첫 점 p1p_1 을 선분의 시작점으로, 마지막 점 pnp_n 을 선분의 끝점으로 보내는 유일한 닮음 변환(회전과 균등 축소만 사용하며 반사는 없다)으로 얻는다. 이 치환을 반복하여 매 단계마다 현재의 모든 선분을 원래 꺾은선의 변환된 복사본으로 바꾸면, 점점 더 세밀한 구조를 가지는 임의의 깊이 dd 의 프랙탈을 얻는다.

이러한 프랙탈의 복잡도는 깊이가 커질수록 빠르게 증가한다. 전체 길이에 대한 비율 ff 가 주어질 때, p1p_1 에서 출발하여 프랙탈 곡선을 따라 그 비율만큼 이동한 뒤 도달하는 점의 좌표를 구하려고 한다.

입력

첫 줄에는 테스트 케이스의 수를 나타내는 정수 cc (1≤c≤2001 \le c \le 200) 가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

  • 꺾은선의 점 개수를 나타내는 정수 nn (3≤n≤1003 \le n \le 100) 이 한 줄에 주어진다,
  • 이어지는 nn 개의 줄 중 ii 번째 줄에는 꺾은선의 연속된 점을 나타내는 두 정수 xix_i 와 yiy_i (−1000≤xi,yi≤1000-1000 \le x_i, y_i \le 1000) 가 주어진다,
  • 프랙탈의 깊이를 나타내는 정수 dd (1≤d≤101 \le d \le 10) 가 한 줄에 주어진다,
  • 이동하는 전체 길이의 비율을 나타내는 실수 ff (0≤f≤10 \le f \le 1) 가 한 줄에 주어진다.

꺾은선의 각 선분의 길이는 첫 점 (x1,y1)(x_1, y_1) 과 마지막 점 (xn,yn)(x_n, y_n) 사이의 거리보다 엄밀히 작다. 꺾은선 전체의 길이는 이 거리의 두 배보다 엄밀히 작다.

출력

각 테스트 케이스마다, 프랙탈 길이의 비율 ff 만큼 이동한 뒤 도달하는 점의 좌표를 한 줄에 출력한다.

(x,y)(x,y) 형식으로 출력하되, xx 와 yy 는 각각 소수점 아래 정확히 여섯 자리 로 쓰고 공백은 넣지 않는다. 예: (0.426777,2.000000).

예제3

  1. 예제 1

    입력
    1
    4
    -2 -2
    0 0
    0 2
    2 2
    3
    0.75
    
    예상 출력
    (0.426777,2.000000)
    
  2. 예제 2

    입력
    1
    4
    -2 -2
    0 0
    0 2
    2 2
    1
    0.0
    
    예상 출력
    (-2.000000,-2.000000)
    
  3. 예제 3

    입력
    1
    5
    1 1
    3 1
    4 2
    5 1
    7 1
    1
    0.9
    
    예상 출력
    (6.317157,1.000000)