2010-11-06 50 views
2

半向量的公式爲(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 
+1

您已經測試了嗎? – 2010-11-06 20:06:01

回答

18

這是錯誤的。你寫的是兩個向量的簡單向量加法,其結果是一個歸一化的單位向量。

以下是我會做:

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 
+0

你能告訴我怎麼做嗎? – user458858 2010-11-06 20:34:03

+0

VVX = 0-XI#視圖矢量 Vvy = 0義 VVZ = 0滋 – user458858 2010-11-06 22:10:32

+0

如何在使用您的功能 – user458858 2010-11-06 22:11:05