Thử thách
Đưa ra một hình ảnh raster màu * có cùng chiều rộng và chiều cao, xuất ra hình ảnh được biến đổi dưới bản đồ mèo của Arnold . (* xem chi tiết bên dưới)
Định nghĩa
Với kích thước của hình ảnh, N
chúng tôi giả sử rằng tọa độ của một pixel được cho là số giữa 0
và N-1
.
Bản đồ mèo của Arnold sau đó được định nghĩa như sau:
Một pixel tại tọa độ [x,y]
được chuyển đến [(2*x + y) mod N, (x + y) mod N]
.
Đây không là gì ngoài một phép biến đổi tuyến tính trên hình xuyến: Phần màu vàng, tím và xanh lục được ánh xạ trở lại vào hình vuông ban đầu do mod N
.
Bản đồ này (hãy gọi nó f
) có các thuộc tính sau:
Nó là tính từ , có nghĩa là có thể đảo ngược: Đó là một phép biến đổi tuyến tính với ma trận
[[2,1],[1,1]]
. Vì nó có định thức1
và nó chỉ có các mục nguyên, nên nghịch đảo cũng chỉ có các mục nguyên và được đưa ra bởi[[1,-1],[-1,2]]
, điều này có nghĩa là nó cũng là tính từ trên tọa độ nguyên.Đây là một yếu tố xoắn của nhóm các bản đồ
N x N
hình ảnh mô phỏng , điều đó có nghĩa là nếu bạn áp dụng nó đủ nhiều lần, bạn sẽ lấy lại được hình ảnh gốc:f(f(...f(x)...)) = x
Số lần bản đồ được áp dụng cho chính nó sẽ được đảm bảo ít hơn hoặc bằng3*N
. Sau đây bạn có thể thấy hình ảnh của một con mèo sau một số ứng dụng lặp đi lặp lại của bản đồ mèo Arnold và một hình ảnh động về một ứng dụng lặp đi lặp lại trông như thế nào:
Chi tiết
Chương trình của bạn không nhất thiết phải xử lý hình ảnh, nhưng mảng / ma trận 2D, chuỗi hoặc cấu trúc 2D tương tự cũng được chấp nhận.
Không quan trọng là
(0,0)
điểm của bạn ở phía dưới bên trái hay bên trên bên trái. (Hoặc ở bất kỳ góc nào khác, nếu ngôn ngữ này thuận tiện hơn trong ngôn ngữ của bạn.) Vui lòng chỉ định quy ước bạn sử dụng trong nội dung gửi.
Tủ thử
Ở dạng ma trận ( [1,2,3,4]
là hàng trên cùng, 1
có chỉ mục (0,0)
, 2
có chỉ mục (1,0)
, 5
có chỉ mục (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
Như hình ảnh (phía dưới bên trái là (0,0)
):