array python math

python - array - Normalización de vectores



normalize array python (1)

La fórmula para medio vector es (Hv) = (Lv + Vv) / | Lv + Vv |, donde Lv es vector de luz, y Vv es vector de vista.

¿Estoy haciendo esto bien en el código de 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


Esto es mal llamado. Lo que has escrito es una simple adición vectorial de dos vectores, con el resultado de un vector unitario normalizado.

Así es como lo haría:

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