Inilah teka-teki geometri yang menantang untuk Anda!
Diberikan lingkaran A, dan nlingkaran lainnya B[n], temukan total area yang terkandung di dalamnya Ayang tidak ada di dalam lingkaran B.
Kode Anda harus sesingkat mungkin.
Memasukkan
Masukan Anda harus berisi informasi berikut:
- Angka floating-point untuk mewakili jari-jari lingkaran
A. - Daftar angka floating-point untuk mewakili jari-jari lingkaran di
B. - Daftar pusat lingkaran di
B. Program Anda mungkin mengharapkan pusat dalam koordinat kutub atau Cartesian. - Secara opsional, Anda dapat menerima jumlah
nlingkaran di B. Input ini tidak diperlukan.
Harus diasumsikan bahwa pusat lingkaran Aadalah asal, yaitu titik (0, 0).
Dijamin tidak ada dua lingkaran Byang identik, tetapi tidak dijamin bahwa: semua lingkaran Bberpotongan A, semua pusat Bberada di luar A, atau tidak ada dua lingkaran yang Bsaling berpotongan. Pastikan solusi Anda dapat menangani berbagai kasus tepi.
Anda dapat menerima input dalam urutan apa pun, dan dalam bentuk input teks (melalui stdin atau bahasa Anda yang setara), parameter fungsi, atau argumen baris perintah.
Jika Anda memilih untuk menerima input teks, harus ada satu atau dua karakter pembatas ASCII yang dapat dicetak di antara potongan input.
Keluaran
Program atau fungsi Anda harus menampilkan angka floating-point tunggal yang mewakili area total Atidak dalam lingkaran mana pun di B. Jawaban Anda harus akurat untuk setidaknya tiga angka penting untuk semua kasus uji.
Aturan golf-kode umum berlaku.
Solusi Anda tidak harus bergantung pada titik pengambilan sampel dalam lingkaran untuk menentukan area.
Built-in yang secara otomatis menemukan persimpangan lingkaran, menemukan area dalam persimpangan lingkaran, atau menyelesaikan masalah ini segera dilarang.
Uji Kasus
Di setiap gambar, lingkaran Adiuraikan dalam warna biru, dengan lingkaran yang Bdiuraikan dalam hijau dan diisi hitam. Area yang harus dikembalikan diisi merah.
(Terima kasih khusus kepada Rainer P. untuk memeriksa solusi saya)
Uji kasus 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
Uji kasus 2:
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
Uji kasus 3:
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
Uji kasus 4:
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
Uji kasus 5:
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
Bacaan yang disarankan:
Fewell, MP "Area Tumpang tindih Umum Tiga Lingkaran." Oktober 2006. Web. http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
Bberisi yang lain. Mungkin perlu ditambahkan.
1.8970e+04.
B[0] - A intersection: 20653.659515, B[1] - A intersection: 20757.824115, B[1] - B[0] intersection: 1841.847766, B[2] - A intersection: 1289.164541, yang menghasilkan 18969.69009sebagai jawabannya.








