news 2026/4/23 13:50:59

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

作者头像

张小明

前端开发工程师

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/4/23 10:13:41

低代码时代PHP开发者如何突围?掌握这3种插件模式稳拿高薪

第一章:低代码时代PHP开发者的职业挑战在低代码平台迅速普及的当下,传统PHP开发者面临前所未有的职业转型压力。可视化拖拽界面、自动化流程生成和一键部署功能大幅降低了应用开发门槛,使得非技术人员也能快速构建基础业务系统。这一趋势直接…

作者头像 李华
网站建设 2026/4/23 10:11:22

字节跳动火山引擎对接思考:利用其TTS能力增强HeyGem输入源

字节跳动火山引擎对接思考:利用其TTS能力增强HeyGem输入源 在数字人内容生产日益普及的今天,一个核心痛点始终存在:如何高效、低成本地生成自然流畅的语音驱动信号?传统流程中,音频往往依赖真人录制——不仅耗时费力&a…

作者头像 李华
网站建设 2026/4/23 10:12:52

客户成功案例包装:展示某金融公司使用HeyGem培训员工

某金融企业如何用AI数字人实现高效员工培训 在一家全国性商业银行的合规培训部门,每年最头疼的事莫过于组织一次覆盖28个分行、上千名员工的统一政策宣讲。过去,他们需要协调各地拍摄场地、安排出镜人员、反复审核脚本表达是否准确——整个流程动辄耗时两…

作者头像 李华
网站建设 2026/4/23 10:11:25

【开题答辩全过程】以 基于JSP技术的健康信息网站的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/23 10:11:05

北方华创半导体装备:HeyGem制作国产替代进程纪录片

北方华创半导体装备:用AI记录国产替代的每一步 在高端制造领域,技术突破往往伴随着漫长的研发周期和密集的工程投入。如何高效地记录这些关键进程,并将其转化为可传播、可复用的知识资产?北方华创作为国内领先的半导体装备制造商&…

作者头像 李华
网站建设 2026/4/23 10:11:31

PHP分库分表路由机制深度解析(从原理到落地的完整路径)

第一章:PHP分库分表路由机制概述在高并发、大数据量的业务场景下,单一数据库实例难以承载海量请求与存储压力。分库分表成为提升系统可扩展性与性能的重要手段。其核心在于将原本集中存储的数据按一定规则分散到多个数据库或数据表中,而路由机…

作者头像 李华