사각형으로 만든 트윈 드래곤 커브 의 멋진 GIF 를 보았고 다른 기본 이미지에서 시작하면 어떻게 될지 궁금했습니다. 그래서 이것을하기위한 프로그램을 작성했습니다.
너무 시원해서 도전으로하는 것이 재미있을 것이라고 생각했습니다.
태스크
모서리 길이가 2 (4보다 큰) 인 정사각형 이미지를 촬영합니다.
이 이미지를 만들려면 먼저 이미지를 동일한 크기의 4 개의 수직 밴드로 나누고 인접한 밴드를 이미지 크기의 8 분의 1의 반대 방향으로 반대 방향으로 이동해야합니다 (이동 된 밴드는 다른쪽으로 감싸 야합니다). 그런 다음 이미지를 두 배의 분할로 나누고 이전 시간의 절반만큼 이동할 때마다이 프로세스를 반복해야합니다. 각 반복마다 수직 및 수평 시프트를 번갈아 가며 사용해야합니다. 시프트가 완료되는 시점에서 소수 픽셀 수만큼 이동해야 할 때까지 반복해야합니다 (이는 항상 1/2 임).
수직으로 홀수 번호의 밴드를 왼쪽에서 이동할 때 (0 인덱스) 위로 이동하는 동안 아래로 이동해야합니다. 수평 홀수 번호의 밴드를 이동할 때 상단부터 왼쪽으로 이동해야하며 짝수의 밴드는 오른쪽으로 이동해야합니다.
gif와 같은 모든 중간 단계가 아니라 변환의 최종 결과 만 출력 / 표시하면됩니다.
이것은 코드 골프 이므로 목표는 바이트 단위로 측정 한 소스 코드의 길이를 최소화하는 것입니다.
예제를 통해 작업
페이지 상단에 표시된 cat gif를 프레임 단위로 살펴 보겠습니다.
시작 이미지는 다음과 같습니다.
이 이미지는 512 x 512 픽셀입니다. 4 밴드로 나누고 각 밴드를 수직으로 이미지 크기 (64 픽셀)의 1/8만큼 시작하고 이동시킵니다.
이제 두 배의 밴드 (8 밴드)로 나누고 마지막 시간 (32 픽셀)까지 절반으로 이동합니다. 이번에는 수평으로 이동합니다.
이번에는 16 개 대역으로 분할하고 각 대역을 16 픽셀 씩 이동시켜 이번에는 수직으로 다시 이동합니다.
32 밴드, 8 픽셀, 수평 이동
64 밴드, 4 픽셀, 수직 이동.
128 밴드, 2 픽셀, 수평 이동.
256 밴드, 1 픽셀, 수직 이동.
다음 번 시프트에서는 각 밴드를 반 픽셀 씩 움직여야하므로이 시점에서 멈추고 결과를 출력합니다.
테스트 사례
이 이미지를 만들 수있는 작업 스크립트가 있으므로 테스트 사례에 대한 이미지를 선택할 수 있다고 생각했습니다. 따라서 2 너비의 제곱 인 정사각형 이미지가 있으면 용감하게됩니다. 저에게 보내 주시면 테스트 사례로 작성하겠습니다.
픽셀이 사라지는 지 여부를 확인할 수 있도록 일반 흰색 또는 검은 색 이미지를 테스트해야합니다.
**Start** by shifting one 8th of the size of the image
다음 repeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
첫 번째 시간은 1/8, 두 번째 1/16입니다. 픽셀 수가 소수가 될 때까지 세 번째 1/32 나는 이것에 대해 분명하지 않은 것을 보지 못한다.