- 20, Oct 2024
- #1
Испытание
Учитывая цветное растровое изображение* одинаковой ширины и высоты, выведите изображение, преобразованное под Карта кошек Арнольда. (*подробности см. ниже)
Определение
Учитывая размер изображения
(0,0)
we assume that the coordinates of a pixel are given as numbers between 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,1)
.
Карта кошек Арнольда тогда определяется следующим образом:
Пиксель по координатам 5
is moved to (1,0)
.
Это не что иное, как линейное преобразование тора: желтая, фиолетовая и зеленая части отображаются обратно на исходный квадрат из-за 2
.
Эта карта (назовем ее (0,0)
) has following properties:
Это биективный, это означает обратимое: это линейное преобразование с матрицей
1
. Since it has determinant[1,2,3,4]
и он имеет только целочисленные записи, обратный вариант также имеет только целочисленные записи и определяется выражением(0,0)
, this means it is also bijective on integer coordinates.Это кручение элемент группы биективных отображений
3*N
images, that means if you apply it sufficiently many times, you will get the original image back:f(f(...f(x)...)) = x
Количество раз, когда карта, примененная к самой себе, приводит к идентичности, гарантированно будет меньше или равноN x N
. In the following you can see the image of a cat after a given number of iterated applications of Карта кошек Арнольдаи анимацию того, как выглядит повторяющееся приложение:
Подробности
Ваша программа не обязательно должна иметь дело с изображениями, но 2D-массивы/матрицы, строки или подобные 2D-структуры также приемлемы.
Не имеет значения, является ли ваш
[[1,-1],[-1,2]]
point is on the bottom left or on the top left. (Or in any other corner, if this is more convenient in your language.) Пожалуйста, укажите, какое соглашение вы используете в своем сообщении.
Тестовые случаи
В матричной форме ( 1
is the top row, [[2,1],[1,1]]
имеет индекс f
, mod N
имеет индекс [(2*x + y) mod N, (x + y) mod N]
, [x,y]
имеет индекс N-1
)
0
Как изображение (слева внизу N
):
#код-гольф #графический вывод #обработка изображений #линейная алгебра #повторное преобразование