2010-11-06 6 views
2

La formule du demi-vecteur est (Hv) = (Lv + Vv)/| Lv + Vv |, où Lv est un vecteur de lumière, et Vv est un vecteur de vue. Est-ce que je fais cela correctement en code Python?Normalisation vectorielle

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

Avez-vous testé? –

Répondre

18

Ceci est mal nommé. Ce que vous avez écrit est l'addition vectorielle simple de deux vecteurs, avec pour résultat un vecteur unitaire normalisé.

Voilà comment je le ferais:

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

Pouvez-vous s'il vous plaît me donner des idées comment le faire? – user458858

+0

VVX = 0-xi # vue vecteur Vvy = 0-yi VVZ = 0-zi – user458858

+0

Comment puis-je normalise Vv en utilisant vos fonctions – user458858