一线大厂高级前端编写,前端初中阶面试题,帮助初学者应聘,需要联系微信:javadudu

详解向量的点积(dot product)

两个向量之间的点积(dot product),也称数量积和内积。向量

a\vec{a}

和向量

b\vec{b}

的点积表示为

ab\vec{a} \cdot \vec{b}

点积的结果都是一个标量,表示两个向量的相似程度。

点积的计算方法

点积有两种常见的计算方法,一种是使用向量的坐标分量进行计算,另一种是使用向量的长度和夹角进行计算。

坐标分量计算方法

点积的坐标分量计算方法是:将两个向量对应分量相乘,然后相加。对于两个三维向量

a\vec{a}

b\vec{b}

ab=AxBx+AyBy+AzBz\vec{a} \cdot \vec{b} = A_x \cdot B_x + A_y \cdot B_y + A_z \cdot B_z

其中,

AxA_x

AyA_y

AzA_z

是向量

a\vec{a}

的分量,

BxB_x

ByB_y

BzB_z

是向量

b\vec{b}

的分量。

这种计算方法涉及到向量的坐标分量,适用于已知向量坐标分量的情况,可以直接按照公式进行计算。这是一种较为数学化的描述,它在考虑向量在各个坐标轴上的投影分量,并将它们相乘再相加,得到最终的结果。

几何意义

投影的概念是将一个向量投影到另一个向量上,得到在另一个向量方向上的投影分量。

向量的定义:即向量在某个方向上的投影分量等于该向量在该方向上的长度乘以该方向的单位向量。

在这里,我们考虑

a\vec{a}

在 X 轴上的投影。在 X 轴上,单位向量为

i=(1,0,0)\vec{i}=(1,0,0)

。因此,

a\vec{a}

在 X 轴上的投影分量可以表示为内积(点积):

在 X 轴上的投影分量=ai=Ax1+Ay0+Az0=Ax\begin{aligned}
在 X 轴上的投影分量 &= \vec{a} \cdot \vec{i} \\
&= A_x \cdot 1 + A_y \cdot 0 + A_z \cdot 0 \\
&= A_x
\end{aligned}

这个概念可以推广到 Y 轴和 Z 轴上的投影分量,其中单位向量分别为

j=(0,1,0)\vec{j}=(0,1,0)

k=(0,0,1)\vec{k}=(0,0,1)

在 Y 轴上的投影分量=aj=Ax0+Ay1+Az0=Ay\begin{aligned}
在 Y 轴上的投影分量 &= \vec{a} \cdot \vec{j} \\
&= A_x \cdot 0 + A_y \cdot 1 + A_z \cdot 0 \\
&= A_y \\
\end{aligned}

在 Z 轴上的投影分量=ak=Ax0+Ay0+Az1=Az\begin{aligned}
在 Z 轴上的投影分量 &= \vec{a} \cdot \vec{k} \\
&= A_x \cdot 0 + A_y \cdot 0 + A_z \cdot 1 \\
&= A_z
\end{aligned}

同理,向量

a\vec{a}

在向量

b\vec{b}

上的投影分量为

在 X 轴上的投影分量=aib=a(Bx,0,0)=AxBx+Ay0+Az0=AxBx\begin{aligned}
在 X 轴上的投影分量 &= \vec{a} \cdot \vec{i_b} \\
&= \vec{a} \cdot (B_x, 0, 0) \\
&= A_x \cdot B_x + A_y \cdot 0 + A_z \cdot 0 \\
&= A_x \cdot B_x \\
\end{aligned}

在 Y 轴上的投影分量=ajb=a(0,By,0)=Ax0+AyBy+Az0=AyBy\begin{aligned}
在 Y 轴上的投影分量 &= \vec{a} \cdot \vec{j_b} \\
&= \vec{a} \cdot (0, B_y, 0) \\
&= A_x \cdot 0 + A_y \cdot B_y + A_z \cdot 0 \\
&= A_y \cdot B_y \\
\end{aligned}

在 Z 轴上的投影分量=akb=a(0,0,Bz)=Ax0+Ay0+AzBz=AzBz\begin{aligned}
在 Z 轴上的投影分量 &= \vec{a} \cdot \vec{k_b} \\
&= \vec{a} \cdot (0, 0, B_z) \\
&= A_x \cdot 0 + A_y \cdot 0 + A_z \cdot B_z \\
&= A_z \cdot B_z
\end{aligned}

所以,

a\vec{a}

在向量

b\vec{b}

方向上的投影分量为:

  1. 在 X 轴上的投影分量: 向量
    a\vec{a}

    在 X 轴上在向量

    b\vec{b}

    方向上的投影分量为

    AxBxA_x \cdot B_x

    。这是通过将向量

    a\vec{a}

    在 X 轴上的长度乘以向量

    b\vec{b}

    在 X 轴上的长度得到的。

  2. 在 Y 轴上的投影分量: 向量
    a\vec{a}

    在 Y 轴上在向量

    b\vec{b}

    方向上的投影分量为

    AyByA_y \cdot B_y

    。这是通过将向量

    a\vec{a}

    在 Y 轴上的长度乘以向量

    b\vec{b}

    在 Y 轴上的长度得到的。

  3. 在 Z 轴上的投影分量: 向量
    a\vec{a}

    在 Z 轴上在向量

    b\vec{b}

    方向上的投影分量为

    AzBzA_z \cdot B_z

    。这是通过将向量

    a\vec{a}

    在 Z 轴上的长度乘以向量

    b\vec{b}

    在 Z 轴上的长度得到的。

最后,将这些投影分量相加,得到的结果就是两个向量在各个坐标轴上的投影分量的总和,即点积的值。它描述了两个向量之间的相似程度。

长度和夹角计算方法

点积还可以通过向量的长度和夹角来计算,计算公式为:

ab=abcos(θ)\vec{a} \cdot \vec{b}= |\vec{a}| \cdot |\vec{b}| \cdot cos(\theta)

其中:

a|\vec{a}|

b|\vec{b}|

分别是向量

a\vec{a}

b\vec{b}

的长度,

θ\theta

是向量

a\vec{a}

和向量

b\vec{b}

之间的夹角。

这种计算方法适用于已知向量的长度和夹角的情况,可以使用向量的长度和夹角的三角函数(余弦)关系来计算点积。

几何意义

a\vec a

终点为

A(x1,y1,z1)A(x_1,y_1,z_1)

b\vec b

的终点为

B(x2,y2,z2)B(x_2,y_2,z_2)

,原点为

OO

,则

AB=(x2x1,y2y1,z2z1)\vec {AB}=(x_2-x_1,y_2-y_1,z_2-z_1)

OAB\triangle{OAB}

中,由余弦定理得:

AB2=a2+b22abcosθ\left |\vec {AB}\right |^2=\left |\vec a \right |^2+\left |\vec b \right |^2-2\left |\vec a \right |\left |\vec b \right |\cos\theta

使用距离公式进行处理,可得:

abcosθ=x12+y12+z12+x22+y22+z22[(x2x1)2+(y2y1)2+(z2z1)2]2\left |\vec a \right |\left |\vec b \right |\cos\theta=\frac {x_1^2+y_1^2+z_1^2+x_2^2+y_2^2+z_2^2-[(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2]}{2}

去括号后合并,可得:

abcosθ=x1x2+y1y2+z1z2=ab\left |\vec a \right |\left |\vec b \right |\cos\theta=x_1x_2+y_1y_2+z_1z_2=\vec a\cdot \vec b

根据上面的公式可计算

a\vec a

b\vec b

之间的夹角:

θ=arccos(abab)\theta=\arccos (\frac {\vec a\cdot\vec b} {\left |\vec a \right |\left |\vec b \right |})

无论使用哪种方法,点积的结果都是一个标量,表示两个向量的相似程度。

证明一致性

现在我们来证明这两种计算方法的一致性,即证明上述两个表达式是等价的。我们可以使用向量的定义以及三角函数的关系:

首先,两个向量的夹角余弦值可以表示为:

cos(θ)=ABAB cos(\theta) = \frac{A \cdot B }{|A| \cdot |B|}

将坐标分量计算的点积公式代入,得到:

cos(θ)=AxBx+AyBy+AzBzAx2+Ay2+Az2Bx2+By2+Bz2cos(θ) = \frac{A_x \cdot B_x + A_y \cdot B_y + A_z \cdot B_z}{\sqrt{{A_x}^2 + {A_y}^2+ {A_z}^2} \cdot \sqrt{{B_x}^2 + {B_y}^2 + {B_z}^2}}

通过化简,可以证明上述等式成立。这就证明了两种计算方法得到的点积是一致的。

总体来说,两种计算方法从不同的角度描述了向量之间的关系,但它们最终得到的结果是相同的,这是因为它们实际上描述的是同一个几何关系。

点积的意义

点积的几何意义:

  1. 夹角和正交性:点积的值可以用来判断两个向量的相似性,例如:

    • 如果两个向量的点积为零,意味着它们是正交的(垂直),因为它们之间的夹角为90度。
    • 如果点积为正,表示两个向量之间的夹角小于90度,它们趋向于同一方向。
    • 如果点积为负,表示两个向量之间的夹角大于90度,它们趋向于相反的方向。
  2. 投影:点积可以用来计算一个向量在另一个向量方向上的投影。具体而言,两个向量

    a\vec{a}

    b\vec{b}

    的点积除以向量

    b\vec{b}

    的长度,得到的结果就是

    a\vec{a}

    b\vec{b}

    方向上的投影的长度。

  3. 向量长度和夹角关系:点积的公式中包含向量的长度,因此可以用点积来推导夹角的余弦值。

Three.js 中的点积

在Three.js中,Vector3dot方法计算的是两个向量之间的点积(dot product),示例代码如下:

var vectorA = new THREE.Vector3(2, 3, 4);
var vectorB = new THREE.Vector3(1, 0, -1);

var dotProduct = vectorA.dot(vectorB);
// 输出点积的结果
console.log("Dot Product:", dotProduct);

参考

原文链接:https://juejin.cn/post/7328003589296750604 作者:fuyoufang

(0)
上一篇 2024年1月26日 下午4:10
下一篇 2024年1月26日 下午4:21

相关推荐

发表评论

登录后才能评论