< Zpět na seznam úloh

P12 Průnik dvou kružnic

function validator(result, dataset) {
  return Math.round(result * 1000) == Math.round(dataset.out * 1000);
}
var datasets = [
  {argv: [0, 0, 1, 3, 0, 2], out: 0},
  {argv: [0, 0, 1, 0, 0, 2], out: 3.1416},
  {argv: [24, 110, 20, 49, 126, 13], out: 31.40674},
  {argv: [22, 104, 4, 26, 99, 9], out: 42.99119},
  {argv: [25, 16, 9, 29, 16, 6], out: 106.14300},
]
var names = ['pat_x', 'pat_y', 'pat_r', 'mat_x', 'mat_y', 'mat_r'];

Pat a Mat pěstují salát a umístili do roviny ostřikovače, aby dobře rostl. Máme určit, kolik salátu je zalitého oběma ostřikovači a proto uhnije.

Pro každý ostřikovač je zadané jeho umístění (jako dvojice souřadnic) a poloměr kruhu, který ostřikovač rovnoměrně zalévá. Program tato čísla dostává v tomto pořadí nejdřív pro Patův, pak pro Matův ostřikovač. Celkem tedy dostává šest čísel.

Výstupem má být plocha jako jedno číslo, s přesností na aspoň tři desetinná místa.

from math import pi
def main(pat_x, pat_y, pat_r, mat_x, mat_y, mat_r):
  sum_r = pat_r + mat_r
  if abs(pat_x - mat_x) >= sum_r or abs(pat_y - mat_y) >= sum_r:
    return 0
  if pat_x == mat_x and pat_y == mat_y:
    return pi * min(pat_r, mat_r)

Rada: část postupu najdete na Wikibooks pod heslem Numerický výpočet průniku dvou kružnic

Jednotlivé testovací sady vypadají jako na následujícím obrázku:

Testovací sady