一直以来,我都记不住向量叉乘的结果,每次都要查询。其根本原因在于,我没有去研究过叉乘是如何推导出来的。于是,这次想彻底解决一下。首先要感谢维基百科,它已经把所有问题都描述清楚了。

而下面的文字,只是我的读书笔记,以加深自己的印象。

首先我们知道 ,对于向量u和v, u x v的结果,是得到一个既垂直于u又垂直于v的向量,假设记作n.

则有下面公式

n = u x v;

而n的方向,是由右手法则决定的。 即伸出右手,四个手指方向从u绕到v. 此时,大姆指的方向,就是n的方向。 我们通常叫做右向量。

引用一下维基百科的图来说明问题,有兴趣的兄弟可以照图比划一下。 (注:图中向量是用的a x b来表示)

有了上面的知识,我们继续向下看。

我们假设向量 u,v,n分别用三个标量来表示。即

u = (Xu,Yu,Zu)

v = (Xv,Yv,Zv)

n = (Xn,Yn,Zn)

则,它们的关系为

Xn = Yu*Zv – Zu*Yv;

Yn = Zu*Xv – Xu*Zv;

Zn = Xu*Yv – Yu*Xv;

即 n = (Yu*Zv – Zu*Yv,Zu*Xv – Xu*Zv,Xu*Yv – Yu*Xv);

而为了验证n与u和v的垂直性,可以使用点乘进行

点乘法则比这个简单多了, u*v = (Xu*Xv + Yu*Yv + Zu*Zv) = dotUV;

如果两个向量垂直,则dotUV = 0;

代入验证一把

u*n = (Xu*(Yu*Zv – Zu*Yv) + Yu*(Zu*Xv – Xu*Zv) + Zu*(Xu*Yv – Yu*Xv));

= Xu*Yu*Zv – Xu*Zu*Yv + Yu*Zu*Xv – Yu*Xu*Zv + Zu*Xu*Yv – Zu*Yu*Xv;

把正负号的因式仔细比对一下,发现刚好可以低消。 结果为0.

v*n 同理可证。

于是,也验证了n与u,v垂直的特性。

如果只是为了应用的话,走到这一步就可以停下了。后面的知识,只是为了满足一下好奇心。

那我们就来看看,这个结论是怎么来的呢? 我们接着来推导。

为了更好地推导,我们需要加入三个轴对齐的单位向量。

i,j,k.

i,j,k满足以下特点

i = j x k; j = k x i; k = i x j;

k x j = –i; i x k = –j; j x i = –k;

i x i = j x j = k x k = 0; (0是指0向量)

由此可知,i,j,k是三个相互垂直的向量。它们刚好可以构成一个坐标系。

这三个向量的特例就是 i = (1,0,0) j = (0,1,0) k = (0,0,1)。

好,那对于处于i,j,k构成的坐标系中的向量u,v我们可以如下表示

u = Xu*i + Yu*j + Zu*k;

v = Xv*i + Yv*j + Zv*k;

那么 u x v = (Xu*i + Yu*j + Zu*k) x (Xv*i + Yv*j + Zv*k)

= Xu*Xv*(ixi) + Xu*Yv*(i x j) + Xu*Zv*(i x k) + Yu*Xv*(j x i) + Yu*Yv*(j x j) + Yu*Zv*(j x k) + Zu*Xv*( k x i ) + Zu*Yv(k x j) + Zu*Zv(k x k)

由于上面的i,j,k三个向量的特点,所以,最后的结果可以简化为

u x v = (Yu*Zv – Zu*Yv)*i + (Zu*Xv – Xu*Zv)j + (Xu*Yv – Yu*Xv)k;

于是,在i,j,k构成的坐标系中。集就是上面的结果。

当i = (1,0,0) j = (0,1,0) k = (0,0,1)时,我们通常省略i,j,k的写法。最终也就得到了我们的右向量。

叉乘的意义

叉乘表示垂直于uxv的右向量。

使用的地方

可以通过叉乘,修正向量关系,从而构建坐标系。 常见的有 摄相机矩阵和TBN空间转换矩阵的构建。

叉乘的矩阵表示法。

很多书上,包括 3D游戏大师编程技巧 上面,都是用的矩阵表示法来说明叉乘。

如下。

它对应的矩阵表示法为

求其代数余子式,可以表示为如下

有了这个,那我们合并公因式i,j,k,则可以得到矩阵表示法

到此,叉乘的内容基本OK了。 值得说明的是,如果对方程组表示成矩阵不熟悉,就会感到不习惯,但是如果多多练习,我想应该是会习惯成自然吧。。。

两个三维向量叉积_三维向量叉乘推导相关推荐

  1. 两个三维向量叉积_线性代数的本质08 叉积

    08-1 叉积基本介绍 [熟肉]线性代数的本质 - 08第一部分 - 叉积的标准介绍_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 叉积也可以从线性变换的角度来 ...

  2. java 三维向量类_三维向量类

    还是在读书的时候帮外专业朋友做作业,用GDI实现三维空间的立方体绘制和旋转的操作,那个时候自己根据<线性代数与空间解析几何>以及<计算机图形学>等课程的相关知识写了一个三维向量 ...

  3. 三维坐标 偏转_三维坐标系旋转

    在做单目三维位姿估计(即估计目标物相对相机的姿态或相机相对目标物的姿态)时会用到solvepnp函数, 函数原型为:cv2.solvePnP(objectPoints, imagePoints, ca ...

  4. c ++向量库_将向量复制到C ++中的另一个向量

    c ++向量库 The ways that we are using to copy vectors in C++, are: 我们用于在C ++中复制向量的方法是: Copy one vector' ...

  5. 三维坐标 偏转_三维坐标下的旋转

    三维坐标的旋转有以下几种常见的表示形式:旋转向量,旋转矩阵,欧拉角,四元数,下面对这四种表示形式及其之间的转换进行介绍 旋转向量 通常为3x1的列向量,向量方向即为旋转轴,向量的模表示绕轴逆时针旋转的 ...

  6. 三维坐标 偏转_三维坐标变换原理-平移, 旋转, 缩放

    给定一个二维点(x, y),那么形如(kx, ky, k)的所有三元组就都是等价的,它们就是这个点的齐次坐标(homogeneous).齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示,是指 ...

  7. pytorch 三维点分类_三维点云分类与分割-PointNet

    PointNet是对点云数据直接进行学习的开山之作, 这里结合PointNet-Pytorch代码,对PointNet网络结构与其思想进行阐述和分析. 点云数据的特性: 点云数据不同于图像数据,他有三 ...

  8. python求向量长度_得到向量的大小(x,y)

    我正在努力让这个工作,因为我能找到的所有答案,大多数答案都集中在numpy数组中的向量上,而不像我的类(OOP).(希望我的措辞正确,否则请原谅). 我想找出向量的大小(x,y),这是我的代码:cla ...

  9. osg 三维gis开发_三维GIS与游戏引擎的跨界融合,打造数字化孪生的平行世界

    游戏地图在游戏中起基础和关键作用,它承载游戏中的各种资源,是游戏系统中非常重要的组成部分(图1),所以游戏通常具有明显的地理意义.因此,虽然三维GIS与游戏引擎是两个不同的领域,但两者是有联系的. 游 ...

  10. osg 三维gis开发_三维GIS平台的可视化应用 (下)

    上一篇主要对三维GIS的基础数据和三维模型进行了一点说明,本篇将接着聊剩下的部分,主要是三维GIS平台能够支持什么样的场景展示,并来对平台的应用进行一些介绍. 没看过上篇的朋友可以先了解一下再看本篇: ...

最新文章

  1. 支付宝AI摘下视觉竞赛世界冠军,能精准区分同种类物体的细微差别
  2. Arduino可穿戴教程之第一个程序——上传运行程序(四)
  3. Java数据库连接(JDBC)之一:JDBC详细连接过程
  4. 2013校作息时间表暂存
  5. 《快速软件开发——有效控制与完成进度计划》
  6. (Head First 设计模式)学习笔记(1)
  7. 使用基于 WebRTC 的 JavaScript API 在浏览器环境里调用本机摄像头
  8. mysql 配置root密码_Mysql安装与配置调优及修改root密码的方法
  9. 解决Promise.all一个被rejected,整个都被rejected的缺陷
  10. MBA——mba的9堂课
  11. java源代码审计报告_审计档案管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  12. 华为设备如何查看风扇的序列号?
  13. 解压tar.xz方法
  14. 应届生如何写求职邮件?
  15. 平安科技实习生面试经历
  16. Parametric Diagrams
  17. 我心目中的未来计算机300字,我心目中的现代化作文300字
  18. 知来路方知去处。坎坷已过,一马平川后必看的经典!——2018最新倾斜摄影建模与无人机航拍影像处理完美配置解决方案!
  19. sina微博api:获取24小时内前20条用户的微博信息
  20. CAD设置在标题中显示完整路径

热门文章

  1. mysql添加表字段脚本_mysql数据库修改字段及新增字段脚本
  2. oracle sql格式化 补零,sql语句格式化数字(前面补0)、替换字符串
  3. 在Java中按字节获得字符串长度的两种方法
  4. h2ouve工具使用_NF8480M5 – BIOS设置
  5. java 蔡学镛_蔡学镛谈“Linux + Java 会得到什么”
  6. Ubuntu 命令行下修改IP等
  7. js基础知识总结大全
  8. AD13中对工程进行编译出现的error
  9. 自适应滤波器 | 时域ALE算法
  10. 微信小程序服装商城+后台管理系统