도전
너비와 높이가 동일한 색상 래스터 이미지 *가 제공되면 Arnold의 cat map에서 변환 된 이미지를 출력합니다 . (* 자세한 내용은 아래 참조)
정의
이미지의 크기가 주어지면 N
픽셀의 좌표가 0
와 사이의 숫자로 주어진다고 가정합니다 N-1
.
Arnold의 고양이 맵 은 다음과 같이 정의됩니다.
좌표의 픽셀 [x,y]
이로 이동합니다 [(2*x + y) mod N, (x + y) mod N]
.
이것은 원환 체의 선형 변환에 지나지 않습니다. 노란색, 보라색 및 녹색 부분은로 인해 초기 사각형에 다시 매핑됩니다 mod N
.
이 맵 (이것을 호출하자 f
)에는 다음과 같은 속성이 있습니다
그것은 인 전단 사 수단 가역 것을 : 그것은 행렬로 선형 변환이다
[[2,1],[1,1]]
. 결정자가1
있고 정수 항목 만 있기 때문에 역수에는 정수 항목 만 있고로 주어집니다[[1,-1],[-1,2]]
. 이는 정수 좌표에서도 이항적임을 의미합니다.그것은이다 비틀림 의 전단 사지도 그룹의 요소
N x N
: 수단 당신이 그것을 충분히 많은 시간, 당신은 원본 이미지 다시 얻을 것이다 적용 할 경우 것으로, 이미지f(f(...f(x)...)) = x
신원의지도 자체에 적용되는 시간의 양의 결과를 이하로 보장된다 또는 같습니다3*N
. 다음에서는 Arnold의 cat map 을 반복해서 사용한 고양이 이미지 와 반복되는 애플리케이션의 모습을 애니메이션으로 볼 수 있습니다.
세부
프로그램이 반드시 이미지를 다룰 필요는 없지만 2D 배열 / 행렬, 문자열 또는 이와 유사한 2D 구조도 허용됩니다.
(0,0)
포인트가 왼쪽 하단에 있는지 또는 왼쪽 상단에 있는지는 중요하지 않습니다 . (또는 귀하의 언어로보다 편리한 경우 다른 구석에 있습니다.) 제출시 사용할 규칙을 지정하십시오.
테스트 케이스
행렬 형식으로 ( [1,2,3,4]
맨 위 행, 1
index (0,0)
, 2
index (1,0)
, 5
index가 있음 (0,1)
)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
maps to:
1 14 11 8
12 5 2 15
3 16 9 6
10 7 4 13
--------------------
1 2 3
4 5 6
7 8 9
map to:
1 8 6
9 4 2
5 3 7
이미지로 (왼쪽 아래는 (0,0)
) :