【问题标题】:Vector normalization向量归一化
【发布时间】:2010-11-06 20:02:58
【问题描述】:

半向量的公式是(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

【问题讨论】:

    标签: python math


    【解决方案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
    

    【讨论】:

    • 您能给我一些建议吗?
    • Vvx = 0-xi # 视图向量 Vvy = 0-yi Vvz = 0-zi
    • 我如何使用你的函数标准化 Vv
    • Vvn = [Vvx,Vvy,Vvz] Vvn = normalize(Vvn) 我收到数学域错误返回(math.sqrt(sum(v))
    猜你喜欢
    • 2013-03-30
    • 2016-05-08
    • 2013-04-20
    • 1970-01-01
    • 2018-04-09
    • 2010-10-17
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多