向量归一化

3

半向量的公式为(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个回答

22

这个名称不准确。实际上,你所写的是两个向量的简单加法,其结果是一个单位向量。

以下是我会如何处理:

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

你能否给我一些如何做到这点的想法吗? - user458858
Vvx = 0-xi # 视图向量 Vvy = 0-yi Vvz = 0-zi - user458858
如何使用您的函数对Vv进行归一化处理? - user458858
Vvn = [Vvx,Vvy,Vvz]Vvn = normalize(Vvn)当return(math.sqrt(sum(v)))时,我遇到了数学域错误。 - user458858

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接