news 2026/2/22 2:45:14

计算机图形学(一)|向量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机图形学(一)|向量

计算机图形学是一门计算机的学科,同时也是一门数学的学科,涉及到大量的数学变换的知识。比如描述空间位置与位移,方向判断与几何计算,构建坐标系与空间变换等数学变换,这些都离不开一个基础的数学概念,那就是向量。那么什么是向量呢?下面我们将对向量及其基础运算进行介绍~

向量

向量是具有大小也有方向的数学量,它不依赖于具体的位置,只描述相对的位移或朝向。它的示意图如下所示

上图是一个二维向量的示意图,它表示的是平面上一点A指向B的向量,可以用有序数对表示

$\vec{a}$ = (x,y)

其中,x 是 x 轴方向上的投影分量, y 是 y 轴方向上的投影分量

注:$x = x_2 - x_1 ,y = y_2 - y_1$

除了二维向量之外还有三维向量,如图所示:

图上表示在一个三维空间中A点向B点的向量,可以用有序三元组表示:

$\vec{a}$ = (x,y,z)

其中, x 是 x 轴方向上的投影分量,y 是 y 轴方向上的投影分量, z 是 z 轴方向上的投影分量

注:$x = x_2 - x_1 ,y = y_2 - y_1, z = z_2 - z_1$

那么怎么计算向量的大小和确认它的方向呢?

向量的大小

向量的模

向量的大小,也称向量的模,即向量的长度,记为||a⃗\vec{a}a||

如果是二维向量,||a⃗\vec{a}a||的计算公式为:

||a⃗\vec{a}a|| =(x2−x1)2+(y2−y1)2\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}(x2x1)2+(y2y1)2


如图所示,向量 w 和向量 v 的大小相等,方向相同,所以它们是相等的向量

如果是三维向量,那么||a⃗\vec{a}a||的计算公式为:

∥a⃗∥=(x2−x1)2+(y2−y1)2+(z1−z2)2{\|\vec{a}\|=\sqrt{(x_2-x_1)^2 + (y_2 - y_1)^2 + (z_1 - z_2)^2}}a=(x2x1)2+(y2y1)2+(z1z2)2

单位向量

单位向量就是模为1的向量,用于纯粹表示方向,是通过归一化得到
a^=a⃗∥a⃗∥(a⃗为非零向量)\hat{a} = \frac{\vec{a}}{\|\vec{a}\|} \quad (\vec{a}\text{为非零向量})a^=aa(a为非零向量)

向量的方向

上面说到,向量既有大小,也有方向,那么什么是向量的方向呢?有两种种表述方法:分别是借助单位向量法用角度描述法

借助单位向量法

其通用表示方法是借助单位向量a^=a⃗∥a⃗∥\hat{a} = \frac{\vec{a}}{\|\vec{a}\|} \quada^=aa,单位向量的模为 1,其坐标就完全代表了原向量a⃗\vec{a}a的方向

为什么说$\hat{a}$就代表了向量的方向呢?

2D 向量 $\vec{a}$ =(3,4) ,模 $|\vec{a}|=5$ ,单位向量 $\hat{a}$ = (35,45\frac{3}{5},\frac{4}{5}53,54), 这个坐标就精准描述了 $\vec{a}$ 的方向

因为在常用的直角坐标系里,都有一组两两垂直的单位基向量,它们是描述所有方向的基本单位

比如 2D 向量 $\vec{a}$ =(x,y)可以写成:

$\vec{a}$ = x $\hat{i}$ + y $\hat{j}$

这里的 x 和 y,就是 $\vec{a}$ 在 x 轴和 y 轴上的投影分量,所以上面的 $\hat{a}$ = (35,45\frac{3}{5},\frac{4}{5}53,54)用投影分量表示:$\vec{a}$ = $\frac{3}{5}$ $\hat{i}$ + $\frac{4}{5}$ $\hat{j}$ ,意思是在x轴上的份量是 $\frac{3}{5}$ , 在y轴上的分量是 $\frac{4}{5}$

注:$\hat{i}$ 和 $\hat{j}$ 分别是x轴和y轴的单位向量,大小都是 1 ,分享分别平行于x轴和y

以上是二维平面的单位向量法表示方向的方法, 三维空间的表示方法又是什么样的呢?原理是相通的~三维单位向量法表示方向法的结论如下:

$\vec{a}$ = x $\hat{i}$ + y $\hat{j}$ + z $\hat{k}$

这里的这里的 x 、y 、z ,就是 $\vec{a}$ 在x轴、y轴和z轴上的投影分量

角度描述法

因为在平面直角坐标系中,可通过向量与坐标轴的夹角来表示方向最常用的是与 x 轴正方向的夹角 $\theta$

若 2D 向量 $\vec{a}=(x,y)$,则 $\theta$ 满足:

cos$\theta$ = $\frac{x}{|\vec{a}|}$

sin$\theta$ = $\frac{y}{|\vec{a}|}$

也可直接用反正切函数计算:

tan$\theta$ = $\frac{sin\theta}{cos\theta}$ , 所以

tan$\theta$ = $\frac{y}{x}$, 得出

$\theta$ = arctan ( $\frac{y}{x}$ )

同时需根据 x、y 的正负判断 $\theta$ 所在象限,那么就可以得出向量的方向了

示例如下:

向量 $\vec{a}$ =(1,1), $||\vec{a}||$ = $\sqrt{2}$,

cos$\theta$ = $\frac{\sqrt{2}}{2}$

所以 $\theta$ = 45°

即方向为与 x 轴正方向夹角 45°

以上是二维平面直角坐标系的通过向量与坐标轴的夹角来表示向量方向的方法

三维空间场景:方向余弦法

3D 空间中向量的方向需要两个角度来确定,常用的是方向余弦

设三维向量$\vec{a}$ = (x,y,z)

与 x、y、z 轴正方向的夹角分别为α\alphaα,β\betaβ,γ\gammaγ, 这三个角的余弦值就叫方向余弦,公式如下:

cosα\alphaα= $\frac{x}{||\vec{a}||}$

cosβ\betaβ= $\frac{y}{||\vec{a}||}$

cosγ\gammaγ= $\frac{z}{||\vec{a}||}$

三个方向余弦满足关系:

cos⁡2α+cos⁡2β+cos⁡2γ=1\cos^2\alpha + \cos^2\beta + \cos^2\gamma = 1cos2α+cos2β+cos2γ=1

向量的运算

通过上述讲解我们已经初步了解向量的大小和方向的基本知识,下面我们基于这些向量的特性进行向量的运算

向量的运算包括线性运算和乘法运算

线性运算

线性运算加法运算,减法运算和乘法运算

加法运算

加法运算满足三角形法则或平行四边形法则,坐标形式下对应分量相加

如:$\vec{a}$=(x1,y1) , $\vec{b}$=(x2,y2), 那么

$\vec{a}$ + $\vec{b}$ = (x1+x2,y1+y2)

减法运算

减法运算等价于加上相反的向量 ,即

$\vec{a}$ - $\vec{b}$ = $\vec{a}$ + (- $\vec{b}$) = (x1-x2,y1-y2)

数乘运算

数乘运算是一个实数 k 与向量 $\vec{a}$ 相乘

模长变为∣k∣· $|\vec{a}|$ ,当k大于0时,方向不变;当k小于0时,方向相反

$\vec{a}$ = (x,y), k · $\vec{a}$ = (k · x1,k · x2)

乘法运算

线性运算是相对直观的运算,乘法运算就不是那么线性了(简单);

乘法运算包括数量积向量积混合积

数量积

数量积运算也叫点积运算,其示意图如下所示:

$\vec{a}$ · $\vec{b}$ = $|\vec{a}|$ $|\vec{b}|$ $cos\theta$

运算结果是标量,可以可用于判断两个向量是否垂直,因为如果 $\vec{a}$ 与 $\vec{b}$ 的大小不为0,那么只有 $cos\theta$ = 0;那么 $\theta$ = 90° , 则 $\vec{a}$ ⊥ $\vec{b}$

$\vec{a}$ · $\vec{b}$ = 0 ,则 $\vec{a}$ ⊥ $\vec{b}$

向量积

向量积也叫叉积,仅适用于三维向量,表示为 $\vec{a}$ × $\vec{b}$ ,主要用来求 $\vec{a}$ 和 $\vec{b}$ 所确定的平面的法向量

$\vec{a}$ × $\vec{b}$ 的结果是向量,模长是 $|\vec{a}|$ $|\vec{b}|$ $sin\theta$

其方向垂直于 $\vec{a}$ 和 $\vec{b}$ 所确定的平面, 并且遵循右手定则

混合积

混合积就是点积和叉积相混合的运算,比如三维向量的( $\vec{a}$ × $\vec{b}$ )· $\vec{c}$ ,其几何意义是对应平行六面体的体积,这里我们只是稍作了解~

总结

本文主要简述了向量的基本知识,主要在向量的基本属性和向量的运算两方面展开,向量的基本属性包括向量的大小方向;向量的运算则包括线性运算乘法运算,线性运算主要是加法减法数乘运算,乘法运算则分为点积叉积还有混合积,其中点积是用来判断向量是否垂直,叉积是来求法向量

以上就是本文的内容,非常感谢您能花出宝贵的时间观看,如果对您有帮助的话,欢迎点赞收藏~ 如果本文存在不足之处甚至错误的地方欢迎大家在评论区多多批评指出~我随后改正

参考来源:

  1. 《GAMES101: 现代计算机图形学入门(闫令琪)》
  2. learnOpenGL
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 20:14:02

恩捷股份隔膜技术:HeyGem生成锂电池内部结构透视视频

恩捷股份隔膜技术:AI驱动锂电池结构可视化新范式 在新能源产业高速发展的今天,锂电池早已不只是手机和电动车里的“能量块”,它正成为衡量一个国家高端制造能力的重要标尺。而在这条产业链中,像恩捷股份这样的企业,专注…

作者头像 李华
网站建设 2026/2/22 1:06:01

三安光电LED外延片:HeyGem制作照明产品技术说明

三安光电LED外延片在HeyGem数字人系统中的状态指示设计实践 在AI数字人系统逐渐从实验室走向实际部署的今天,一个常被忽视却至关重要的问题浮现出来:如何让用户“看见”AI正在做什么? 尤其是在边缘设备上运行的视频生成系统——比如基于树莓派…

作者头像 李华
网站建设 2026/2/15 5:29:59

雷锋网专题采访预约:讲述科哥开发HeyGem背后的故事

HeyGem 数字人视频生成系统的技术实践与工程思考 在短视频内容需求呈指数级增长的今天,企业、教育机构甚至个人创作者都面临着一个共同挑战:如何以更低的成本和更高的效率生产出专业级的讲解类视频?传统的拍摄流程——从脚本撰写、演员出镜、…

作者头像 李华
网站建设 2026/2/21 6:19:45

如何裁剪视频适配HeyGem?使用开源工具进行前置编辑

如何裁剪视频适配HeyGem?使用开源工具进行前置编辑 在数字人内容爆发式增长的今天,越来越多教育机构、企业宣传团队和短视频创作者开始尝试用AI生成“会说话的虚拟人”——只需一段音频和一个人物视频,就能自动生成口型同步的播报视频。这背后…

作者头像 李华
网站建设 2026/2/18 22:48:01

LeetCode 热题100:和为 K 的子数组(Java 实现详解)

LeetCode 热题100:和为 K 的子数组(Java 实现详解)本文将深入剖析 LeetCode 第560题《和为 K 的子数组》,从暴力枚举到前缀和 哈希表优化,全面讲解如何在 O(n) 时间内高效统计连续子数组和为 k 的个数。内容涵盖解题思…

作者头像 李华
网站建设 2026/2/9 16:29:38

为什么你的PHP容器启动失败?深入剖析Dockerfile常见错误

第一章:为什么你的PHP容器启动失败?深入剖析Dockerfile常见错误在构建基于PHP的Docker镜像时,容器无法正常启动是开发者常遇到的问题。多数情况下,问题根源可追溯至Dockerfile中的配置疏漏或逻辑错误。理解这些常见陷阱并掌握排查…

作者头像 李华