Shader编程学习笔记(十四)—— 3D数学基础2 - 向量

本文深入探讨了向量的基本概念及其在不同维度中的表示,包括2D、3D及4D向量,并详细讲解了向量的加法、减法、与标量的乘法、单位化、点积与叉积的运算方法及其几何意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、引言

  这一篇主要复习中学知识向量的相关知识,涉及知识点如下:

  • 向量
  • 向量的运算
  • 向量的几何意义

2、向量

2.1、向量

  向量:既有大小又有方向的量称为向量。向量是和标量作对比的,标量只有大小没有方向。向量的大小指的是向量的长度。向量是没有位置的概念,只有大小各方向。在unity中有以下几种向量:

  • 2D 向量:(x,y) -> (1,0) (0,1) (-0.5,0)
  • 3D 向量:(x,y,z) -> (1,0,0) (0,1,0) (-0.5,0,0)
  • 4D 向量:(x,y,z,z) -> (1,0,0,1) (0,1,0,1) (-0.5,0,0,1)

这里的4D向量主要是用来运算矩阵的,这里在游戏引擎中我们可以把4D向量叫做齐次向量。

2.2、向量的运算

2.2.1、向量的加法

在这里插入图片描述
上图演示了 v 1 ⃗ 与 v 2 ⃗ \vec{v_1} 与\vec{v_2} v1 v2 的加法运算:
v 3 ⃗ = v 2 ⃗ + v 1 ⃗ \vec{v_3} = \vec{v_2} + \vec{v_1} v3 =v2 +v1
v 3 ⃗ . x = v 2 ⃗ . x + v 1 ⃗ . x \vec{v_3}.x = \vec{v_2}.x+ \vec{{v_1}}.x v3 .x=v2 .x+v1 .x
v 3 ⃗ . y = v 2 ⃗ . y + v 1 ⃗ . y \vec{v_3}.y = \vec{v_2}.y+ \vec{v_1}.y v3 .y=v2 .y+v1 .y
向量满足加法的交换律:
a ⃗ + b ⃗ = b ⃗ + a ⃗ \vec{a} + \vec{b} = \vec{b} + \vec{a} a +b =b +a

2.2.2、向量的减法

在这里插入图片描述
上图演示了 v 1 ⃗ 与 v 2 ⃗ \vec{v_1} 与\vec{v_2} v1 v2 的减法运算:
v 3 ⃗ = v 2 ⃗ − v 1 ⃗ \vec{v_3} = \vec{v_2} - \vec{v_1} v3 =v2 v1
v 3 ⃗ . x = v 2 ⃗ . x − v 1 ⃗ . x \vec{v_3}.x = \vec{v_2}.x- \vec{v_1}.x v3 .x=v2 .xv1 .x
v 3 ⃗ . y = v 2 ⃗ . y − v 1 ⃗ . y \vec{v_3}.y= \vec{v_2}.y-\vec{v_1}.y v3 .y=v2 .yv1 .y

2.2.3、向量与标量的乘法

在这里插入图片描述

eg: V = (1,2,2)
D = 2
R = v * D = 2 * (1,2,2) = (2,4,4)

2.2.4、向量的单位化

  向量的单位化是指向量的每一个分量除以这个向量的长度得到的向量。单位向量的特点是长度为1,方向是单位向量的方向。
向量的长度由该向量所有坐标的平方和开平方根而计算得出

向量 R = {1,2,2}
R的单位向量就是: 1 2 + 2 2 + 2 2 2 = 9 = 3 \quad \sqrt[2]{1^2 + 2^2 + 2^2} = \quad \sqrt[]{9} = 3 212+22+22 =9 =3

2.2.5、向量的点积
2.2.5.1、向量的点积运算

在这里插入图片描述
向量的点积描述的是向量与向量的乘积,eg:

v1 = (1,0)
v2 = (0.5,0.866)
Dot(V1,V2) = v1 * V2
= (1,0) * (0.5,0.866)
= 1 * 0.5 + 0 * 0.866
= 0.5

需要注意的是:

点积的结果是一个标量值

2.2.5.2、向量的点积的几何意义

点积的几何意义:

D o t ( V 1 ⃗ , V 2 ⃗ ) = ∣ ∣ V 1 ⃗ ∣ ∣ ⋅ ∣ ∣ V 2 ⃗ ∣ ∣ ⋅ c o s ( θ ) Dot(\vec{V_1},\vec{V_2}) = ||\vec{V_1}|| \cdot ||\vec{V_2}|| \cdot cos(\theta) Dot(V1 V2 )=V1 V2 cos(θ)
c o s ( θ ) = D o t ( V 1 ⃗ , V 2 ⃗ ) ∣ ∣ V 1 ⃗ ∣ ∣ ⋅ ∣ ∣ V 2 ⃗ ∣ ∣ cos(\theta) = \frac{Dot(\vec{V_1},\vec{V_2})}{||\vec{V_1}|| \cdot ||\vec{V_2}||} cos(θ)=V1 V2 Dot(V1 V2 )
特别的:
  当 V 1 ⃗ , V 2 ⃗ \vec{V_1},\vec{V_2} V1 V2 都是单位向量时
c o s ( θ ) = D o t ( V 1 ⃗ , V 2 ⃗ ) ∣ ∣ V 1 ⃗ ∣ ∣ ⋅ ∣ ∣ V 2 ⃗ ∣ ∣ cos(\theta) = \frac{Dot(\vec{V_1},\vec{V_2})}{||\vec{V_1}|| \cdot ||\vec{V_2}||} cos(θ)=V1 V2 Dot(V1 V2 )
θ = a c o s ( V 1 ⃗ , V 2 ⃗ ) ) = a c o s ( 0.5 ) = 6 0 ∘ \theta = acos(\vec{V_1},\vec{V_2}))=acos(0.5) = 60^\circ θ=acos(V1 V2 ))=acos(0.5)=60

常用三角函数值

$$\sin(\theta)$$$$\cos(\theta)$$
$$0^\circ$$01
$$30^\circ$$$$\frac{1}{2}$$$$\frac{\sqrt[]{3}}{2}$$
$$45^\circ$$$$\frac{\sqrt[]{2}}{2}$$$$\frac{\sqrt[]{2}}{2}$$
$$60^\circ$$$$\frac{\sqrt[]{3}}{2}$$$$\frac{1}{2}$$
$$90^\circ$$10
$$120^\circ$$$$\frac{\sqrt[]{3}}{2}$$$$-\frac{1}{2}$$
$$180^\circ$$0-1
  • 当两个向量相乘大于0时,两个向量的夹角小于 9 0 ∘ 90^\circ 90
  • 当两个向量相乘小于0时,两个向量的夹角大于 9 0 ∘ 90^\circ 90小于 18 0 ∘ 180^\circ 180
  • 当两个向量相乘等于0时,两个向量的夹角等于 9 0 ∘ 90^\circ 90
  • a ⃗ ⋅ b ⃗ = b ⃗ ⋅ a ⃗ = ∣ ∣ a ⃗ ∣ ∣ ⋅ ∣ ∣ b ⃗ ∣ ∣ ⋅ c o s ( θ ) \vec{a}\cdot\vec{b} = \vec{b}\cdot\vec{a}=||\vec{a}|| \cdot ||\vec{b}|| \cdot cos(\theta) a b =b a =a b cos(θ)
2.2.6、向量的叉积
2.2.6.1、向量的叉积计算

有两个向量:
V 1 ⃗ = ( 1 , 0 , 0 ) \vec{V_1} = (1,0,0) V1 =(1,0,0);
V 2 ⃗ = ( 0 , 1 , 0 ) \vec{V_2} = (0,1,0) V2 =(0,1,0);

叉积公式:
C r o s s ( V 1 ⃗ , V 2 ⃗ ) = ∣ x 1 y 1 z 1 ∣ × ∣ x 2 y 2 z 2 ∣ = ∣ y 1 × z 2 − z 1 × y 2 z 1 × x 2 − z 2 × x 1 x 1 × y 2 − y 1 × x 2 ∣ Cross(\vec{V_1},\vec{V_2})= \begin {vmatrix}x_1 \\ y_1 \\ z_1 \\\end{vmatrix} \times\begin {vmatrix}x_2 \\ y_2 \\ z_2 \\\end{vmatrix} =\begin {vmatrix}y_1 \times z_2 - z_1 \times y_2 \\ z_1 \times x_2 - z_2 \times x_1 \\x_1 \times y_2 - y_1 \times x_2 \\\end{vmatrix} Cross(V1 ,V2 )=x1y1z1×x2y2z2=y1×z2z1×y2z1×x2z2×x1x1×y2y1×x2

2.2.6.2、向量的叉积的几何意义

eg:
在这里插入图片描述
∣ 1 0 0 ∣ × ∣ 0 1 0 ∣ = ∣ 0 × 0 − 0 × 1 0 × 0 − 1 × 0 1 × 0 − 0 × 0 ∣ = ∣ 0 0 1 ∣ \begin {vmatrix}1 \\ 0 \\ 0 \\\end{vmatrix} \times\begin {vmatrix}0 \\ 1 \\ 0 \\\end{vmatrix} =\begin {vmatrix}0 \times 0 - 0 \times1 \\ 0 \times 0 - 1 \times 0 \\1\times 0 - 0 \times 0 \\\end{vmatrix}= \begin {vmatrix}0 \\ 0 \\ 1 \\\end{vmatrix} 100×010=0×00×10×01×01×00×0=001
由上图中的 U ⃗ × V ⃗ = N ⃗ \vec{U}\times\vec{V}= \vec{N} U ×V =N 我们可以看到 N ⃗ \vec{N} N U ⃗ \vec{U} U V ⃗ \vec{V} V 都垂直。

两个向量的叉积可以得到一个同时垂直于这两个向量的新向量,这个新向量垂直于这两个向量所在的平面,这个向量就是这个平面的法向量!

两个向量的叉积不满足交换律:
U ⃗ × V ⃗ = − V ⃗ × U ⃗ \vec{U}\times\vec{V}=-\vec{V}\times\vec{U} U ×V =V ×U

3、结束语


The End
  好了,今天的分享就到这里,如有不足之处,还望大家及时指正,随时欢迎探讨交流!!!


喜欢的朋友们,请帮顶、点赞、评论!您的肯定是我写作的不竭动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对酒当歌﹏✍

您的鼓励是我写作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值