Начните с того, что, хотя бы, расскажите про двумерный или трехмерный случай идет речь.
Обычно конец луча никто никуда не поворачивает.
У вас есть луч и поверхность. Луч - это половина прямой. Если задать его уравнением и также уравнениями задать поверхность, а потом дополнительным неравенством добавить ограничения (поверхности и прямой), то решение получившейся системы будет точками пересечения луча и поверхности. Нас интересует ближайшая точка пересечения от начала луча.
Ваша поверхность в точке пересечения с лучом имеет нормаль. Это перпендикуляр к поверхности в данной точке.
Итак, дано:
точка старта луча (O),
точка пересечения (P) луча с поверхностью,
вектор нормали (n) в этой точке.
Нужно получить вектор (v) направления нового луча из точки P.
Построим вектор PO = O - P (да-да, любые координаты - это вектор из начала координат) Если вычесть из вектора O вектор P, получим вектор направления из P в сторону O.
Итак, у нас есть два вектора: PO и n. Угол падения у нас равен углу отражения и искомый вектор v будет лежать в плоскости этих двух векторов. Нам нужно повернуть вектор PO в упомянутой плоскости на удвоенный угол между нормалью и вектором PO.
Любую плоскость можно задать точкой и нормалью (вектором перпендикуляра к плоскости). Чтобы получить этот перпендикуляр, назовём его вектором w, нужно сделать векторное произведение PO на n. Это будет ось вращения. Она направлена будет по правилу "буравчика".
Чтобы повернуть вокруг этой оси ваш вектор PO, проще всего умножить его на матрицу поворота.
Вот статья, которая это с рисунками показывает.
https://scicenter.online/avtomatizatsiya-scicenter...