反射向量的计算

Posted on 2009-09-19 21:31  活着就是幸福  阅读(1049)  评论(0编辑  收藏  举报

在计算机图形学应用过程当中, 无论是二维环境还是三维环境, 经常涉及到碰撞反弹的问题

这个问题对应之际的数学问题就是反射向量的计算问题

一个向量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 , 还可以进一步减少计算量.

---------------------------------------------------------------------------

转自http://blog.csdn.net/happy__888/archive/2007/03/29/1545432.aspx