加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 矢量标准化

发布时间:2020-12-20 13:00:46 所属栏目:Python 来源:网络整理
导读:半矢量的公式是(Hv)=(Lv Vv)/ | Lv Vv |,其中Lv是光矢量,Vv是视图矢量. 我在Python代码中这样做了吗? Vvx = 0-xi # view vector (calculating it from surface points)Vvy = 0-yiVvz = 0-ziVv = math.sqrt((Vvx * Vvx) + (Vvy * Vvy) + (Vvz * Vvz)) # norm
半矢量的公式是(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

解决方法

这是错误的名字.你写的是两个向量的简单向量加法,结果是一个归一化的单位向量.

这是我如何做到的:

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]
    v = [0,0]

    h = normalize(add(l,v))
    print h

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读