// CIRCLE with R=1
 public static Vector2 Circle( ref UMT.MersenneTwister _rand )
 {
     float t = (float) _rand.Next();
     float _2pi = (float) Math.PI * 2;
     float a = MTRandom.ScaleFloatToRange(t, 0, _2pi, 0, Int32.MaxValue);
     return new Vector2( (float) Math.Cos(a) , (float) Math.Sin(a));
 }
        public static Vector3 Surface(ref UMT.MersenneTwister _rand, MTRandom.Normalization n, float t)
        {
            Vector3 pos = new Vector3();
            switch (n) {
            case MTRandom.Normalization.STDNORMAL:
                pos = GetPointOnCubeSurface(
                    (float) NormalDistribution.Normalize(_rand.NextSingle(true), t),
                    (float) NormalDistribution.Normalize(_rand.NextSingle(true), t),
                    _rand.Next(5));
            break;
            case MTRandom.Normalization.POWERLAW:
                pos = GetPointOnCubeSurface(
                    (float) PowerLaw.Normalize(_rand.NextSingle(true), t, 0, 1),
                    (float) PowerLaw.Normalize(_rand.NextSingle(true), t, 0, 1),
                    _rand.Next(5));
            break;
            default:
                pos = GetPointOnCubeSurface(_rand.NextSingle(true),_rand.NextSingle(true),_rand.Next(6));
            break;
            }

            // Move to -1, 1 space as for CIRCLE and SPHERE
            return new Vector3((2*pos.x)-1, (2*pos.y)-1, (2*pos.z)-1);
        }
 public static Vector2 Circle( ref UMT.MersenneTwister _rand, MTRandom.Normalization n, float t )
 {
     float r;
     switch (n) {
     case MTRandom.Normalization.STDNORMAL:
         r = MTRandom.ScaleFloatToRange( (float) NormalDistribution.Normalize(_rand.NextSingle(true), t), 0, Int32.MaxValue, 0, 1);
     break;
     case MTRandom.Normalization.POWERLAW:
         r = (float) PowerLaw.Normalize(_rand.NextSingle(true), t, 0, Int32.MaxValue);
     break;
     default:
         r = (float) _rand.Next();
     break;
     }
     float _2pi = (float) Math.PI * 2;
     float a = MTRandom.ScaleFloatToRange(r, 0, _2pi, 0, Int32.MaxValue);
     return new Vector2( (float) Math.Cos(a) , (float) Math.Sin(a));
 }
 public static Vector3 Surface(ref UMT.MersenneTwister _rand)
 {
     // Move to -1, 1 space as for CIRCLE and SPHERE
     Vector3 pos = GetPointOnCubeSurface(_rand.NextSingle(true),_rand.NextSingle(true),_rand.Next(6));
     return new Vector3((2*pos.x)-1, (2*pos.y)-1, (2*pos.z)-1);
 }