Войти Создать аккаунт

Свой рейтрейсер · Шаг 5 из 5

Луч, который отражается

Остался последний штрих, ради которого трассировку лучей и придумали в 1979 году: отражения. Луч, упавший на зеркальный шар, не кончается — он отскакивает и летит дальше, и в шаре видно всё остальное: пол, соседей и даже его собственное отражение в полу. Сколько раз отскакивать, решает глубина.

Что сделать

Найдите яркость луча: что он видит, плюс отражение, — если поверхность блестит и глубина ещё позволяет.

Что приходит

  • nachalo и napr — откуда и куда идёт луч

  • glubina — сколько ещё раз луч может отразиться

  • uvidet — функция каркаса: uvidet(nachalo, napr) отдаёт словарь о том, что встретил луч

Что вернуть

Число: svet встречи, если blesk равен 0 или glubina — 0; иначе (1 − blesk) · svet + blesk · яркость отражённого луча.

Допишите функцию cvet_lucha в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой

В проекте

Каркас зовёт cvet_lucha для каждой точки картинки с глубиной 3, а uvidet собирает из ваших шагов 1–4. Решите шаг — и в зеркальном шаре и в полу отразится вся сцена.

Пример

Луч из (0, 1, -1) идёт вниз-вперёд, (0, -1, 1), и падает на пол-зеркало: svet 0.2, blesk 0.5, нормаль вверх. Отражённый луч (0, 1, 1) уходит в небо яркостью 0.9.
Ответ: 0.5 · 0.2 + 0.5 · 0.9 = 0.55.

В проверке uvidet — игрушечный мир: пол-зеркало внизу и небо наверху.

Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.