Three.js 向量的内积(点积)

内积是向量的乘法,如“OA·OB”。它由以下表达式表示:

OA・OB = |OA||OB|cosθ

例如,如果OA向量的长度为2,则OB向量的长度为1,两个向量之间的角度为60度:

OA・OB = |OA||OB|cosθ = 2 x 1 x 0.5;

从该结果可以看出,加法和减法的情况下,计算结果是一个向量,而内积的计算结果则是一个数值。
要用Three.js计算内积,请使用THREE.Vector2类或THREE.Vector3类提供dot()的方法:

接下来我们重写一下上面的公式:

cos0 = OA・OB / |OA||OB|

单位向量(长度为1的向量)

cos0 = OA・OB / 1 x 1 = OA・OB

换句话说,cosθ等同于单位向量的内积,此属性对于创建3D内容非常有用。
例如,假设您有一个C点和一个OD向量,如下所示。此时,通过使用上述特性,我们可以使用内积来判断哪个点C在OD矢量的前面和后面。

cosθ是正值,可以确定它是位于前面的,如果它是负值,则它位于后面。

实际运用

先看效果:

想实现这个效果,首先我们要随机生成粒子.

有关在球体表面取点的数学公式,请参阅“ 重要三角函数的数学公式和概念摘要”。

接下来我们要围绕Z轴旋转手电筒的mesh:

最后让我们设置粒子的不透明度,计算出手电筒前矢量和粒子位置单位矢量的点积,并将该值用作粒子的不透明度。

正面矢量和位置矢量的方向越接近,粒子的不透明度越1接近。