Автор: | Г. Гренкин | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt |
Лена любит смотреть в зеркало. Она любит не только смотреть на своё отражение, но и изучать законы оптики, наблюдая за ходом световых лучей.
Так как Солнце находится на достаточно большом расстоянии от Земли, при расчётах часто считают Солнце бесконечно удалённой точкой. В этом случае световые лучи, испускаемые Солнцем, считают параллельными друг другу.
В определённый день и в определённый момент времени Солнце находится в определённом месте. Соответственно, солнечные лучи падают туда, где находится Лена, под определённым углом. Лена, в свою очередь, может наклонять зеркало под разными углами.
Пусть зеркало наклонено так, что в некоторой системе координат его можно задать как прямую, имеющую уравнение y = kx + b. Направление падения солнечных лучей задаётся единичным вектором a.
Требуется найти направление отражения лучей, а именно, требуется найти единичный вектор c.
Примечание. По законам оптики, свет отражается так, что угол падения равен углу отражения (α = β на рисунке).
Входной файл содержит три вещественных числа k x1 y1 — угловой коэффициент прямой и координаты вектора a.
Длина вектора a приближённо равна 1.
Выходной файл должен содержать два вещественных числа x2 y2 — координаты вектора c.
Длина вектора c должна быть приближённо равна 1.
Координаты вектора c должны быть выведены с точностью до 3-х знаков после запятой.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Пусть l — единичный направляющий вектор прямой, n — единичный вектор нормали к прямой. Эти векторы перпендикулярны друг другу.
Рассмотрим базис, состоящий из векторов l и n. Разложим вектор a по этому базису: a = Nn + Ll.
Тогда вектор c можно найти по формуле: c = − Nn + Ll = 2Ll − a.
Так как базис {n, l} ортогональный (т.е. векторы базиса перпендикулярны друг другу) и векторы базиса единичные, координату L можно найти по формуле: L = a · l.
Следовательно, c = 2(a · l)l − a.
Найдём направляющий вектор. Выберем на прямой две точки: A(0, b) и B(1, k + b). Тогда в качестве направляющего вектора можно взять вектор AB{1, k}. Единичный направляющий вектор: l{1 / √k2 + 1, k / √k2 + 1}.