/* https://www.mathsisfun.com/algebra/vectors-dot-product.html */
function Vector3(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
Vector3.prototype.magnitude = function() {
return Math.sqrt(this.x*this.x + this.y*this.y + this.z*this.z);
};
Vector3.dotProduct = function(/* Vector3 */a, /* Vector3 */b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
};
Vector3.theta = function(/* Vector3 */a, /* Vector3 */b) {
var ma = a.magnitude(), mb = b.magnitude();
var dotX = Vector3.dotProduct(a, b);
return Math.acos(dotX / (ma * mb))/Math.PI * 180; /* degree */
};
/* https://www.mathsisfun.com/algebra/vectors-cross-product.html */
Vector3.crossProduct = function(/* Vector3 */a, /* Vector3 */ b) {
var cx = a.y * b.z - a.z * b.y,
cy = a.z * b.x - a.x * b.z,
cz = a.x * b.y - a.y * b.x;
return new Vector3(cx, cy, cz);
};
Vector3.prototype.toString = function() {
return "(" + this.x + ", " + this.y + ", " + this.z + ")";
};
var a = new Vector3(2, 3, 4), b = new Vector3(5, 6, 7);
console.log(Vector3.theta(a, b));
console.log(Vector3.crossProduct(a, b).toString());
粘贴到浏览器控制台
38.22886930505464
a · b = |a| × |b| × cos(θ)
a × b = |a| |b| sin(θ) n