//叉积和点积公式:
向量:u=(u1,u2,u3) v=(v1,v2,v3)
叉乘公式:u x v = { u2v3-v2u3 , u3v1-v3u1 , u1v2-u2v1 }
点乘公式:u * v = u1v1+u2v2+u3v3
//向量标准化
function normalize() {
let magSq = x * x + y * y + z * z
if (magSq > 0) {
let oneOverMag = 1 / Math.sqrt(magSq)
x *= oneOverMag
y *= oneOverMag
z *= oneOverMag
}
}
点乘几何意义:是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影。
//点乘
function dot(vec3) {
return this.x * vec3.x + this.y * vec3.y + this.z * vec3.z
}
叉乘几何意义:通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。二维空间中,aXb等于由向量a和向量b构成的平行四边形的面积。
//叉乘
function crossProduct(vec3) {
return Vector3(this.y * vec3.z - this.z * vec3.y, this.z * vec3.x - this.x * vec3.z,
this.x * vec3.y - this.y * vec3.x)
}
//向量模
function vectorMag() {
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
}
//两点间距离
function distance(vec3_a, vec3_b) {
let x = vec3_a.x - vec3_b.x,
y = vec3_a.y - vec3_b.y,
z = vec3_a.z - vec3_b.z
return Math.sqrt(x * x + y * y + z * z)
}