Ось оманливий складний пазл для геометрії для вас!
Давши коло A
та n
інші кола B[n]
, знайдіть загальну площу, що міститься в ньому A
, не в межах жодного кола B
.
Ваш код повинен бути якомога коротшим.
Вхідні дані
Ваша інформація повинна містити таку інформацію:
- Число з плаваючою комою для відображення радіуса кола
A
. - Список чисел з плаваючою комою для відображення радіусів кіл у
B
. - Перелік центрів гуртків у Росії
B
. Ваша програма може очікувати центрів у полярних або декартових координатах. - За бажанням, ви можете отримати кількість
n
кіл у Б. Цей введення не потрібно.
Слід вважати, що центром кола A
є початок, тобто точка (0, 0)
.
Гарантується, що жодне два кола не B
є однаковими, але не гарантується, що: всі кола B
перетинаються A
, усі центри B
знаходяться зовні A
, або немає двох кіл, що B
перетинаються один з одним. Переконайтеся, що ваше рішення може працювати з різними випадками справи.
Ви можете отримувати введення в будь-якому порядку та у вигляді введення тексту (через stdin або еквівалент вашої мови), параметрів функції або аргументів командного рядка.
Якщо ви вирішили отримувати введення тексту, між фрагментами введення повинні бути один або два символи для розділення ASCII для друку.
Вихідні дані
Ваша програма або функція повинна виводити єдине число з плаваючою комою, що представляє загальну площу A
не в жодному з кіл B
. Ваші відповіді повинні бути точними як мінімум до трьох значущих цифр для всіх тестових випадків.
Діють загальні правила коду-гольфу .
Щоб визначити площу, ваше рішення не повинно покладатися на точки вибірки в колах.
Вбудовані модулі, які автоматично знаходять перехрестя кіл, знаходять області в перетинах кіл або негайно вирішують цю проблему, заборонені.
Випробування
На кожному зображенні коло A
окреслено синім кольором, кружечки - B
зеленим кольором та заповнені чорним кольором. Площа, яку слід повернути, заповнена червоним кольором.
(Особлива подяка Rainer P. за перевірку моїх рішень)
Тест 1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
Тест 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
Тест 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
Тестовий випадок 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
Тестовий випадок 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
Пропоноване читання:
Fewell, MP "Площа загального перекриття трьох кіл". Жовтень 2006. Веб. http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
B
містить інше. Можливо, варто додати це.
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
, яка дає в 18969.69009
якості відповіді.