向量技巧/常识/方法 | 举例用途 | Three.js 方法 |
---|---|---|
向量加减法 | 计算物体的相对位置、运动轨迹等 | Vector3.add() , Vector3.sub() |
向量缩放 | 调整物体的大小、速度等 | Vector3.multiplyScalar() , Vector3.divideScalar() |
向量点乘 (Dot Product)即点积 | 计算两个向量的夹角、判断方向是否相同等 | Vector3.dot() |
向量叉乘 (Cross Product)叉积 | 计算两个向量的垂直向量、判断方向的左右关系等 | Vector3.cross() |
向量归一化 (Normalization) | 将向量缩放到单位长度,用于计算方向、光照等 | Vector3.normalize() |
向量线性插值 (Lerp) | 在两个向量之间进行平滑过渡,用于动画、渐变效果等 | Vector3.lerp() |
向量投影 (Projection) | 计算一个向量在另一个向量上的投影,用于碰撞检测、阴影计算等 | Vector3.projectOnVector() , Vector3.projectOnPlane() |
向量反射 (Reflection) | 计算一个向量关于另一个向量的反射向量,用于光线追踪、物理模拟等 | Vector3.reflect() |
向量旋转 (Rotation) | 利用四元数或旋转矩阵对向量进行旋转变换,用于物体的旋转运动、相机的视角控制等 | Vector3.applyQuaternion() , Vector3.applyMatrix4() |
向量分解 (Decomposition) | 将一个向量分解为多个分量,例如将速度向量分解为水平和垂直分量,用于物理模拟、碰撞检测等 | 需要手动计算分量,例如 vector.x , vector.y , vector.z |
向量
js
一个平面可以由两个非平行的向量确定,而这两个向量的叉积即为法线向量
根据向量投影的定义,对于一个向量v和一个单位向量u,v在u方向上的投影向量proj_vu可以通过以下公式计算:
proj_vu = dot(v, u) * u
其中dot(v, u)是v和u的点积,表示v在u方向上的投影长度,u是一个单位向量,表示u的长度为1,方向与投影方向相同。
在这个例子中,杯子的移动向量为向右的单位向量(1,0,0),桌面法线向量为向上的单位向量(0,1,0)。根据上述公式,投影向量proj_right_up可以计算为:
proj_right_up = dot((1,0,0), (0,1,0)) * (0,1,0) = 0 * (0,1,0) = (0,0,0)
我不懂向量运算, dot((1,0,0), (0,1,0)) * (0,1,0) 的具体计算过程是?
首先,dot((1,0,0), (0,1,0))表示向量(1,0,0)和向量(0,1,0)的点积,也称为内积。点积的计算公式是将两个向量对应位置的数值相乘,然后将乘积相加,即:
dot((1,0,0), (0,1,0)) = 1*0 + 0*1 + 0*0 = 0
所以,dot((1,0,0), (0,1,0))的结果为0。
接下来,我们将0乘以(0,1,0)。这个操作实际上是将向量(0,1,0)的每个分量都乘以0,得到的结果向量仍然是(0,1,0)本身。因此,
dot((1,0,0), (0,1,0)) * (0,1,0) = 0 * (0,1,0) = (0,0,0)
所以,这个计算的结果是(0,0,0)。
总结一下,这个计算的过程是:将向量(1,0,0)和向量(0,1,0)做点积,得到0,然后将0乘以向量(0,1,0),得到的结果是(0,0,0)。
点积
- 点乘的定义是人为制定的,它基于数学和物理学中的需要来定义
- 点积用来测量两个向量的相似性和相对角度关系
- 点积(内积)是两个向量的积,它表示为向量A 和向量B 之间的夹角的余弦值。
- 点积的计算公式为
A·B = |A| * |B| * cos(θ)
, 其中|A|和|B|分别是向量A和向量B的模长,θ是两个向量之间的夹角。 - 通过点积的值可以判断两个向量是否垂直,在一定程度上点积可以表示向量之间的相似性
- 几何意义:点乘反映了一个向量在另一个向量方向上的投影长度与该方向向量长度的乘积。
- 𝑎⋅𝑏什么时候可以代表投影长度?
- 当 𝑏 是单位向量时,即 ∣𝑏∣=1,点积简化为:
- 𝑎⋅𝑏=∣a∣cos(θ)
- 即 𝑎 在 𝑏 方向上的投影长度
- 当 𝑏 是单位向量时,即 ∣𝑏∣=1,点积简化为:
- 记住: 向量 𝑣 自身的点积𝑣 ·𝑣 ,等于 ∣𝑣∣平方,即 𝑣 的长度的平方
叉积
- 叉积用来计算两个向量间垂直的向量并且用来计算面积,旋转
- 叉积(外积)是两个向量的积,表示为一个新向量。
- 叉积是一个向量,它的方向是两个向量所在平面的法向量,大小是两个向量所在平面面积的两倍。叉积的计算公式为 A X B = |A| * |B| * Sin(θ) * n(单位法向量),
- 叉积的结果是一个垂直于两个向量的向量。
- 叉积的应用非常广泛,在很多场景下都有用处。例如在几何学中, 叉积用于求两个向量所在平面的法向量;
矩阵
js
T如何移动一个点,举例矩阵相乘的详细步骤
假设有一个点P(x, y, z),现在想要将该点沿着X轴平移2个单位,沿着Y轴平移3个单位,沿着Z轴平移4个单位。可以使用变换矩阵来实现这个操作。变换矩阵可以表示为:
T = [1 0 0 2]
[0 1 0 3]
[0 0 1 4]
[0 0 0 1]
其中,第一列表示X轴的变换,第二列表示Y轴的变换,第三列表示Z轴的变换,最后一列表示平移向量。
现在,需要将点P应用该变换矩阵,以实现平移操作。可以按照以下步骤进行矩阵相乘:
1. 将点P表示为一个4维向量,即增加一个齐次坐标分量w=1:
P' = [x]
[y]
[z]
[1]
2. 将变换矩阵T表示为一个4x4的矩阵:
T = [1 0 0 2]
[0 1 0 3]
[0 0 1 4]
[0 0 0 1]
3. 将点P'和变换矩阵T相乘,得到一个新的4维向量P'':
P'' = T * P' = [1 0 0 2] [x]
[0 1 0 3] * [y]
[0 0 1 4] [z]
[0 0 0 1] [1]
4. 对于新的4维向量P'',将其前三个分量(x, y, z)除以最后一个分量(w=1),即可得到平移后的新点坐标:
x' = P''[0] / P''[3] = x + 2
y' = P''[1] / P''[3] = y + 3
z' = P''[2] / P''[3] = z + 4
综上,通过矩阵相乘的方式,可以将点P沿着X轴平移2个单位,沿着Y轴平移3个单位,沿着Z轴平移4个单位。
这种方法非常高效,可以同时对多个点进行平移操作,而且可以方便地组合不同的变换操作。