Tôi nhìn thấy một gif tuyệt vời của đường cong rồng đôi được làm từ một hình vuông, và tự hỏi điều gì sẽ xảy ra nếu chúng ta bắt đầu từ một hình ảnh cơ sở khác. Vì vậy, tôi đã viết một chương trình để làm điều này.
Thật tuyệt vời đến nỗi tôi nghĩ sẽ rất vui nếu làm điều đó như một thử thách.
Bài tập
Bạn sẽ chụp ảnh vuông có độ dài cạnh bằng 2 (lớn hơn 4).
Để tạo hình ảnh này, bạn nên bắt đầu bằng cách chia hình ảnh của bạn thành 4 dải dọc có kích thước bằng nhau và dịch chuyển các dải liền kề một phần 8 kích thước của hình ảnh theo hướng ngược lại (các dải dịch chuyển phải quấn quanh phía bên kia). Sau đó, bạn nên lặp lại quá trình này mỗi lần chia hình ảnh thành gấp đôi số lần phân chia và thay đổi một nửa so với lần trước. Mỗi lần lặp bạn nên xen kẽ giữa các ca dọc và ngang. Bạn nên lặp đi lặp lại cho đến khi sự thay đổi yêu cầu bạn thay đổi một số lượng pixel (phần này sẽ luôn là 1/2) tại thời điểm bạn hoàn thành.
Khi dịch chuyển các dải số lẻ theo chiều dọc từ bên trái (không có chỉ số) nên dịch chuyển xuống trong khi thậm chí dịch chuyển lên. Khi dịch chuyển các dải số lẻ theo chiều ngang từ trên xuống nên dịch chuyển sang trái trong khi các dải được đánh số chẵn sẽ dịch chuyển sang phải.
Bạn chỉ cần xuất / hiển thị kết quả cuối cùng của phép chuyển đổi, không phải tất cả các bước trung gian như trong gif.
Đây là môn đánh gôn, vì vậy mục tiêu là giảm thiểu độ dài của mã nguồn của bạn như được đo bằng byte.
Làm việc qua ví dụ
Tôi sẽ làm việc thông qua gif mèo được hiển thị ở đầu khung trang theo khung.
Đây là hình ảnh bắt đầu:
Hình ảnh này là 512 x 512 pixel. Chúng tôi sẽ chia nó thành 4 dải để bắt đầu và dịch chuyển từng dải bằng 1/8 kích thước hình ảnh (64 pixel) theo chiều dọc.
Bây giờ chúng tôi sẽ chia nó thành gấp đôi số băng tần (8 băng tần) và dịch chuyển nó một nửa so với lần trước (32 pixel). Lần này chúng ta sẽ thay đổi theo chiều ngang.
Bây giờ chúng ta sẽ dịch chuyển theo chiều dọc một lần nữa, lần này chia thành 16 dải và dịch chuyển mỗi dải bằng 16 pixel.
32 băng tần, 8 pixel, dịch chuyển ngang
64 dải, 4 pixel, dịch chuyển dọc.
128 băng tần, 2 pixel, dịch chuyển ngang.
256 dải, 1 pixel, dịch chuyển dọc.
Vì sự thay đổi tiếp theo sẽ yêu cầu chúng tôi di chuyển mỗi băng tần bằng một nửa pixel, chúng tôi sẽ dừng lại tại thời điểm này và đưa ra kết quả.
Các trường hợp thử nghiệm
Tôi có một kịch bản làm việc có thể tạo ra những hình ảnh này vì vậy tôi nghĩ tôi sẽ cho phép các bạn chọn hình ảnh cho các trường hợp thử nghiệm. Vì vậy, nếu bạn có một hình ảnh vuông có sức mạnh 2 chiều rộng mà bạn muốn thấy trở thành rồng hóa. Vui lòng gửi nó cho tôi và tôi sẽ biến nó thành một trường hợp thử nghiệm.
Bạn cũng nên kiểm tra trên một hình ảnh trắng hoặc đen đơn giản để bạn có thể xác định xem các pixel có biến mất hay không.
**Start** by shifting one 8th of the size of the image
thì repeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
lần đầu tiên sẽ là 1/8, lần thứ hai 1/16. 1/32 thứ ba cho đến khi số pixel là phân số. Tôi không thấy những gì không rõ ràng về điều này.