根据旋转前后的两向量值求旋转矩阵 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))
    
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值