点积和叉积在计算机图形学的应用

article/2025/11/3 14:47:29

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

前置知识

  1. 列向量
    以下均采用列向量的表示方法,和线性代数书本上的行向量不同,采用列向量表示,则表达为列向量左乘矩阵,只是定义的不同,其他含义没有什么不同。列向量写法如下:
    a → = ( x y z ) \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 ∣ c o s θ \overrightarrow{a} \cdot \overrightarrow{b} = \left| a \right| \left| b \right| cos {\theta} a b =abcosθ

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

以二维向量为例:
a → ⋅ b → = ( x a y a ) T ( x a y b ) = x a x b + y a y b \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 =(yaxa)T(ybxa)=xaxb+yayb

在这里插入图片描述

几何意义

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

在图形学的应用

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

  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 ∣ s i n θ \left| \overrightarrow{v} \times \overrightarrow{w} \right| = \left| v \right| \left| w \right| sin {\theta} v ×w =vwsinθ
这只确定了叉积的长度,众所周知向量有长度,还有方向的,方向为垂直于两个向量的方向,但是呢,垂直方向有两个。
这里我们采用右手螺旋定则确定方向。v到w的方向就是右手四指弯曲的方向,大拇指的方向就是叉积的方向。
在这里插入图片描述

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

v → ⋅ w → = x v y w − y v x w \overrightarrow{v} \cdot \overrightarrow{w} = x_vy_w - y_vx_w v w =xvywyvxw

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

v → ⋅ w → = ( y v z w − z v y w z v x w − x v z w x v y w − y v x w ) \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 =yvzwzvywzvxwxvzwxvywyvxw
这个看起来很难记忆,我们随后再讲解。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. 三维空间求法向量
法向量在计算图形学的应用很广泛,很多地方都会利用到,比如求已知入射角度 O B → \overrightarrow{OB} OB 求一个平面的反射角度 B P → \overrightarrow{BP} BP 。取平面上不共线的三个点ABC,求得法线
A B → × A C → = Z → ( 法 线 ) \overrightarrow{AB} \times \overrightarrow{AC} = \overrightarrow{Z} (法线) AB ×AC =Z 线

在这里插入图片描述 B P → = O B → − Z → \overrightarrow{BP} = \overrightarrow{OB} - \overrightarrow{Z} BP =OB Z

再举个例子

判断一个点是都在某图形内
在这里插入图片描述

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

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

点乘

先来看两向量的点乘另一种求法,a向量的转置矩阵乘以向量b:
a → ⋅ b → = a → T b → \overrightarrow{a} \cdot \overrightarrow{b} = \overrightarrow{a}^T \overrightarrow{b} a b =a Tb
以二维空间为例,定义两个基向量组成的矩阵
在这里插入图片描述
( 2 1 ) = 2 i → + j → \left( \begin{array}{c} 2 \\ 1 \end{array} \right)= 2\overrightarrow{i} + \overrightarrow{j} (21)=2i +j
点乘就是从二维空间到数轴的线性变换,将空间投影到给定的数轴来定义。
a → T \overrightarrow{a}^T a T矩阵作用就是,将基变量在 a → \overrightarrow{a} a 上投影为两个数字,而不是向量,将此作为基变量去做线性变换,从而进行空间压缩。

叉乘

截了视频的两张图,
在这里插入图片描述
[ x y z ] \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哈哈~。


http://chatgpt.dhexx.cn/article/kI1qhGLw.shtml

相关文章

线性代数【18】点积和对偶性

前言: 本节,尝试通过线性变换来理解,或者说来表述点积。 在尝试理解的过程中,我们发现了线性变换,尤其是从多维空间到一维空间的线性变换,一定有某个严格的1x2的向量和他对应,这种微妙的而自然…

【Python】详解Numpy中的点积运算

1. 引言 根据数学家的说法,点积是一种运算,它取两个等长的向量作为输入,然后返回一个数字(标量)。向量A与向量B的点积用符号表示为A•B。在线性代数中,点积是输入向量中每个对应元素的乘积之和。 本文重点…

cuda点积运算

最近在研究并行运算的规约算法,在看《GPU高性能编程CUDA实战》这本书中点积运算时,有些问题想了很久,记录下来; 注点积公式:(dot(A,B)a1*b1a2*b2...an*bn) 书上例子算点积运算时分为了以下几步…

Unity3D C#数学系列之点积

文章目录 1 定义2 几何意义3 向量a向量b xaxbyaybzazb4 应用案例4.1 求两向量的夹角4.2 判断两向量是否垂直4.3 判断NPC是否在攻击范围内4.4 已知入射光线和表面法线求反射光线 5 项目 1 定义 可知,点积得到的是一个标量,这个标量代表什么呢&#xff1f…

内积、点积和坐标

内积是一个纯数学概念,在向量空间中,只要满足一定的性质(正性、定性、可加性、齐性和共轭对称性)的函数运算就可以成为内积,因此具体的内积具有很多种形式。 点积是定义在空间上的一种内积,具体的形式为&am…

点积与投影的关系

点积与投影的关系 一个向量在另一个单位向量上的投影长度,等于这两个向量的点积。 怎么理解 a、b、c分别为三个向量,如果有abc,那么c在某个向量上的投影值等于a和b分别在该向量上的投影值相加(反方向的投影为负值) i,j分别是向…

防抖与节流的个人理解及其对应的应用场景

什么是防抖和节流,他们的应用场景有哪些 防抖 (debounce) 防抖,顾名思义,防止抖动,以免把一次事件误认为多次,敲键盘就是一个每天都会接触到的防抖操作。 想要了解一个概念,必先了解概念所应用的场景。在…

JS防抖和节流

欢迎学习交流!!! 持续更新中… 文章目录 防抖节流二者区别应用场景 防抖和节流都是为了项目优化而出现的,官方没有具体定义的,他们的出现主要是为了解决一些短时间内连续执行的事件带来性能上的不佳和内存的消耗巨大等…

手写防抖节流

文章目录 手写前端常用技巧-防抖节流防抖节流1. 首节流2. 尾节流3. 首尾节流 总结 手写前端常用技巧-防抖节流 防抖:当持续触发事件时,一定时间内没有再触发事件,才会在一段时间之后触发事件处理函数。 节流:当持续触发事件时&am…

防抖和节流

1. 什么是防抖 防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。 1.2. 防抖的应用场景 用户在输入框中连续输入一串字符时,可以通过防抖策略&…

lodash节流

滚动条事件优化 可以用 lodash节流 npm i -S lodash Lodash 简介 | Lodash 中文文档 | Lodash 中文网

JS 节流

JS 节流 说明: 1.对于高频触发的监听事件函数,实现对于触发次数的间接限制,从而降低触发次数. 2.关键点在于控制时间周期内,阻止触发内容,即上锁;在时间周期外解锁,触发内容。 3.主要是对间隔时间限制,在规定时间内,阻止触发事件内指定程序或默认抛弃 4.三种实现节流方式:时间…

个人对于节流的理解!

文章目录 前言一、节流是什么?二、节流的实现总结 前言 防抖和节流是前端经常会被提起以及涉及到的内容,更是前端性能优化的手段之一,我初学防抖和节流也遭遇了很多坑,所以想写一篇博客一则当作学习笔记,二则如果能帮…

节流的基本使用以及理解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、节流是什么?应用场景 二、使用步骤1.定义节流阀2.绑定 mousemove 事件3. 判断节流阀是否为空,如果不为空,说明距离上一次执行时间还没有…

图片跟随鼠标样式跟随效果(附完整代码及效果)

Demo效果如下&#xff1a; 完整代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta …

前端必备技能之----节流

&#xff08;引言----和大佬们出去吃饭总是会有收获的&#xff0c;这个知识点是我之前从未考虑过的事情&#xff0c;但是在现代的设计开发之中却是非常重要且使用频率非常之高的两个概念。&#xff09; 作为一个前端的初学者&#xff0c;因为之前淋过雨&#xff0c;所以想为同…

html锚点链接小案例

案例1&#xff1a;回到首页 <html ><head><meta charset"utf-8"><title></title><style type"text/css"> *{border: 0;margin: 0; padding: 0;}.box1, .box2{height: 3000px; width: 200px;background-color: green…

HTML锚点为什么叫hash,锚点链接和hash属性

相信大家挺经常见过这样一个效果。有一个很长很长的页面,分成好几部分,目录中一点击,就能定位到页面某个位置。 例如:有这样一个目录,例如你点击一下“HTML”,就会直接跳转到“HTML”的页面位置 这就是锚点链接(也叫书签链接),常常用于那些内容庞大繁琐的网页,通过点击…

html5添加锚点锭接,为页面添加锚点链接

为页面添加锚点链接 开哈础是发通待质击文以为近哈知按分过续的战发中会遇到为页面中添加锚点链接的需求,即在页面中点击某处,可以跳转到与之有联系的地方。添加锚点的方法比较多,在这儿,把常用的方法大享上。是发了概开程态间些告人屏果会区。一一是控标近体到班都一从小述…

菜鸟 html锚链接,Vue锚点链接

锚点链接是我们在开发中经常会用到的一个技术点&#xff0c;常见的常见有&#xff0c;页面内容过多&#xff0c;而我们不希望拿鼠标一直来回滚动&#xff0c;就需要用到锚点链接&#xff0c;以 " 目录 " 的方式来进行对应的跳转。 而在常见的项目中&#xff0c;锚点链…