Tujuan dari tantangan ini adalah untuk menentukan sudut garis dalam gambar.
Aturan pada gambar:
- Latar belakang gambar akan menjadi putih (
#FFFFFF
) - Garis garis akan menjadi hitam (
#000000
) - Baris ini TIDAK akan anti-alias
- Gambar akan berukuran 100x100 piksel
- Garis akan mulai di tengah gambar
- Garis akan mulai menunjuk ke bawah (6-OClock)
- Panjangnya 50 piksel
- Sudut garis akan diukur berlawanan arah jarum jam dari posisi awal
- Codec gambar akan berupa
.jpg
atau.png
Format input akan menjadi nama file yang dilewatkan oleh baris perintah, input skrip, atau fungsi. Format output sederhana - cukup output jumlah derajat (misalnya 90
).
Jawaban bisa ± 1 derajat dari ukuran yang dinyatakan. Berikut adalah beberapa contoh gambar:
Gambar referensi pada 45 derajat dengan latar belakang abu-abu
0 derajat
45 derajat
50 derajat
130 derajat
230 derajat
324 derajat
Berikut adalah kode yang digunakan untuk membuat gambar (ini diberi kode Memproses ):
int deg = 45;
int centX = width/2, centY = height/2;
background(255);
noSmooth();
line(centX,
centY,
centX + sin(radians(deg))*50,
centY + cos(radians(deg))*50);
saveFrame("line-"+deg+".png");// image codec can be changed here. use '.png' or '.jpg'
code-golf
image-processing
J Atkin
sumber
sumber
Jawaban:
Pyth -
2826 byteMenggunakan strategi brute force yang sama dengan jawaban js.
Mengambil input sebagai nama file dari stdin.
sumber
JavaScript (ES6), 225
227244byteMari kita mulai menggulirkan bola:
Cukup berikan URL gambar ke fungsi:
Memperingatkan derajat dalam kisaran ± 1. Lulus semua kasus uji.
Tidak disatukan
Suntingan
sumber
s=>{(i=new Image).src=s;with(Math)with(document.createElement`canvas`.getContext`2d`)for(drawImage(i,0,0,100,100),a=360;r=--a/180*PI;)getImageData(50+48*cos(r),50+48*sin(r),1,1).data[1]||alert((450-a)%360)}
file://
. Anda perlu mengaturcrossOrigin
properti. Juga, itu tidak akan berfungsi jika pemuatan gambar membutuhkan waktu 0,00001 detik lebih banyak daripada membuat kanvas. Juga, Anda tidak perluf=
, memotong 2 byte. Tapi itu memang solusi yang bagus !!! Suara positif saya untuk itu.onload
bagian karena saya dilemahkan dalam tantangan lain karena itu. Jadi saya pikir tidak apa-apa untuk menganggap bahwa itu memuat cukup cepat. Mengenai fungsi anonim, saya tidak yakin bagaimana cara menghitungnya. Jika saya memotongf=
dan saya ingin memohonnya saya harus membungkusnya()
seperti(s=>{})('arg');
. Bisakah saya mengabaikan ini dalam hitungan byte?Matlab,
118104 byteSaya menghasilkan matriks dengan ukuran yang sama dengan gambar dengan bilangan kompleks (0 di tengah) dan mengecualikan dari matriks nilai-nilai yang ada di baris. Argumen rata-rata tersebut kemudian ditampilkan.
Terima kasih kepada @ThomasKwa yang menyarankan peningkatan akurasi yang juga menghasilkan kode yang lebih pendek !!!
sumber
Matlab,
8677 byteBerikut cara lain menggunakan Matlab:
Ini membaca file (dicuri dari flawr ), dan menemukan indeks piksel hitam. Kemudian, ia bekerja pada vektor yang menunjuk dari pusat gambar ke setiap piksel hitam, dan menggunakan
atan2d
untuk menemukan sudut, membulatkan untuk mendapatkan sudut bilangan bulat, dan melakukanmod(...,360)
untuk mendapatkan hasil dalam kisaran yang tepat. Untuk mendapatkan sudut yang benar (ada sedikit kesalahan untuk piksel dekat dengan pusat), ambil sudut yang paling sering dihitung.Terima kasih kepada slvrbld untuk
im2bw
sarannya!sumber
Labview, 10098 Bytes
Mari kita taruh kode labview lain di luar sana.
Karena tidak ada cara resmi untuk menghitung byte di labview saya menggunakan ukuran file saat disimpan. Atau menghitung setiap kawat dan fungsi sebagai 1 dan kasing 2 maka akan menjadi 71.
Muat gambar, ratakan ke 1D, pindai 0s dari kedua sisi dan ambil yang pertama, kembalikan ke titik dan gunakan geometri untuk mendapatkan sudut.
sumber
,
tempat desimal.