Select Git revision
-
Christoph-Anton Schwierz authoredChristoph-Anton Schwierz authored
utils.ts 5.27 KiB
export function vecAdd(vecOne: Array<number>, vecTwo: Array<number>){
let vecSum: Array<number> = vecOne;
vecSum[0] += vecTwo[0];
vecSum[1] += vecTwo[1];
vecSum[2] += vecTwo[2];
return vecSum;
}
export function vecSubtract(vecOne: Array<number>, vecTwo: Array<number>){
let vecSubt: Array<number> = vecOne;
vecSubt[0] -= vecTwo[0];
vecSubt[1] -= vecTwo[1];
vecSubt[2] -= vecTwo[2];
return vecSubt;
}
export function vecMultiply(vecOne: Array<number>, factor: number){
vecOne[0] *= factor;
vecOne[1] *= factor;
vecOne[2] *= factor;
return vecOne;
}
export function vecLength(vec: Array<number>){
let length: number;
length = Math.sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
return length;
}
export function vecNormalize(vec: Array<number>){
let computedLength = vecLength(vec);
if(computedLength == 0){computedLength = 1};
let inverse = 1 / computedLength;
let normalized: Array<number> = new Array;
normalized[0] = vec[0] * inverse;
normalized[1] = vec[1] * inverse;
normalized[2] = vec[2] * inverse;
return normalized;
}
export function vecDotProduct(vecOne: Array<number>, vecTwo: Array<number>){
let dotProduct = vecOne[0]*vecTwo[0] + vecOne[1]*vecTwo[1] + vecOne[2]*vecTwo[2];
return dotProduct;
}
export function vecAngle(vecOne: Array<number>, vecTwo: Array<number>){
//calculate radiant
let radiant = Math.acos(vecDotProduct(vecOne, vecTwo) / (vecLength(vecOne) * vecLength(vecTwo)))
//convert into degrees
let degrees = radiant * 180 / Math.PI;
return degrees;
}
export function vecCrossProduct(vecOne: Array<number>, vecTwo: Array<number>){
let crossProduct : Array<number> = new Array;
crossProduct[0] = vecOne[1]*vecTwo[2] - vecOne[2]*vecTwo[1];
crossProduct[1] = vecOne[2]*vecTwo[0] - vecOne[0]*vecTwo[2];