点积和叉积在计算机图形学中,是最为基础且重要的概念,初学者弄清它的概念的应用,是很重要的。最后一节,是为了加强理解记录,如果不看也是可以的,大家选择观看,有兴趣可以去看原视频,结合我的笔记。

前置知识

  1. 列向量
    以下均采用列向量的表示方法,和线性代数书本上的行向量不同,采用列向量表示,则表达为列向量左乘矩阵,只是定义的不同,其他含义没有什么不同。列向量写法如下:
    a→=(xyz)\overrightarrow{a} = \left( \begin{gathered} \begin{matrix} x \\ y \\ z \end{matrix} \end{gathered} \right) a=⎝⎛​xyz​​⎠⎞​

  2. 单位化
    将向量的各分量除以向量的模即得单位向量,单位指模为1的向量。

  3. 向量加减法的几何意义

  4. 行列式
    行列式在数学中,是一个函数,其定义域为det的矩阵A,取值为一个标量,写作det(A)或 | A | 。行列式可以看做是有向面积(二维)或体积(三维)的概念在一般的欧几里得空间中的推广。

点积

点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。点积的结果是一个数。

a→⋅b→=∣a∣∣b∣cosθ\overrightarrow{a} \cdot \overrightarrow{b} = \left| a \right| \left| b \right| cos {\theta} a⋅b=∣a∣∣b∣cosθ

相当于a向量的转置矩阵乘以向量b:
a→⋅b→=a→Tb→\overrightarrow{a} \cdot \overrightarrow{b} = \overrightarrow{a}^T \overrightarrow{b} a⋅b=aTb

以二维向量为例:
a→⋅b→=(xaya)T(xayb)=xaxb+yayb\overrightarrow{a} \cdot \overrightarrow{b} = {x_{a}\choose y_{a}}^T {x_{a}\choose y_{b}} = x_{a}x_{b} + y_{a}y_{b} a⋅b=(ya​xa​​)T(yb​xa​​)=xa​xb​+ya​yb​

几何意义


a向量在b向量上投影的长度 乘以 b向量的长度(模)就是 点积的结果。
点乘是存在交换律的,所以也等同于:
b向量在a向量上投影的长度 乘以 a向量的长度就是 点积的结果。

在图形学的应用

  1. 求两个向量的夹角
    当a→\overrightarrow{a}a与b→\overrightarrow{b}b都是单位向量(单位化),两个向量点积就是cos⁡θ\cos {\theta}cosθ,在通过arccos⁡\arccosarccos 就可以求出夹角。

  2. 求投影
    将a→\overrightarrow{a}a单位化,a→⋅b→\overrightarrow{a} \cdot \overrightarrow{b}a⋅b就是b→\overrightarrow{b}b在a→\overrightarrow{a}a上的投影长度。
    《计算机图形学》书上有这么一个举例,利用投影将向量w分解成两个向量和:

  3. 比较两个向量的接近程度(方向上)
    也就是向量是否两个向量间的夹角大小,在聚光灯的效果计算中,可以根据点积来得到光照效果,如果点积越大,说明夹角越小,则物体离光照的轴线越近,光照越强。
    也常会用来判断两向量是否为同方向:

举个例子

判断一个点是都在某图形内:

叉积

向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。
∣v→×w→∣=∣v∣∣w∣sinθ\left| \overrightarrow{v} \times \overrightarrow{w} \right| = \left| v \right| \left| w \right| sin {\theta} ∣∣∣​v×w∣∣∣​=∣v∣∣w∣sinθ
这只确定了叉积的长度,众所周知向量有长度,还有方向的,方向为垂直于两个向量的方向,但是呢,垂直方向有两个。
这里我们采用右手螺旋定则确定方向。v到w的方向就是右手四指弯曲的方向,大拇指的方向就是叉积的方向。

二维向量的叉积是个标量,看起来违背了定义,先假设二维向量得出来的叉积是z,如果把二维向量看作成z轴值恒为0的三维向量,它们的叉积就(0,0,z)T(0,0,z)^T(0,0,z)T,三维空间被压缩成了二维,叉积就只是一个标量了。

v→⋅w→=xvyw−yvxw\overrightarrow{v} \cdot \overrightarrow{w} = x_vy_w - y_vx_w v⋅w=xv​yw​−yv​xw​

三维向量的叉积的结果是个向量:

v→⋅w→=(yvzw−zvywzvxw−xvzwxvyw−yvxw)\overrightarrow{v} \cdot \overrightarrow{w} = \left( \begin{gathered} \begin{matrix} y_v z_w - z_v y_w \\ z_vx_w - x_vz_w \\ x_vy_w - y_vx_w \end{matrix} \end{gathered} \right) v⋅w=⎝⎛​yv​zw​−zv​yw​zv​xw​−xv​zw​xv​yw​−yv​xw​​​⎠⎞​
这个看起来很难记忆,我们随后再讲解。444额方法

几何意义

在二维空间,两个向量叉积就是两向量形成的平行四边形的面积,正负要引入Z轴,由右手螺旋定则确定,如果大拇指指向Z正轴就为正,反之为负;
在三维空间,两个向量叉积就是垂直于两向量形成的平面的向量(称为法向量)采用右手螺旋定则确定方向。v到w的方向就是右手四指弯曲的方向,大拇指的方向就是叉积的方向。

坐标系的问题

如果我们已知x坐标轴和y坐标轴,可以推导出z坐标轴。可能大家都听说过有左手坐标系和右手坐标系这两种说法,可以用x、y轴叉积与z轴的关系确定。
右手坐标系:
x→×y→=z→\overrightarrow{x} \times \overrightarrow{y} = \overrightarrow{z} x×y​=z
左手坐标系:
x→×y→=−z→\overrightarrow{x} \times \overrightarrow{y} = -\overrightarrow{z} x×y​=−z

在图形学的应用

  1. 二维空间判断左右


这个判断又可以衍生出如何判断一条路径存在交叉
2. 三维空间求法向量
法向量在计算图形学的应用很广泛,很多地方都会利用到,比如求已知入射角度OB→\overrightarrow{OB}OB求一个平面的反射角度BP→\overrightarrow{BP}BP。取平面上不共线的三个点ABC,求得法线
AB→×AC→=Z→(法线)\overrightarrow{AB} \times \overrightarrow{AC} = \overrightarrow{Z} (法线) AB×AC=Z(法线)

BP→=OB→−Z→\overrightarrow{BP} = \overrightarrow{OB} - \overrightarrow{Z} BP=OB−Z

再举个例子

判断一个点是都在某图形内

以线性变换去看点乘和叉乘

这部分我是基于B站的一部分的视频总结的,如果觉得作者讲解不够好,可以去看原视频。

点乘

先来看两向量的点乘另一种求法,a向量的转置矩阵乘以向量b:
a→⋅b→=a→Tb→\overrightarrow{a} \cdot \overrightarrow{b} = \overrightarrow{a}^T \overrightarrow{b} a⋅b=aTb
以二维空间为例,定义两个基向量组成的矩阵

(21)=2i→+j→\left( \begin{array}{c} 2 \\ 1 \end{array} \right)= 2\overrightarrow{i} + \overrightarrow{j} (21​)=2i+j​
点乘就是从二维空间到数轴的线性变换,将空间投影到给定的数轴来定义。
a→T\overrightarrow{a}^TaT矩阵作用就是,将基变量在a→\overrightarrow{a}a上投影为两个数字,而不是向量,将此作为基变量去做线性变换,从而进行空间压缩。

叉乘

截了视频的两张图,

[xyz]\left[ \begin{array}{c} x \\ y \\ z\end{array} \right]⎣⎡​xyz​⎦⎤​表示一个随机变量,也可理解为一个为向量的变量。
上图是一个变量为向量的函数。根据v w 可以求常量 p

有没有觉得p→\overrightarrow{p}p​与u→×v→\overrightarrow{u} \times \overrightarrow{v}u×v 叉积一模一样,那么我们认定p→\overrightarrow{p}p​就是u→×v→\overrightarrow{u} \times \overrightarrow{v}u×v的 叉积,来解释叉积的几何意义。

先看左边,p→\overrightarrow{p}p​与随机变量的点积,其实就随机变量在p→\overrightarrow{p}p​的投影长度,再乘以p→\overrightarrow{p}p​的模。(1)

再看看右边,是一个行列式,表示这三个向量组成的立方体的体积大小。(2)

我们再回顾下,体积的求法,高✖️底面积(u v 组成底面)(3)

高为随机变量在平面垂直方向的投影长度。(4)

由(2)(3)(4)得到右边为 随机变量在平面垂直方向的投影长度,再乘以u v 组成的平面面积(5)

由(1)(5)得到,p→\overrightarrow{p}p​为,模长为两向量组成的平面面积,且为这个平面的法线。

这个叉积的几何意义不就是这样的嘛。

字丑的那些图都是我画的,除了一张小手手,请各位见谅,最后感谢我的首席插画师 yc君 画的那种小手手的插图,O(∩_∩)O哈哈~。

点积和叉积在计算机图形学的应用相关推荐

  1. 计算机图形学中需要掌握的数学基础知识有哪些?

    计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...

  2. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  3. 17、计算机图形学——辐射度量学

    一.为什么要引入辐射度量学 因为white-style光线追踪即使加入了光的反射和折射,但是在计算光线的亮度时,依然采用的是blinn-phong光线模型,而blinn-phong光线模型本身就不是一 ...

  4. 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)

    一.环境贴图 比如下面的这张图,左边的是一张表示环境光的纹理,这个纹理表示屋子内部四面八方都是啥样,右边是一个茶壶, 将纹理映射到这个茶壶上,就能茶壶上渲染出周围的环境 还有这样的球形环境贴图(sph ...

  5. 4、计算机图形学——光栅化、抗锯齿、画家算法和深度缓冲算法(Z-buffer)

    一.光栅化(Rasterization) 1.1.概念 光栅raster这个词就是德语中屏幕的意思,光栅化的意思就是将图像绘制在屏幕上进行显示. 1.2.三角形光栅化过程简述 首先,为什么要以三角形的 ...

  6. 3、计算机图形学——模型视图变换、投影变换与视口变换

    一.模型视图变换 模型视图变换主要是为了让摄像机回归到世界坐标的原点并且和拍摄物体一起进行变换,便于计算 模型视图变换的根据就是物体和相机的相对位置不变,那么,投影得到的图片也是不变的 首先规定相机拍 ...

  7. 2、计算机图形学——3D变换

    1.1.3D点和向量的齐次坐标表示 根据1中的第二部分齐次坐标可知,3D点的齐次坐标可表示为 1.2.3D仿射变换的一般形式 根据1中的第三部分变换的组合可知,3D点的仿射变换的齐次坐标方程可表示为 ...

  8. 可以买的一本书:3D计算机图形学(原书第3版)

    作 者 (英)沃特(Watt,A.) ,包宏 译 出 版 社 机械工业出版社 图书定价 ¥69.00 第1章 计算机图形学的数学基础 1 1.1 处理三维结构 1 1.1.1 计算机图形学中的三维仿射 ...

  9. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具

    计算机图形学 opengl版本 第三版------胡事民 第四章  图形学中的向量工具 一   基础 1:向量分析和变换   两个工具  可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...

最新文章

  1. mysql的1067启动错误的解决
  2. 【组合数学】生成函数 ( 正整数拆分 | 无序不重复拆分示例 )
  3. php光标添加,JS在可编辑的div中的光标位置插入内容的方法_javascript技巧
  4. i350t4和v2区别_I350T4V2 英特尔原装I350网卡 全新千兆电口网卡
  5. 趁webpack5还没出,先升级成webpack4吧
  6. 【Swift学习笔记00】——enumeration枚举类型遵循协议protocol
  7. eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写
  8. 分布与并行计算—生命游戏(Java)
  9. asp.net学习之扩展GridView
  10. 用GDB调试程序(11)──查看运行时数据(2)-转
  11. 从头搭建drbd+openfiler+corosync (二)
  12. 代码管理(二)sourcetree 安装与使用
  13. hive数据库初始化失败
  14. trunc函数_这几个舍入函数你都会用吗?
  15. Google 和 bing 都无法替代的10大深网搜索引擎
  16. 吃冬瓜对宝宝有什么好处?
  17. Java 培训四个月能学会吗?
  18. leetcode oj java Bulls and Cows
  19. 什么是电子邮件地址?
  20. django实训报告

热门文章

  1. matlab eps函数
  2. app自动化测试appium教程之二——adb命令
  3. 怎么用计算机上摄像头拍照,WinXP怎么用电脑拍照片?WinXP用电脑摄像头拍照的方法...
  4. 计算冒泡排序的时间复杂度和空间复杂度
  5. LeetCode 2353. 设计食物评分系统 维护哈希表+set
  6. 第一代到第四代多址技术:从FDMA、TDMA、CDMA到OFDMA
  7. 关于MSN一些异常的解决方案
  8. 成龙60大寿演唱会 众星云集零出场费
  9. 美国信用卡返现率优化到3%-5%,AI优化算法的应用
  10. PiCIE: Unsupervised Semantic Segmentation Using Invariance and Equivariance in Clustering论文翻译