Skip to content
Snippets Groups Projects
Select Git revision
  • 188ad6825e1c7f1c05870633ff7136994d4af1ac
  • v2.0 default protected
  • main protected
3 results

thk_ir_controller.h

Blame
  • 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
        ]
    }
    //