¿Por qué no funciona este algoritmo de reflexión?

Ok, la respuesta anterior dice que el razonamiento dado no funcionará.

Aquí está mi enfoque:

Nota: todos los vectores están en negrita

sea r el vector reflejado
let v2h (leer como v2 hat) ser el vector unitario en la dirección de v2
dejemos que v2ch sea ​​el vector perpendicular a v2h. Esta suposición es tener v2h y v2ch como vectores independientes que abarcan el plano 2d que contiene v1 y v2 .
v1 es el vector que se reflejará sobre v2

sean a, b las proyecciones de v1 sobre v2ch y v2h respectivamente,

entonces,
v1 = a * v2ch + b * v2h
para que r sea ​​un reflejo,
r = -a * v2ch + b * v2h

resolviendo estas ecuaciones,
v1 + r = 2 * b * v2h
r = 2 * b * v2hv1

b es la proyección de v1 sobre v2h . entonces, b = v2h.v1 = v2.v1 / | v2 |

entonces, r = 2 * ( v2 . v1 / | v2 | ) * v2hv1
esto también se puede escribir como
r = 2 * ((v2.v1 / | v2 |) / | v2 |) * v2 – v1
finalmente,
r = 2 * ((v2.v1) / (v2.v2)) * v2 – v1

No hay necesidad de raíz cuadrada instead ¡Puedes tomar el producto punto de v2 consigo mismo!

Bueno, parece que si a es el vector que estás reflejando y v es el vector sobre el que estás reflejando, tu función está calculando

[matemáticas] 2 v – \ frac {\ langle v, v \ rangle} {\ langle a, v \ rangle} a [/ math]

Una forma rápida de ver que esto no funciona es notar que, dado que cualquier vector v a lo largo de la misma línea indica la misma línea, la fórmula correcta no debería variar si multiplica v por un escalar, mientras que este sí lo hace claramente.

En Google, aquí hay un enlace que explica cómo reflejar un vector sobre otro:

Comprender visualmente la reflexión del vector