A. Отраженный вектор
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Выведите координаты отраженного относительно нормали данного вектора. Для этого следует создать функцию в класс вектора метод getReflection(), принимающего вектор, от которого нужно отразить и возвращающий отраженный вектор.

Входные данные

Эта задача проверяется мультитестом.

На первой строке расположено число N - количество тестов.

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

Выходные данные

Вывести N троек чисел - координаты соответствующих векторов.

Пример

Входные данные
2
0 0 1
0 0 1
0 0 1
1 1 1
Выходные данные
0 0 1
-1 -1 1

B. Одна гладкая сфера, один источник
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дан источник света, сфера и точка на ней.

Выведите долю отраженного освещения от этого источника для этой точки.

Входные данные

Эта задача проверяется мультитестом.

На первой строке задается тип источника света "point" или "directional" и его координаты, если иcточник точечный или направление 1.

На второй строке пять действительных чисел - координаты центра, радиус сферы и коэффициент гладкости материала сферы.

Далее следует число N - количество тестов. На следующих N строках расположено по три числа - координаты точки на данной сфере.

Выходные данные

Выведите одно число - долю отраженного света.

Примеры

Входные данные
directional 1 0 0
0 1 1.1 1 1
1
0.408248 1.40825 0.283503
Выходные данные
0.00552434
Входные данные
point -2 2 0
0 0 1.1 1 2
1
0 1 1.1
Выходные данные
0

Примечание

Рассчитывайте отражение как coskα, где α - угол между отраженным лучом от нормали в точке к источнику и лучом от точки в камеру, а k - коэффициент гладкости материала поверхности сферы.

C. Рендер с бликами
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
output.bmp

В этой задаче по данной сцене нужно сгенерировать изображение c учетом гладкости поверхности без учета теней.

Входные данные

В первой строке задается натуральное N — количество сфер. В следующих N строках расположены по восемь чисел xci,yci,zci,rci,ri,gi,bi,si - координаты и радиус i-й сферы, ее цвет (три компоненты красная, зеленая, синяя) и коэффициент гладкости поверхности (specular).

В N+1-й строке задается натуральное M — количество источников света. В следующих M строках расположены их характеристики: сначала задается тип источника света "point" или "directional", его координаты, если иcточник точечный, или направление, если направленный, и яркость (положительное действительное число).

Также в сцене должен быть добавлен рассеивающий свет яркостью 0.2.

Выходные данные

Результатом работы вашей программы должен быть файл output.bmp c рендером сцены. Цвет фона — черный.

Пример

Входные данные
2
0.5 0 2 0.3 255 0 0  100
-0.5 0 2 0.3 0 255 0 300
2
d 1 -1 0 0.4
p 0 5 0 0.4
Выходные данные
см. рисунок

Примечание

D. Тень или фон
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дан источник света, и набор сфер.

Известно, что все источники света располагается "за сценой", формально: не существует отрезков, соединяющих две точки любых объектов, содержащих точку, в которой располагается источник света.

Даны так же точки Viewport-а.

Определите, нужно ли учитывать свет от данного источника в каждой точке или нет.

Входные данные

На первой строке задается тип источника света "point" или "directional" и его координаты, если иcточник точечный или направление, если направленный.

Далее следует число N - количество сфер.

На следующих N строках по четыре действительных числа - координаты центра и радиус сферы.

Далее следует число M - количество точек Viewport-a.

На следующих M строках по два действительных числа - координаты x и y точки Viewport.

Выходные данные

Выведите M ответов на задачу

YES, если свет от этого источника нужно учитывать для этой точки и NO, если нет.

Пример

Входные данные
directional 1 0 0
2
0 0 3 1
2 0 3 1
4
0 0
-0.3 0
0.3 0
0.4 0.4
Выходные данные
YES
YES
NO
NO

E. Рендер с бликами и тенями
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
output.bmp

В этой задаче по данной сцене нужно сгенерировать изображение c учетом гладкости поверхности и учетом теней.

Входные данные

В первой строке задается натуральное N — количество сфер. В следующих N строках расположены по восемь чисел xci,yci,zci,rci,ri,gi,bi,si - координаты и радиус i-й сферы, ее цвет (три компоненты красная, зеленая, синяя) и коэффициент гладкости поверхности (specular).

В N+1-й строке задается натуральное M — количество источников света. В следующих M строках расположены их характеристики: сначала задается тип источника света "point" или "directional", его координаты, если иcточник точечный, или направление, если направленный, и яркость (положительное действительное число).

Также в сцене должен быть добавлен рассеивающий свет яркостью 0.2.

Выходные данные

Результатом работы вашей программы должен быть файл output.bmp c рендером сцены. Цвет фона — черный.

Пример

Входные данные
2
0.3 0 2 0.3 255 0 0  100
-0.3 0 2 0.3 0 255 0 300
2
d 1 -1 0 0.4
p 5 2 2 0.4
Выходные данные
см. рисунок

Примечание

F. Финальный сферорендер
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
output.bmp

В этой задаче нужно добавить свойство отражения к материалу и сгенерировать изображение c глубиной рекурсии 3.

Входные данные

В первой строке задается натуральное N — количество сфер. В следующих N строках расположены по девять чисел xci,yci,zci,rci,ri,gi,bi,si,rfi - координаты и радиус i-й сферы, ее цвет (три компоненты: красная, зеленая, синяя), коэффициент гладкости поверхности (specular) и коэффициент ee отражения (reflective).

В N+1-й строке задается натуральное M — количество источников света. В следующих M строках расположены их характеристики: сначала задается тип источника света "point" или "directional", его координаты, если иcточник точечный, или направление, если направленный, и яркость (положительное действительное число).

Также в сцене должен быть добавлен рассеивающий свет яркостью 0.2.

Выходные данные

Результатом работы вашей программы должен быть файл output.bmp c рендером сцены. Цвет фона — черный.

Пример

Входные данные
2
0.6 0 2 0.7 255 0 0  100 0.5
-0.6 0.4 2 0.5 0 255 0 20 0.4
2
p 0 5 0 0.4
p -5 0 -5 0.4
Выходные данные
см. рисунок

Примечание