Untuk banyak game yang dimainkan di grid, hexagon adalah Clearly Superior Choice ™. Sayangnya, banyak situs seni permainan gratis hanya memiliki set ubin yang mulus untuk peta persegi. Pada proyek sebelumnya, saya menggunakan beberapa di antaranya, dan secara manual mengubahnya menjadi segi enam.
Namun , saya sudah malas di usia tua saya. Seharusnya mudah untuk mengotomatiskan proses dengan skrip kecil.
Namun , saya sudah malas di usia tua saya. Jadi saya outsourcing untuk Anda, dan menyamarkannya sebagai tantangan kode golf 1 .
Memasukkan
Input adalah gambar persegi dalam format gambar umum apa pun yang mampu warna RGB 24-bit. Anda juga dapat menggunakan nama file sebagai input dan bukan data gambar itu sendiri.
Anda dapat menganggap gambar itu persegi, dan panjang sisi adalah kelipatan empat.
Keluaran
Output adalah ubin input, tetapi dikonversi ke segi enam (gambar itu sendiri akan persegi, dengan area transparan). Anda dapat menyimpannya ke file atau tampilan ke layar.
Sekali lagi, format gambar umum apa pun akan dilakukan. Jika format yang Anda gunakan mendukung transparansi, area latar belakang harus transparan. Jika tidak, Anda dapat menggunakan warna # FF00FF (yang fuchsia mengerikan) sebagai pengganti.
metode
jadi bagaimana kita melakukannya? Metode yang saya gunakan 2 squash gambar sedikit vertikal, tetapi secara keseluruhan terlihat cukup bagus untuk sebagian besar hal. Kami akan melakukan contoh dengan gambar input ini:
- Skala: Skala gambar ke rasio 3: 2. Karena gambar kami akan berbentuk bujur sangkar, ini berarti Anda cukup menskalakannya menjadi 75% lebar dan 50% tinggi. Input contoh kami adalah 200x200, jadi kami menghasilkan gambar 150x100 ini:
- Tile: Taruh salinan gambar yang Anda diskalakan dalam kisi 2x2:
- Pangkas: Ambil hexagon berukuran tepat dari mana saja di kisi 2x2 ini. Sekarang, untuk kemudahan pemasangan, segi enam ini tidak terlalu teratur. Setelah memotong kuadrat dari ukuran aslinya (di sini 200x200), Anda kemudian memotong sudut. Garis pangkas harus berjalan dari (kira-kira) pusat dari setiap sisi kiri / kanan ke seperempat dari tepi di atas / bawah:
Dan itu adalah hasil Anda!
Berikut ini contoh tampilannya saat ubin (diperbesar di sini):
Ini adalah kode golf, jadi kode terpendek dalam byte menang. Celah standar berlaku, dll.
1 Jangan ragu untuk percaya ini atau tidak.
2 Metode satu dari situs bermanfaat ini.
Jawaban:
Matlab,
223 215 209 184163 bytePenyalinan kembali cukup lurus ke depan. Untuk memotong sudut saya overlay sistem koordinat atas piksel, dan membuat topeng melalui empat ketidaksetaraan linier, yang menentukan luas segi enam.
PS: Ini berubah menjadi permainan codegolf nim dengan pengajuan @ MartinBüttner: Anda secara bergantian harus membuat kode Anda lebih pendek (sambil memberikan fungsionalitas yang sama) - yang dapat membuat 'pemendekan' terakhir menang =)
sumber
[k.*[2 3]/4]
.Mathematica,
231211209208201188173 byteIni adalah fungsi tanpa nama yang mengambil objek gambar dan mengembalikan objek gambar:
Saya rasa tidak banyak yang bisa dijelaskan di sini, tetapi beberapa detail yang perlu diperhatikan:
ImageAssemble[{{#,#},{#,#}}]
, yaitu Anda menyerahkanImageAssemble
matriks 2x2 dengan salinan gambar. Namun adaImageCollage
yang semacam fungsi sihir yang mencoba untuk mengatur banyak gambar "sebaik" mungkin (apa pun artinya ... Anda bahkan dapat memberikan bobot dan barang gambar individu). Bagaimanapun, jika Anda memberikannya empat gambar dengan ukuran yang sama dan dengan bobot yang sama (atau tidak sama), itu juga akan mengaturnya dalam kisi 2x2. Itu memungkinkan saya untuk menyimpan beberapa byte untuk bersarang dari matriks, serta nama fungsi.Graphics
. Saya menggunakan built-inRegularPolygon@6
, tetapi menerapkan rasio aspek1
untuk meregangkannya jika diperlukan. Sayangnya,Graphics
perlu beberapa opsi mahal untuk menghindari bantalan dan semacamnya, dan itu juga menjadikan hitam putih bukannya sebaliknya. Hasilnya diperbaiki denganColorNegate
dan kemudian dilampirkan ke saluran asli gambar denganSetAlphaChannel
.Graphics
menempatkan sejumlah kecil padding di sekitar segi enam, tetapi kami ingin alpha hexagon untuk menutupi ukuran penuh potongan itu. Namun,SetAlphaChannel
dapat menggabungkan gambar dengan ukuran berbeda, dengan memusatkannya di atas satu sama lain dan memotong ke ukuran terkecil. Itu berarti, alih-alih mengatur secara manualPlotRangePadding->0
, kita cukup meningkatkan skala gambar segi enam denganImageSize->1.05e
(dan kita tetap memerlukan opsi `ImageSize).sumber
HTML5 + Javascript, 562 byte
Mengambil input sebagai URL gambar melalui kotak teks (URL semoga dianggap sebagai nama file). Output data ke kanvas.
Versi yang berfungsi di semua browser (580 byte):
Uji dengan gambar "blok" dari sebelumnya melalui URL ini: http://i.stack.imgur.com/gQAZh.png
sumber
id=A
ke<form>
danid=B
ke<canvas>
, kemudian menggantil[0]
denganA
danl[1]
denganB
, dan menghapusl=document.body.children;
. (Bekerja di Firefox 41; tidak yakin browser mana yang mendukung ini.) Juga, saya percaya ada beberapa titik koma yang tidak perlu di sebelah tanda kurung kurawal, dan beberapa ruang ekstra.id=C
ke<input>
, kemudian gantie.target.children[0]
denganC
.0.75
sama dengan3/4
,1/0.75
sama dengan4/3
,d/4+d/2
sama dengand*3/4
, dan memimpin nol pada desimal lainnya tidak diperlukan. Saya juga yakin Anda bisa mengganti yang pertamac.drawImage
denganc[p="drawImage"]
, lalu setiap yang berikutnya denganc[p]
; Anda dapat melakukan hal yang sama dengannyac.lineTo
.Python 2 + PIL, 320
Membaca nama file gambar dari stdin.
sumber
PIL
gunanya mencoba dan saya tidak cukup memikirkannya. Saya masih mendukung pernyataan baris baru saya: PPHP, 293 byte
Saya telah menambahkan beberapa baris baru untuk keterbacaan:
Ini adalah versi yang tidak dikoleksi:
sumber