问题

在三维空间中,计算一个向量vvv(或点vvv)绕另一个向量uuu旋转θ\thetaθ角后的坐标。

方法

罗德里格旋转公式(Rodrigues’ Rotation Formula):
v′=vcosθ+u×vsinθ+(u⋅v)u(1−cosθ)v' = v cos \theta + u \times v sin \theta + (u \cdot v) u ( 1 - cos \theta) v′=vcosθ+u×vsinθ+(u⋅v)u(1−cosθ)
公式推导可见 旋转之二 - 三维空间中的旋转:罗德里格旋转公式

示例代码

下面的代码是计算点vvv绕向量uuu旋转360°之后的点集。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef RodriguesRotate(v:np.ndarray,u:np.ndarray,theta:float)->np.ndarray:'''向量v绕向量u旋转角度θ,得到新的向量P_new罗德里格斯旋转公式:v' = vcosθ + (u×v)sinθ + (u·v)u(1-cosθ) args:v:向量,维度为(3,)u:作为旋转轴的向量,维度为(3,)theta:旋转角度θ,此处默认为角度值returns:v_new:旋转后得到的向量,维度为(3,)'''u = u/np.linalg.norm(u) # 计算单位向量sin_theta = np.sin(theta*np.pi/180)cos_theta = np.cos(theta*np.pi/180)v_new = v*cos_theta + np.cross(u,v)*sin_theta + np.dot(u,v)*u*(1-cos_theta)return v_newv = np.array([1.1,1.5,2])
u = np.array([1,2,3])
ax = plt.gca(projection='3d')
ax.set_xlim([0,3])
ax.set_ylim([0,3])
ax.set_zlim([0,3])
ax.quiver(0,0,0,u[0],u[1],u[2])
V = np.zeros([360,3])
V[0] = v
for theta in range(1,360):V[theta]= RodriguesRotate(v,u,theta)
ax.scatter(V[:,0],V[:,1],V[:,2],c='cyan')
plt.show()

结果

三维空间中向量的旋转相关推荐

  1. 三维空间中两次旋转等效为一次旋转的计算方法(四元数)

    首先介绍一下四元数: 四元数是一种高阶复数,其形式如下: H = s p a n { 1 , i , j , k } \mathbb{H} = span\{1,i,j,k\} H=span{1,i,j ...

  2. 2d的公式_旋转之二 - 三维空间中的旋转:罗德里格旋转公式

    接上篇: 复数与2D旋转 先来推导三维空间中的常用旋转公式. 三维空间中的旋转 如果 绕着空间中的一个单位向量 旋转,旋转我们采用右手坐标系: 可以把 分解成平行于 的向量 和 : 绕 旋转并不会造成 ...

  3. 求解三维空间中两向量之间的夹角

    问题描述:已知三维空间中的三个点P1P_1P1​,P2P_2P2​和P3P_3P3​,求向量P1P2→\overrightarrow{P_1P_2}P1​P2​​和P1P3→\overrightarr ...

  4. 三维空间中曲线绕任意轴旋转所得的旋转曲面求法

    三维空间中曲线绕任意轴旋转所得的旋转曲面求法 对2023汤家凤考研高等数学讲义225页2.三维空间直线旋转曲面的解释和推广 ©️ sylvanding

  5. 向量叉乘求三维空间中两直线(或线段)的交点

    1.2D空间的直线相交 在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点. ...

  6. 游戏中 ----三维空间中的 向量

    三维空间中的 向量: 1.向量相等: 几何中,有相同的方向 跟  长度 的向量 被规定为 相等.                      而 代数 上 我们 说有着相同的 维数 ,而在 各个方向上的 ...

  7. [足式机器人]Part1 三维空间中的跳行Ch03——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  8. 利用四元数表示空间向量的旋转及代码示例

    1.四元数的定义 四元数(Quaternion)是带有一个实部和三个虚部的一种扩展复数,其表达式如下: i,j,k之间的关系可以理解为相互正交的三个单位向量,于是四元数又可以表示为标量+向量的形式,即 ...

  9. 三维空间中视角位置和物体取向的确定

    1.确定位置 我们要在三维空间中确定一个物体,或者定位一个视角:如果物体是一个对称物体,即我们不需要确定他的姿态,我们有两种方式确定它的位置. 1.1世界坐标系 世界坐标系是一个特殊的坐标系,它建立了 ...

  10. 微分几何笔记(4) —— 二维三维空间中曲线的曲率以及环绕数

    本篇文章我们从一般化的 Rn\mathbb{R}^nRn 空间回到我们生活的 R2,R3\mathbb{R}^2,\mathbb{R}^3R2,R3空间,看看低维空间中的曲线有哪些性质,主要计算下在非 ...

最新文章

  1. [源码和文档分享]基于java 的仿QQ聊天工具
  2. 0715PHP基础:文件操作
  3. 孤荷凌寒自学python第三十八天初识python的线程控制
  4. Sql server profiler抓出的语句不可信
  5. 大小端问题傻傻分不清?
  6. weblogic linux sun/awt/X11GraphicsEnvironment
  7. 查看网卡流量:nload
  8. Java字符串分割(split)
  9. java c 转换_java和c通信相关的数据类型转换
  10. HDU 2844 Coins (多重背包)
  11. (转载)通俗易懂讲解TCP流量控制机制(一看就懂的那种)
  12. 伟库网与英特尔联手打造“用友伟库云”
  13. 惠普打印机136w硒鼓芯片怎么清零_惠普136w打印机怎么清零
  14. Nightwish全部专辑320kbs全集下载
  15. 安川焊接机器人做圆弧运动编程_安川焊接机器人编程
  16. Windows 超级终端设置
  17. WordPress优化教程让WordPress打开速度更快
  18. VTN4系列多通道振弦模拟信号采集仪模拟通道值和振弦传感器温度通道值修正
  19. 全国计算机演示文稿,全国计算机统考押题——演示文稿
  20. 程序员怎样更优雅的接私活赚外快

热门文章

  1. Java 动态代理机制讲解(Proxy.newProxyInstance)
  2. 彻底凉了!全球最大电子书网站遭美政府封站
  3. Hcse 交换知识点-1
  4. Android ID谷歌认证,GSF ID KEY(谷歌服务框架ID)作为Android设备唯一标识符
  5. python垃圾邮件过滤_手把手教你用 Python 和 Scikit-Learn 实现垃圾邮件过滤
  6. cf方框透视易语言代码怎么写_如何用 C++ 写一个可编程软件渲染器?
  7. 通信原理电子版_2020兰州大学通信工程考研(电子信息)经验分享
  8. python简易病毒制作
  9. RX8025 RTC闹钟唤醒Alarm_D的初始化
  10. 卡巴斯基激活码无限量获取