通俗理解三维向量的点乘和叉乘

一般接触得比较多的是二维向量的点乘和叉乘,但是做到与三维几何相关的工作的时候,三维向量的知识是必不可少的。

注意:三维向量和三维矢量是同一个东西,都是来自英文单词的Vector的中文翻译,只是翻译不同而已。

解释三维向量

三维向量(x ,y ,z)比二维向量(x ,y)多一维,三维向量体现在空间上,二位向量体现在平面上。


不管二维还是三维向量,都来自两个坐标点,如上图中的A、B两个点,三维向量来自两个空间坐标点。

通过两个坐标点相减才能得到,例如上图向量BA = A - B (由B出发指向A,向量具有方向性)。

那么如果只给出一个坐标点,不给出两个坐标点,怎么得到向量呢——其实就是一个从原点(0 , 0, 0)出发指向坐标点的一个向量,例如点P的坐标是(1 ,2, 3),那么向量OP就是(1, 2, 3),虽然从数值上是一模一样,但是含义上是有区别的,比如向量PO变成了(-1, -2, -3)。

实际上,不管多少维,本质都是向量,计算法则都是相通的。只是二维和三维向量可以具体化到平面和三维空间上去理解,更高的维度只能抽象地去计算了。


三维向量叉乘

以上都是中学的知识了,作为回顾理解。

要说三维向量的叉乘,就先说我们在什么应用场景会用到:

最常用最经典的用处之一就是计算法向量(在三维空间中垂直平面的向量就命名为法向量)。法向量在图形渲染和几何处理等方面都有重要的用途。

就说最简单的,请看上图左,三维空间坐标系的原点O (0 ,0 ,0), X轴的向量是X (1, 0, 0),Y轴的向量是(0 , 1, 0)。向量OX和向量OY放一起看就像是两条边决定了一个平面,这个平面就是XOY平面,现在要求用向量OX和向量OY求出法向量是什么

这个问题我们一眼看出法向量就是(0 ,0 ,1)就是OZ。

那上图右呢? 知道两个红色的向量,怎么才能算出蓝色的那个法向量呢?

答案就是直接用两个向量做叉乘
法向量N = 向量OA X 向量OB

直接可以说两向量叉乘的结果就是法向量。

那么算出的结果为什么是朝上呢,不是朝下呢?

那就要知道叉乘其实就是右手法则,如下图(图片来自网络)

右手握拳的方向就是左边叉乘右边的方向。

向量OX 叉乘 向量OY 得到向量OZ (0, 0, 1)就是朝上的。而向量OY 叉乘 向量OX 得到向量(0 ,0, -1)就是朝下的。

那么计算公式是就是:
法向量OC =
向量OA (x1, y1, z1) 叉乘 向量 OB (x2, y2, z2) =
( y1 * z2 - y2 *z1 , x2 * z1 - z2 * x1 , x1 * y2 - x2 * y1 )

**运算结果还是一个向量。**本质上就是一系列加法和乘法的组合,可以理解为我们将这一套计算命名为叉乘,用运算符号 X 表示。

其实这个公式来自于矩阵计算的展开,公式就是直接套就完事了。

注意:为了方便理解,上面举的例子都是两向量拥有同一个起点,如果两个向量是分开的,叉乘的结果同样是他们的法向量,直接套公式计算就行了。

一句话总结: 两向量叉乘的结果就是他们的法向量,遵循右手法则。


三维向量的点乘

同样先说我们在什么场景下会用到点乘:

我们有两个三维平面,想知道这两个平面的夹角是多少,从而就能大约知道两个平面的弯曲程度,我们想到的方法就是求出两个平面的法向量,再计算两个法向量之间的夹角。

现在我们只用利用叉乘就能求出两个平面的法向量了,那接下来要怎么才能算出两个法向量的夹角呢?

答案是利用两个向量的点乘。

我们先来看看点乘长什么样:
法向量N1 (x1, y1, z1) · 法向量N2 (x2, y2, z2) =
x1 * x2 + y1* y2 + z1 * z2

运算结果是一个数值。 其实本质上又是一系列加法和乘法的组合嘛,可以理解为我们将这一套计算命名为点乘,用符号 · 表示。

那上面的计算也看不出夹角啊?

其实向量N1和向量N2点乘的结果也等于 |N1| * |N2| * cosθ 。其中|N1|是指向量N1的长度,|N2|是指向量N2的长度,cosθ中的角度θ正是两个向量的夹角。那么结果呼之欲出了:

x1 * x2 + y1* y2 + z1 * z2 = |N1| * |N2| * cosθ

未知数只有θ一个,交换一下运算顺序就是

θ = arccos( N1 · N2 / |N1| * |N2| )

点乘也就是一套公式,我们只要记住,利用这套公式,我们可以求出两个向量的夹角。

另外,我们再看看N1 · N2 = |N1| * |N2| * cosθ,似乎可以有更多的理解空间:(下图来源网络)

cosθ是三角形的 邻边/斜边,那么把|N2| 想象成是一条三角形的斜边, |N2| * cosθ的计算结果,就是向量N2在向量N1上的投影长度。而|N1| * cosθ的计算结果,就是向量N1在向量N2上的投影长度,因为θ是他们两个向量的夹角。

通俗理解三维向量的点乘与叉乘相关推荐

  1. 如何理解三维向量叉乘

    三维向量叉乘(Cross Product)是在三维空间中两个向量间进行运算的结果,它得到的是一个垂直于两个向量所在平面的新向量,其数量积为两个向量围成平行四边形面积,并且方向是由两个向量的右手定则确定 ...

  2. unity三维向量变化为角度_对于向量和矩阵的理解

    学数值计算还有复变函数了喔,矩阵忘干净了.又看了一遍 蓝棕 的相关的讲解,总结一下. 1.向量是什么? 从初到末的箭头(物理角度,表示一种运动过程) 有序的数字列表(计算机/数学角度)[1,2] 加和 ...

  3. 通俗理解“Schmidt正交化”和“正交矩阵” 此博文包含图片 (2015-05-19 09:50:47) 施密特正交化在空间上是不断建立垂直于原次维空间的新向量的过程。 如图β2垂直于β1(1维)

    通俗理解"Schmidt正交化"和"正交矩阵" 施密特正交化在空间上是不断建立垂直于原次维空间的新向量的过程. 如图β2垂直于β1(1维)构建新2维,β3垂直于 ...

  4. word2vec预训练词向量+通俗理解word2vec+CountVectorizer+TfidfVectorizer+tf-idf公式及sklearn中TfidfVectorizer

    文章目录 文分类实(一) word2vec预训练词向量 2 数据集 3 数据预处理 4 预训练word2vec模型 canci 通俗理解word2vec 独热编码 word2vec (Continuo ...

  5. LDA通俗理解LDA主题模型

    转自:http://blog.csdn.net/v_july_v/article/details/41209515#t13 通俗理解LDA主题模型 0 前言 印象中,最开始听说"LDA&qu ...

  6. 通俗理解卡尔曼滤波(无人驾驶感知融合的经典算法)

    前言 我个人有近10年AI教育经验了,中间获得过一些名号,比如北理工校外导师,微软MVP兼CSDN技术专家,本博客也有1700多万PV了,在AI圈内有极高知名度.后2015年和团队一块创业创办AI职教 ...

  7. 通俗理解LDA主题模型(转载自 v_JULY_v 大佬)

    通俗理解LDA主题模型 原文:https://blog.csdn.net/v_july_v/article/details/41209515 0 前言 印象中,最开始听说"LDA" ...

  8. 通俗理解LDA主题模型(转)

    from :http://blog.csdn.net/v_july_v/article/details/41209515 也推荐:LDA漫步指南 通俗理解LDA主题模型 0 前言 印象中,最开始听说& ...

  9. 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积

    20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...

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

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

最新文章

  1. 模板模式(TemplateMethod)和策略(StrategyMethod)模式
  2. .NET程序的性能要领和优化建议
  3. python查找文件内容_python 查找文件内容
  4. Altium Designer圆形、椭圆形铺铜
  5. 想学习linux服务器、做运维、部署项目的同学看这,linux部署
  6. label美化css,表单label美化代码
  7. tensorflow从入门到放弃(一)
  8. java中CompletionService的使用
  9. 链表基础概念与经典题目(Leetcode题解-Python语言)
  10. jquery点击事件传值加载页面_jQuery添加options点击事件并传值
  11. leetcode567. 字符串的排列
  12. DDD实战成绩管理---用户故事
  13. 显著性目标检测matlab代码_YOLO v3 目标检测终篇(附完整 GitHub 代码)
  14. 实时音频编解码之七 预加重
  15. Delphi——数组(静态数组和动态数组)、地址和指针
  16. Java知识点_类锁和对象锁的区别?
  17. MMORPG游戏服务器 - 技能系统设计【上篇】
  18. Word中录制宏,学会后成大神
  19. Java编程思想读书笔记——第十章:内部类
  20. 1.1 生日悖论+1.2快速排序+1.3字符串比较+1.4 随机算法+1.5 定理+1.6 抽样

热门文章

  1. kNN_hand_writing(机器学习)
  2. 大数据预测实战-随机森林预测实战(二)-随机森林回归模型
  3. MATLAB自带插值函数
  4. 查看电脑ip地址的命令Linux,怎么用ipconfig命令查看自己电脑的IP地址
  5. 数学建模系列-预测模型(五)---马尔可夫链
  6. 基于esp32的物联网设计
  7. 我从零开始学黑莓开发的过程
  8. 离线语音空调插座设计应用案例
  9. java 给图片添加水印_java 为图片添加水印(文字水印、图片水印)
  10. 测试用例设计方法_等价类划分法(游戏向)