예제 #1
0
파일: RandomCube.cs 프로젝트: biagio90/Lab2
        public static Vector3 Volume(ref NPack.MersenneTwister _rand, UnityRandom.Normalization n, float t)
        {
            float x, y, z;

            x = y = z = 0;
            switch (n)
            {
            case UnityRandom.Normalization.STDNORMAL:
                x = (float)NormalDistribution.Normalize(_rand.NextSingle(true), t);
                y = (float)NormalDistribution.Normalize(_rand.NextSingle(true), t);
                z = (float)NormalDistribution.Normalize(_rand.NextSingle(true), t);
                break;

            case UnityRandom.Normalization.POWERLAW:
                x = (float)PowerLaw.Normalize(_rand.NextSingle(true), t, 0, 1);
                y = (float)PowerLaw.Normalize(_rand.NextSingle(true), t, 0, 1);
                z = (float)PowerLaw.Normalize(_rand.NextSingle(true), t, 0, 1);
                break;

            default:
                x = _rand.NextSingle(true);
                y = _rand.NextSingle(true);
                z = _rand.NextSingle(true);
                break;
            }
            // Move to -1, 1 space as for CIRCLE and SPHERE
            return(new Vector3((2 * x) - 1, (2 * y) - 1, (2 * z) - 1));
        }
예제 #2
0
파일: RandomCube.cs 프로젝트: biagio90/Lab2
        public static Vector3 Surface(ref NPack.MersenneTwister _rand, UnityRandom.Normalization n, float t)
        {
            Vector3 pos = new Vector3();

            switch (n)
            {
            case UnityRandom.Normalization.STDNORMAL:
                pos = GetPointOnCubeSurface(
                    (float)NormalDistribution.Normalize(_rand.NextSingle(true), t),
                    (float)NormalDistribution.Normalize(_rand.NextSingle(true), t),
                    _rand.Next(5));
                break;

            case UnityRandom.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(5));
                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));
        }
예제 #3
0
        public static Vector2 Circle(ref NPack.MersenneTwister _rand, UnityRandom.Normalization n, float t)
        {
            float r;

            switch (n)
            {
            case UnityRandom.Normalization.STDNORMAL:
                r = SpecialFunctions.ScaleFloatToRange((float)NormalDistribution.Normalize(_rand.NextSingle(true), t), 0, Int32.MaxValue, 0, 1);
                break;

            case UnityRandom.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    = SpecialFunctions.ScaleFloatToRange(r, 0, _2pi, 0, Int32.MaxValue);

            return(new Vector2((float)Math.Cos(a), (float)Math.Sin(a)));
        }
예제 #4
0
        public static Vector2 Disk(ref NPack.MersenneTwister _rand, UnityRandom.Normalization n, float temp)
        {
            double t, theta;

            switch (n)
            {
            case UnityRandom.Normalization.STDNORMAL:
                t     = NormalDistribution.Normalize(_rand.NextSingle(true), temp);
                theta = NormalDistribution.Normalize(_rand.NextSingle(true), temp) * 2 * Math.PI;
                break;

            case UnityRandom.Normalization.POWERLAW:
                t     = PowerLaw.Normalize(_rand.NextSingle(true), temp, 0, 1);
                theta = PowerLaw.Normalize(_rand.NextSingle(true), temp, 0, 1) * 2 * Math.PI;
                break;

            default:
                t     = (float)_rand.NextSingle(true);
                theta = _rand.NextSingle(false) * 2 * Math.PI;
                break;
            }

            return(new Vector2((float)(Math.Sqrt(t) * Math.Cos(theta)), (float)(Math.Sqrt(t) * Math.Sin(theta))));
        }