Reto
Dada una imagen ráster de color * con el mismo ancho y alto, genera la imagen transformada bajo el mapa del gato de Arnold . (* detalles ver abajo)
Definición
Dado el tamaño de la imagen N
, suponemos que las coordenadas de un píxel se dan como números entre 0
y N-1
.
El mapa del gato de Arnold se define de la siguiente manera:
Se [x,y]
mueve un píxel en las coordenadas [(2*x + y) mod N, (x + y) mod N]
.
Esto no es más que una transformación lineal en el toro: la parte amarilla, violeta y verde se mapea de nuevo en el cuadrado inicial debido a mod N
.
Este mapa (llamémoslo f
) tiene las siguientes propiedades:
Es biyectivo , eso significa reversible: es una transformación lineal con la matriz
[[2,1],[1,1]]
. Como tiene determinante1
y solo tiene entradas enteras, el inverso también tiene solo entradas enteras y está dado por[[1,-1],[-1,2]]
, esto significa que también es biyectivo en coordenadas enteras.Es un elemento de torsión del grupo de mapas biyectivos de
N x N
imágenes, lo que significa que si lo aplica muchas veces, recuperará la imagen original:f(f(...f(x)...)) = x
la cantidad de veces que el mapa aplicado a sí mismo da como resultado la identidad será menor. o igual a3*N
. A continuación, puede ver la imagen de un gato después de un número determinado de aplicaciones iteradas del mapa del gato de Arnold , y una animación de cómo se ve una aplicación repetida:
Detalles
Su programa no necesariamente tiene que lidiar con imágenes, pero también son aceptables matrices / matrices 2D, cadenas o estructuras 2D similares.
No importa si su
(0,0)
punto está en la parte inferior izquierda o en la parte superior izquierda. (O en cualquier otro rincón, si esto es más conveniente en su idioma). Especifique qué convención utiliza en su envío.
Casos de prueba
En forma de matriz ( [1,2,3,4]
es la fila superior, 1
tiene índice (0,0)
, 2
tiene índice (1,0)
, 5
tiene índice (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
Como imagen (abajo a la izquierda (0,0)
):