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

点积和叉积在计算机图形学的应用点积和叉积在计算机图形学中 是最为基础且重要的概念 初学者弄清它的概念的应用 是很重要的 先说明下 以下均采用列向量的表示方法 和线性代数书本上的行向量不同 采用列向量表示 则表达为列向量左乘矩阵 只是定义的不同 其他含义没有什么不同 点积点积在数学中 又称数量积 dotproduct scalarproduc 是指接受在实数 R 上的两个向量并返回一个实数值标量的二元运算 它是欧几里得空间的标准内积 点积的结果是一个数 a b a b cos overrightarr a

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

前置知识

  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向量上投影的长度 乘以 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. 比较两个向量的接近程度(方向上)
    也就是向量是否两个向量间的夹角大小,在聚光灯的效果计算中,可以根据点积来得到光照效果,如果点积越大,说明夹角越小,则物体离光照的轴线越近,光照越强。
    也常会用来判断两向量是否为同方向:
    在这里插入图片描述


举个例子

叉积

二维向量的叉积是个标量,看起来违背了定义,先假设二维向量得出来的叉积是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额方法
在这里插入图片描述

几何意义

坐标系的问题

在图形学的应用

  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站的一部分的视频总结的,如果觉得作者讲解不够好,可以去看原视频。

点乘

叉乘

先看左边, 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哈哈~。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202501.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:59
下一篇 2026年3月20日 上午7:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号