向量归一化
发布于 2021-01-29 17:57:44
半向量的公式为(Hv)=(Lv + Vv)/ | Lv + Vv |,其中Lv是光向量,Vv是视点向量。
我在Python代码中这样做正确吗?
Vvx = 0-xi # view vector (calculating it from surface points)
Vvy = 0-yi
Vvz = 0-zi
Vv = math.sqrt((Vvx * Vvx) + (Vvy * Vvy) + (Vvz * Vvz)) # normalizing
Vvx = Vvx / Vv
Vvy = Vvy / Vv
Vvz = Vvz / Vv
Lv = (1,1,1) # light vector
Hn = math.sqrt(((1 + Vvx) * (1 + Vvx)) + ((1 + Vvy) * (1 + Vvy)) +
((1 + Vvz) * (1 + Vvz)))
Hv = ((1 + Vvx) / Hn, (1 + Vvy) / Hn, (1 + Vvz) / Hn) # half-way vector
关注者
0
被浏览
305
1 个回答
-
这是错误的名称。您所写的是两个向量的简单向量加法,结果是归一化的单位向量。
这是我的处理方式:
import math def magnitude(v): return math.sqrt(sum(v[i]*v[i] for i in range(len(v)))) def add(u, v): return [ u[i]+v[i] for i in range(len(u)) ] def sub(u, v): return [ u[i]-v[i] for i in range(len(u)) ] def dot(u, v): return sum(u[i]*v[i] for i in range(len(u))) def normalize(v): vmag = magnitude(v) return [ v[i]/vmag for i in range(len(v)) ] if __name__ == '__main__': l = [1, 1, 1] v = [0, 0, 0] h = normalize(add(l, v)) print h