チャレンジ
同じ幅と高さのカラーラスターイメージ*が与えられた場合、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の猫マップの反復アプリケーションの指定回数後の猫の画像と、繰り返しアプリケーションがどのように見えるかのアニメーションを見ることができます。
詳細
プログラムは必ずしも画像を処理する必要はありませんが、2D配列/行列、文字列、または同様の2D構造も受け入れられます。
(0,0)
ポイントが左下にあるか左上にあるかは関係ありません。(または、あなたの言語でこれがより便利な場合は、他のコーナーで。)提出で使用する規則を指定してください。
テストケース
マトリックス形式([1,2,3,4]
最上行、1
インデックスあり(0,0)
、2
インデックスあり(1,0)
、5
インデックスあり(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)
):