ООП · 14 из 23
Дождь на стоянке
Ночью у стойки проката идёт дождь, и механик залип на лужу под фонарём: каждая капля пускает круг, круги расходятся, гаснут и проходят друг сквозь друга. Он хочет такую же заставку на экран терминала проката. Экран — поверхность лужи: высоту воды в точке складывают из кругов всех капель, а каждая капля знает про свой круг.
Что сделать
Опишите каплю: она помнит, где и когда упала, и умеет сказать, насколько её круг поднимает воду в точке.
Что приходит
xиy— куда упала капляt0— когда она упала
Что должен уметь
Поля x, y, t0; метод vysota(tx, ty, t) — на сколько круг этой капли поднимает воду в точке (tx, ty) в момент t, дробным числом.
Допишите класс Kaplya в редакторе справа.
Проверка создаёт его объекты и зовёт методы — то, что напечатано,
на проверку не влияет.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
Капля упала в точку (0, 0) в момент 0. В момент 2,5 круг ушёл на 2 · 2,5 = 5 клеток — ровно до точки (3, 4): на самом гребне подъём cos(0) / (1 + 2,5 / 4) = 0,615…
Kaplya(0, 0, 0).vysota(3, 4, 2.5)
0.6153846153846154
Kaplya(x, y, t0) запоминает три поля: x, y, t0.
vysota(tx, ty, t):
d = t − t0— сколько прошло с падения. Еслиd < 0, капля ещё не упала: ответ0.0.r— расстояние от капли до точки(tx, ty), по Пифагору.- Круг бежит со скоростью 2: к моменту
tон дошёл до расстояния2 · d. Еслиr > 2 · d, круг до точки ещё не добежал:0.0. Ровно на2 · d— уже добежал. - Иначе ответ —
cos(r − 2 · d) / (1 + d / 4): на переднем краю круга гребень, позади него волны, и чем дольше прошло, тем они тише.
Ответ сверяется с точностью до миллиардных — порядок умножений и hypot или sqrt не важны.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.