Tantangan ini adalah tentang secara bertahap mengubah rona dalam gambar untuk membuat gambar yang cantik seperti ini:
( asli )
Tantangan
Tulis program atau fungsi yang menggunakan dua bilangan bulat non-negatif dan gambar dalam format file gambar umum apa pun yang Anda pilih (Anda dapat mengambil jalur ke gambar atau data gambar mentah).
Kami akan memanggil integer pertama siklus dan integer kedua offset .
Kami juga akan menetapkan langkah titik mengambang sebagai 360 kali siklus dibagi dengan luas gambar, atau step = 360 * cycles / (image width * image height)
.
Untuk setiap piksel P dalam gambar, memindahkan satu baris sekaligus, kiri-ke-kanan, atas-ke-bawah (yaitu dalam urutan pembacaan jika pikselnya berupa huruf), lakukan hal berikut:
Meningkatkan rona dari P oleh diimbangi derajat (perulangan sekitar 360-0 jika perlu).
Kemudian tingkatkan offset dengan langkah .
Simpan, tampilkan, atau hasilkan gambar mentah yang dihasilkan dalam format file gambar apa pun yang umum.
Prosedur ini secara bertahap meningkatkan rona dari semua piksel dalam gambar, membuat putaran lingkaran penuh di sekitar pelangi rona , mulai dengan awalnya mengimbangi rona dengan offset .
Ketika siklus 1 dan offset adalah 0, seperti pada gambar Starry Night di atas, baris atas dan bawah piksel praktis tidak memiliki pergeseran rona tetapi di antaranya ada siklus warna penuh.
Detail
Siklus dapat berupa bilangan bulat non-negatif, tetapi Anda dapat menganggap bahwa offset dari 0 hingga 359 inklusif.
Ketika siklus adalah 0, setiap pixel dalam gambar akan memiliki rona bergeser persis diimbangi sejak langkah harus 0 juga. (Dalam hal ini jika offset adalah 0 maka gambar tidak berubah sama sekali.)
Anda dapat menganggap siklus dan offset adalah input mengapung jika diinginkan (yaitu,
1.0
bukan1
). (Saya menyadari mereka tidak perlu bilangan bulat sama sekali, itu hanya membuat tantangan lebih sederhana.)"Hue" mengacu pada versi ruang warna RGB, umum dalam model warna HSL / HSV .
Contohnya
Asli:
Siklus = 1, offset = 0:
Siklus = 1, offset = 180:
Asli:
Siklus = 2, offset = 60:
Asli:
(Terima kasih ArtOfCode .)
Siklus = 1, offset = 120:
Asli:
(Terima kasih Doorknob .)
Siklus = 1, offset = 0:
Siklus = 4, offset = 0:
Siklus = 200, offset = 0:
Siklus = 30000, offset = 0:
(Gambar-gambar ini mungkin bukan piksel yang sempurna karena imgur mengompresnya.)
Mencetak gol
Kode terpendek dalam byte menang. Tiebreaker adalah jawaban dengan suara lebih tinggi.
Jawaban yang memposting gambar tes keren mereka sendiri akan mendapatkan poin lebih banyak dari saya.