Oto zwodniczo trudna łamigłówka geometrii dla Ciebie!
Biorąc pod uwagę krąg Ai ninne kręgi B[n], znajdź całkowity obszar w nim zawarty, Aktóry nie znajduje się w żadnym kręgu B.
Twój kod powinien być jak najkrótszy.
Wejście
Twój wkład powinien zawierać następujące informacje:
- Liczba zmiennoprzecinkowa reprezentująca promień okręgu
A. - Lista liczb zmiennoprzecinkowych reprezentujących promienie okręgów
B. - Lista centrów kół w
B. Twój program może oczekiwać centrów we współrzędnych biegunowych lub kartezjańskich. - Opcjonalnie możesz otrzymać liczbę
nkręgów w B. To wejście nie jest wymagane.
Należy założyć, że środek koła Ajest początkiem, to znaczy punktem (0, 0).
To jest zagwarantowane, że żadne dwa okręgi Bsą identyczne, ale to nie gwarantuje, że: wszystkie okręgi Bprzecinają się A, wszystkie ośrodki Bsą na zewnątrz A, a nie dwa okręgiB przecinają się nawzajem. Upewnij się, że Twoje rozwiązanie obsługuje różne przypadki brzegowe.
Możesz otrzymywać dane wejściowe w dowolnej kolejności, w formie wprowadzania tekstu (przez stdin lub odpowiednik twojego języka), parametrów funkcji lub argumentów wiersza poleceń.
Jeśli zdecydujesz się na wprowadzanie tekstu, pomiędzy fragmentami tekstu powinien znajdować się jeden lub dwa znaki ograniczające ASCII.
Wynik
Twój program lub funkcja powinna wypisać pojedynczą liczbę zmiennoprzecinkową reprezentującą całkowity obszar Aspoza żadnego z okręgówB . Twoje odpowiedzi powinny być zgodne z co najmniej trzema znaczącymi liczbami dla wszystkich przypadków testowych.
Obowiązują ogólne zasady gry w golfa .
Twoje rozwiązanie nie powinno opierać się na punktach próbkowania w okręgach, aby określić obszar.
Wbudowane funkcje, które automatycznie lokalizują przecięcia okręgów, znajdują obszary w przecięciach okręgów lub natychmiast rozwiązują ten problem, są niedozwolone.
Przypadki testowe
Na każdym zdjęciu koło Ajest obrysowane na niebiesko, a koła Bna zielono i wypełnione czernią. Obszar, który należy zwrócić, jest wypełniony na czerwono.
(Specjalne podziękowania dla Rainera P. za sprawdzenie moich rozwiązań)
Przypadek testowy 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
Przypadek testowy 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
Przypadek testowy 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
Przypadek testowy 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
Przypadek testowy 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
Sugerowane czytanie:
Fewell, MP „Obszar wspólnego nakładania się trzech kół”. Październik 2006. Internet. http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
Bzawiera inne. Może warto to dodać.
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, który daje 18969.69009jako odpowiedź.








