Dengan koordinat beberapa titik pada pesawat, dan jari-jari lingkaran yang mengelilingi setiap titik, gambar poligon yang mewakili lingkaran dan tepi tempat lingkaran bertemu. Tepi lurus akan selalu jatuh di sepanjang garis persimpangan lingkaran-lingkaran , tetapi mungkin tidak mengikuti panjang penuh dari garis-garis ini.
Per saran mbomb007 , bayangkan perilaku gelembung sabun 2D. Itu secara teknis salah, karena gelembung sabun akan selalu bertemu pada sudut 120 ° untuk meminimalkan energi, sementara lingkaran ini dapat bertemu di sudut manapun.
Ini adalah diagram Voronoi, minus bidang luas yang ditentukan. Terima kasih Andreas . Ini sebenarnya adalah generalisasi dari diagram Voronoi yang disebut diagram kekuatan .
Contohnya
Misalnya, diberi dua titik dan dua jari-jari, output mungkin terlihat seperti ini:
Tambahkan titik dan jari-jari lain dan hasilnya mungkin terlihat seperti ini:
Memasukkan
Anda dapat menyusun input sesuai keinginan Anda. Silakan kirim hasil dengan input berikut.
Tes 1
- x: 10, y: 10, r: 10
- x: 25, y: 12, r: 8
Tes 2
- x: 8, y: 10, r: 6
- x: 20, y: 8, r: 4
- x: 18, y: 20, r: 12
Keluaran
Keluaran harus grafis dan harus mencakup batas poligon, tetapi tidak ada lagi yang diperlukan. Poin dan persimpangan tidak perlu direpresentasikan seperti pada contoh.
Kendala
- Tidak ada titik di dalam jari-jari lingkaran lain.
- Aturan codegolf standar.
- Tidak ada jawaban dengan celah yang akan diterima, tetapi jangan ragu untuk bersenang-senang dengannya.
sumber
Jawaban:
Python 2,
473355 byteIni membaca satu set lingkaran sebagai
(x,y,r)
tupel pada stdin, dan menampilkan gambar dalam format PGM ke stdout. Ini bekerja kira-kira dengan menghitung fungsi jarak diagram pada setiap piksel, dan menaungi setiap piksel kurang dari satu piksel secara proporsional dengan jaraknya.Di sini fungsi jarak telah dibagi dengan 32 untuk membuatnya terlihat:
sumber
exec"%s=m%s(%s for u,v,r in L);"*4%('a','in','u-r','b','ax','v-r','c','in','u+r','d','ax','v+r')
C # ~ 2746
Ini adalah solusi dalam C #. Mungkin jauh dari optimal tetapi C # tidak akan memenangkan ini. Hanya ingin diriku membuktikan bahwa aku bisa melakukannya.
Input melalui commandline dengan menentukan nilai-nilai yang dipisahkan dengan spasi dalam urutan xyr Output adalah file 'l.bmp' di dalam direktori eksekusi.
Program menerima jumlah lingkaran apa pun.
Tes 1: 10 10 10 25 12 8
Tes 2: 8 10 6 20 8 4 18 20 12
Semua Matematika yang terlibat di sini didasarkan pada ini . Koordinat garis mudah diperoleh menggunakan formulars dari tautan. Namun mereka perlu diputar dengan sudut antara dua pusat cricles yang terlibat.
Untuk mengurangi panjang garis saya menghitung persimpangan mereka. Kemudian untuk persimpangan itu saya memeriksa apakah garis saat ini mencapai menjadi lingkaran yang bukan "induk dari garis" dan juga berisi persimpangan itu sendiri. Jika itu yang terjadi, ujung garis itu dikurangi menjadi lokasi persimpangan.
Lingkarannya sederhana untuk digambar, bagian yang "tidak perlu" sulit untuk dihilangkan, jadi saya menghasilkan solusi "karet", yang menghilangkan hal-hal yang tidak diperlukan lagi dengan mengecatnya lagi putih. Agak kasar memaksanya. Ini dilakukan dengan berjalan di sepanjang setiap tepi lingkaran dan memeriksa apakah piksel tersebut berada dalam jangkauan lingkaran lain.
Awalnya saya ingin menggulung metode menggambar lingkaran saya sendiri yang hanya menggambar lingkaran dengan sudut tertentu tetapi tidak berhasil dengan baik dan mengambil lebih banyak baris kode.
Benar-benar mengalami kesulitan menjelaskan ini jika Anda tidak memperhatikan ... Bahasa Inggris bukan ibuku bicara jadi aku minta maaf untuk itu.
Golf
Lebih banyak contoh kompleks (lingkaran atas masuk ke nilai y negatif)
sumber