export class Random {
    /**
     * 创建一个随机数生成器
     */
    public constructor(seed: number) {
        this.seed = seed;
        if (!this.seed && this.seed != 0) {
            this.seed = new Date().getTime();
        }
    }
    /**
     * 设置用于随机数生成器的种子,如果不设置则实际是取当前时间毫秒数
     */
    public seed: number;
    /**
     * 返回一个随机数,在0.0~1.0之间
     */
    public get value(): number {
        return this.range(0, 1);
    }
    /**
     * 返回半径为1的圆内的一个随机点
     */
    public get insideUnitCircle(){
        var randomAngle: number = this.range(0, 360);
        var randomDis: number = this.range(0, 1);
        var randomX: number = randomDis * Math.cos(randomAngle * Math.PI / 180);
        var randomY: number = randomDis * Math.sin(randomAngle * Math.PI / 180);
        return [randomX, randomY];
    }
    /**
     * 返回半径为1的圆边的一个随机点
     */
    public get onUnitCircle()  {
        var randomAngle: number = this.range(0, 360);
        var randomX: number = Math.cos(randomAngle * Math.PI / 180);
        var randomY: number = Math.sin(randomAngle * Math.PI / 180);
        return [randomX, randomY];
    }
    /**
     * 返回一个在min和max之间的随机浮点数
     */
    public range(min: number, max: number): number {
        if (!this.seed && this.seed != 0) {
            this.seed = new Date().getTime();
        }
        max = max || 1;
        min = min || 0;
        this.seed = (this.seed * 9301 + 49297) % 233280;
        var rnd = this.seed / 233280.0;
        return min + rnd * (max - min);
    }
    /**
     * 设置用于随机数生成器的种子,如果不设置则实际是取当前时间毫秒数
     */
    public static seed: number;
    /**
     * 返回一个随机数,在0.0~1.0之间
     */
    public static get value(): number {
        return this.range(0, 1);
    }
    /**
     * 返回半径为1的圆内的一个随机点
     */
    public static get insideUnitCircle() {
        var randomAngle: number = this.range(0, 360);
        var randomDis: number = this.range(0, 1);
        var randomX: number = randomDis * Math.cos(randomAngle * Math.PI / 180);
        var randomY: number = randomDis * Math.sin(randomAngle * Math.PI / 180);
        return [randomX, randomY];
    }
    /**
     * 返回半径为1的圆边的一个随机点
     */
    public static get onUnitCircle() {
        var randomAngle: number = this.range(0, 360);
        var randomX: number = Math.cos(randomAngle * Math.PI / 180);
        var randomY: number = Math.sin(randomAngle * Math.PI / 180);
        return [randomX, randomY];
    }
    /**
     * 返回一个在min和max之间的随机浮点数
     */
    public static range(min: number, max: number): number {
        if (!this.seed && this.seed != 0) {
            this.seed = new Date().getTime();
        }
        max = max || 1;
        min = min || 0;
        this.seed = (this.seed * 9301 + 49297) % 233280;
        var rnd = this.seed / 233280.0;
        return min + rnd * (max - min);
    }
}

更多推荐

TS均匀获取随机数