Select Git revision
CatiaNetTest.vbproj.GenerateResource.Cache
utils.ts 3.32 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];
crossProduct[2] = vecOne[0]*vecTwo[1] - vecOne[1]*vecTwo[0];
return crossProduct;
}
export function matrixProduct(a: Array<number>, b: Array<number>){
// for 3x3 matrix only
//[
// 0 1 2
// 3 4 5
// 6 7 8
// ]
return [
//row 1
a[0]*b[0] + a[1]*b[3] + a[2]*b[6], a[0]*b[1] + a[1]*b[4] + a[2]*b[7], a[0]*b[2] + a[1]*b[5] + a[2]*b[8],
//row 2
a[3]*b[0] + a[4]*b[3] + a[5]*b[6], a[3]*b[1] + a[4]*b[4] + a[5]*b[7], a[3]*b[2] + a[4]*b[5] + a[5]*b[8],
//row 3
a[6]*b[0] + a[7]*b[3] + a[8]*b[6], a[6]*b[1] + a[7]*b[4] + a[8]*b[7], a[6]*b[2] + a[7]*b[5] + a[8]*b[8]
]
}
export function multVecMatrix(v: Array<number>, m: Array<number>){
return [
v[0]*m[0] + v[1]*m[3] + v[2]*m[6], v[0]*m[1] + v[1]*m[4] + v[2]*m[7], v[0]*m[2] + v[1]*m[5] + v[2]*m[8]
]
}
export function rotX(degrees: number){
const radian = degrees * Math.PI / 180
return [
1, 0, 0,
0, Math.cos(radian), Math.sin(radian),
0, -1*Math.sin(radian), Math.cos(radian)
]
}
export function rotY(degrees: number){
const radian = degrees * Math.PI / 180
return [
Math.cos(radian), 0, -1*Math.sin(radian),
0, 1, 0,
Math.sin(radian), 0, Math.cos(radian)
]
}
export function rotZ(degrees: number){
const radian = degrees * Math.PI / 180
return [
Math.cos(radian), Math.sin(radian), 0,
-1*Math.sin(radian), Math.cos(radian), 0,
0, 0, 1
]
}
//