学习图形学,要涉及好多数学知识,在碰撞反弹问题上用到反射向量,查了下资料搞明白了,该方法有个计算技巧,效率非常的高
一个向量V, 在法向量为N的平面上产生的反射向量V'的计算的问题
利用反射原理和向量知识, (v', 和 -v关于法向量对称 )我们知道有:
v'- v = alpha * N/|N| alpha是一个常数 N/|N| 是单位法向量
如果我们知道了alpha这个常数就可以直接得到v' = v + alpha * N/|N|
alpha 是多少呢, alpha是-v向量在N向量上的投影长度
-v * N = |-v| * |N| * cosCita = alpha * |N| *0.5
所以 alpha = 2*(-v *N)/|N|
从而 v' = v + 2*(-v*N)/|N| * N / |N| = v - 2*(v*N)*N/(N*N)
注意这个公式当中, v, N都是非标准向量(模不是1)的
整个计算公式只涉及到一次除法和若干(二维和三维下不同)次加法和乘法
如果N是单位向量, 可退化为: v' = v - 2 * (v*N) *N , 还可以进一步减少计算量