İşte sizin için aldatıcı zorlu bir geometri bulmacası!
Bir çevre göz önüne alındığında A, ve ndiğer çevreleri B[n]içinde, içerdiği toplam alanı bulmak Aolduğunu değil herhangi daire içinde B.
Kodunuz mümkün olduğunca kısa olmalıdır.
Giriş
Girişinizde aşağıdaki bilgiler bulunmalıdır:
- Dairenin yarıçapını temsil eden kayan nokta sayısı
A. - İçindeki dairelerin yarıçaplarını temsil eden kayan nokta sayılarının listesi
B. - İçindeki çevrelerin merkezlerinin listesi
B. Programınız merkezlerin kutupsal veya Kartezyen koordinatlarda olmasını bekleyebilir. - İsteğe bağlı olarak,
nB'deki daire sayısını alabilirsiniz . Bu giriş gerekli değildir.
Dairenin merkezinin Abaşlangıç noktası, yani nokta olduğu varsayılacaktır (0, 0).
İki dairenin Baynı olmadığı garanti edilir , ancak aşağıdakilerin garanti edilmez : Bkesişen tüm daireler A, tüm merkezler Bdışarıdadır AveyaB birbiriyle kesişen . Çözümünüzün çeşitli kenar durumlarını ele alabileceğinden emin olun.
Girişi herhangi bir sırada ve metin girişi (stdin veya dilinizin eşdeğeri aracılığıyla), işlev parametreleri veya komut satırı bağımsız değişkenleri şeklinde alabilirsiniz.
Metin girişi almayı seçerseniz, giriş parçaları arasında bir veya iki karakterlik yazdırılabilir ASCII sınırlayıcılar olmalıdır.
Çıktı
Programınız veya işleviniz A,B . Yanıtlarınız tüm test senaryoları için en az üç anlamlı rakama doğru olmalıdır.
Genel kod golf kuralları geçerlidir.
Çözümünüz, bir alan belirlemek için dairelerdeki örnekleme noktalarına güvenmemelidir.
Çevrelerin kesişimlerini otomatik olarak bulan, çevrelerin kesişim noktalarındaki alanları bulan veya bu sorunu hemen çözen yerleşiklere izin verilmez.
Test Durumları
Her görüntüde, daire Amavi ile, daireler Byeşil ile işaretlenmiş ve siyahla doldurulmuştur. Döndürülmesi gereken alan kırmızı ile doldurulur.
( Çözümlerimi kontrol ettiği için Rainer P.'ye özel teşekkürler )
Test örneği 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
Test örneği 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
Test örneği 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
Test durumu 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
Test durumu 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
Önerilen Okuma:
Fewell, MP "Üç Çemberin Ortak Çakışma Alanı." Ekim 2006. Web.http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
Bdiğerini içerdiği bir test durumunuz yok gibi görünüyor . Bunu eklemeye değer olabilir.
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, getirir ve burada 18969.69009cevap olarak.








