2D кривая
Предполагая, что у вас есть нормализованный тангенс t = normalize(a-b)
, используйте следующую формулу, где ·
- это скалярное произведение:
dA = dB - 2*t*(dB·t)
Немного пояснений: t*(dB·t)
- тангенциальный компонент. Удаление его один раз даст нормальный компонент, а удаление его дважды обратит тангенциальный компонент, что приведет к отраженному вектору.
3D-поверхность
Предполагая, что у вас есть нормальная n
поверхности, используйте следующую формулу:
dA = -(dB - n*(dB·n)) + n*(dB·n)
, который можно упростить до dA = -dB + 2*n*(dB·n)
.
Немного пояснений: n*(dB·n)
- это нормальный компонент. Сначала мы удаляем его из dB
, так как мы хотим сохранить его. Таким образом, dB - n*(dB·n)
является тангенциальным компонентом. Затем мы отменяем тангенциальный компонент и добавляем нормальный компонент обратно, чтобы получить отраженный вектор.