栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

根据旋转前后的两向量值求旋转矩阵 python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据旋转前后的两向量值求旋转矩阵 python

根据旋转前后的两向量值求旋转矩阵

参考:https://www.cnblogs.com/xpvincent/archive/2013/02/15/2912836.html

旋转向量

两个向量间任意旋转都可以用一个旋转轴和一个旋角来表示,于是我们可以用一个向量来表示任意旋转。

理解:
两个向量PQ叉乘得到一个垂直于两向量的向量N,于是,绕着N旋转一个标量角θ。即可让向量P变到向量Q。那么N和θ就可以描述任意两向量的旋转,将它们组成向量:θN,即为旋转向量。

旋转向量与旋转矩阵

除了旋转向量可以表示旋转之外,旋转矩阵也可以表示旋转。它们之间的转换可由罗德里格斯公式实现:

其中的r为本文的N。I为单位向量。

python实现:求取旋转前后的两向量的旋转矩阵
	# 代码是在blender环境中跑的,只需将Vector和Matrix转换到numpy版本即可在普通python环境中跑

    // T_location 是目标向量
    T_location = Vector((1.0 , 0 ,.0))
    
    T_location_norm = T_location.copy()
    T_location_norm.normalize()
	// originVector是原始向量
    originVector = Vector((.0 , .0 ,1.0))
    
        

    print(T_location_norm)
    // @是向量点乘
    sita = math.acos(T_location_norm@originVector)
    n_vector = T_location_norm.cross(originVector) 
    
    n_vector.normalize()
    
    n_vector_invert = Matrix((
    [0,-n_vector[2],n_vector[1]],
    [n_vector[2],0,-n_vector[0]],
    [-n_vector[1],n_vector[0],0]
    ))
    
    print(sita)
    print(n_vector_invert)
    
    
    I = Matrix((
    [1 ,  0 , 0],
    [0 ,  1 , 0],
    [0 ,  0 , 1]
    ))
    // 核心公式:见上图
    R_w2c = I + math.sin(sita)*n_vector_invert + n_vector_invert@(n_vector_invert)*(1-math.cos(sita))
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/833733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号