Performance Matlab计算矢量的反射
我必须计算图像的镜面反射高光(phong)。给出了法向量和“光向量”。现在我必须计算光的反射-是否有一个有效的matlab函数来翻转光向量,使其超过法向量,从而得到反射光向量 Ispec=ks*I*(r*v)p 其中:Performance Matlab计算矢量的反射,performance,matlab,vector,specular,phong,Performance,Matlab,Vector,Specular,Phong,我必须计算图像的镜面反射高光(phong)。给出了法向量和“光向量”。现在我必须计算光的反射-是否有一个有效的matlab函数来翻转光向量,使其超过法向量,从而得到反射光向量 Ispec=ks*I*(r*v)p 其中: l是光矢量 n是曲面的法向量 r是反射向量 v是从反射点到观察者的向量 p是光泽度我会用数学方法解决这个问题: 设N为法向量。 设V为光矢量。 设O为反射向量 O与N,V V和N之间角度的余弦与V和O之间角度的余弦相同(带减号) O的长度与V 这将产生3个方程式: 点(O,交叉点
l
是光矢量n
是曲面的法向量r
是反射向量v
是从反射点到观察者的向量p
是光泽度我会用数学方法解决这个问题: 设
N
为法向量。
设V
为光矢量。
设O
为反射向量
O
与N
,V
V
和N
之间角度的余弦与V
和O
之间角度的余弦相同(带减号)O
的长度与V
编辑我的同事刚刚告诉我一个更简单的方法:
V
可分为两部分,V=Vp+Vn
Vp
-与N
Vn
-与N
O
具有相同的并行部分Vp
,但恰恰相反Vn
因此,O=Vp-Vn
,但是V=Vp+Vn
然后O=V-2*Vn
其中Vn=dot(V,N)*N
(假设N
的范数为1)
因此,最后的答案是:
function O = FindReflected(V,N)
N = N / norm(N);
O = V - 2 * dot(V,N) * N;
end
编辑2
我刚刚找到了一个关于数学的更好的解释。stackexchange
:
这与使用
a(end:-1:1)
是不同的反射吗?请澄清:您的问题是否与计算物体在没有重力的平面上的滞弹性反弹相同?反射面是如何表示的?我有θ(n和l之间的cos角,n和O(r)-我有角度,法向量和光向量,不是有更简单的方法吗?