doorxp

Blog

typescript Array 增加方法.

interface Array<T> {

    x: number;

    y: number;


    sqrlen(): number;

    len(): number;


    normalize(): number[];

    scale(s: number): number[];


    add(b: number[]): number[];

    sub(b: number[]): number[];


    mul(b: number[]): number[];

    div(b: number[]): number[];



    dot(b: number[]): number;

    cross(b: number[]): number;

}


Object.defineProperties(Array.prototype, {

    'x':

    {

        get: function () { return this[0] },

        set: function (v: number) { this[0] = v }

    },

    'y': {

        get: function () { return this[1] },

        set: function (v: number) { this[1] = v }

    },

    'sqrlen': {

        value: function () {

            let [x, y] = this;

            return x * x + y * y;

        }

    },

    'len': {

        value: function () {

            return Math.sqrt(this.sqrlen());

        }

    },

    'scale': {

        value: function (s: number) {

            return [this.x * s, this.y * s];

        }

    },

    'normalize': {

        value: function () {

            return this.scale(1 / this.len());

        }

    },

    'add': {

        value: function (b: number[]) {

            return [this.x + b.x, this.y + b.y];

        }

    },

    'sub': {

        value: function (b: number[]) {

            return [this.x - b.x, this.y - b.y];

        }

    },

    'mul': {

        value: function (b: number[]) {

            return [this.x * b.x - this.y * b.y, this.x * b.y + b.x * this.y];

        }

    },

    'div': {

        value: function (b: number[]) {

            let l = b.sqrlen();

            return [this.dot(b) / l, b.cross(this) / l];

        }

    },

    'dot': {

        value: function (b: number[]) {

            return this.x * b.x + this.y * b.y;

        }

    },

    'cross': {

        value: function (b: number[]) {

            return this.x * b.y - this.y * b.x;

        }

    }


});


let a: number[] = [10, 20];

let c = a.add([20, 20]);

console.log(a.normalize(), a.x, a.y);


发表评论:

«   2023年1月   »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言

    Powered By Z-BlogPHP 1.5.1 Zero

    Copyright doorxp.com Rights Reserved.