public void TestTrigonometricRelations()
        {
            var randomSimplices = Simplex3D.RandomSamples(NUMBER_SAMPLES);

            foreach (var randomSimplex in randomSimplices)
            {
                randomSimplex.Compute(MESH_STEPS, false);
                var trianlges = randomSimplex.Triangles;

                foreach (var triangle in trianlges)
                {
                    var trigonometricRelations = Relations();

                    foreach (var trigonometricRelation in trigonometricRelations)
                    {
                        var deviation = Math.Abs(trigonometricRelation(triangle) - .0);

                        if (deviation >= TOLERANCE)
                        {
                            throw new Exception($"Deviation to high!");
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private static void Execute(Options options)
        {
            var path = "C:\\Users\\bergerd\\simplices.csv";

            var samples = ShearTriangle2D.RandomSamples(50000);

            //foreach(var sample in samples)
            //    VariousHelpers.SampleToFile(path, sample);


            Console.WriteLine(MessageAtStart(options));

            var randomSimplices = Simplex3D.RandomSamples(options.NumberSamples);
            var counter         = 0;
            var progressBar     = new ProgressBar();
            var nbThreads       = 7;
            var vols            = new double[nbThreads];

            if (File.Exists(path))
            {
                File.Delete(path);
            }

            var partition = VariousHelpers.GetPartition(options.NumberSamples, nbThreads);

            Parallel.For(0, nbThreads, ell =>
            {
                for (int i = partition[ell][0]; i < partition[ell][1]; i++)
                {
                    var stopWatch = new Stopwatch();
                    stopWatch.Start();
                    randomSimplices[i].Compute(3000);
                    stopWatch.Stop();
                    counter += 1;
                    Debug.WriteLine($"Successfully generated {counter} random samples.");

                    lock (_simplexLock)
                    {
                        progressBar.Report(counter, options.NumberSamples, stopWatch.Elapsed.TotalSeconds);
                        VariousHelpers.SampleToFile(path, randomSimplices[i]);
                    }
                }
            });


            /*
             * var sampleFactory = new SampleFactory(options.NumberSamples, options.Dimension, options.Integrate,
             *  options.MeshSteps, options.MaxNorm, options.ZeroAmongEdges, options.ComputeAngles, options.ComputeAnalytical);
             *
             * var progressBar = new ProgressBar();
             * sampleFactory.RaiseSampleCreatorEvent += progressBar.HandleSampleCreationEvent;
             *
             * Console.WriteLine(_computing);
             * (var randomSimplices, var hyperRandomComplexes) = sampleFactory.RandomSamples();
             */
        }
        public ShearTriangle2D(double[] _B, double[] _C)
        {
            m_B = _B;
            m_C = _C;

            Alpha   = Simplex3D.Angle(m_A, m_B, m_C);
            Beta    = Simplex3D.Angle(m_B, m_A.Subtract(m_B), m_C.Subtract(m_B));
            Gamma   = Simplex3D.Angle(m_C, m_A.Subtract(m_C), m_B.Subtract(m_C));
            A       = Length(m_B, m_C);
            B       = Length(m_A, m_C);
            C       = Length(m_A, m_B);
            Surface = Math.PI - Alpha - Beta - Gamma;
        }
        public void TestAngleBetweenFacesII()
        {
            var randomSimplices = Simplex3D.RandomSamples(NUMBER_SAMPLES);

            foreach (var randomSimplex in randomSimplices)
            {
                var normalABCD = randomSimplex.Angle("A", "B", "C", "D");
                var normalBACD = randomSimplex.Angle("B", "A", "C", "D");
                var normalABDC = randomSimplex.Angle("A", "B", "D", "C");
                var normalBADC = randomSimplex.Angle("B", "A", "D", "C");

                if (Math.Abs(normalABCD - normalBACD) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }

                if (Math.Abs(normalABCD - normalABDC) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }

                if (Math.Abs(normalABCD - normalBADC) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }

                if (Math.Abs(normalBACD - normalABDC) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }

                if (Math.Abs(normalBACD - normalBADC) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }

                if (Math.Abs(normalABDC - normalBADC) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }
            }
        }
Ejemplo n.º 5
0
        public static void SampleToFile(string path, Simplex3D sample)
        {
            var engine  = new FileHelperEngine(typeof(Simplex3D));
            var samples = new List <Simplex3D>()
            {
                sample
            };

            if (File.Exists(path))
            {
                engine.AppendToFile(path, sample);
            }
            else
            {
                engine.HeaderText = engine.GetFileHeader();
                engine.WriteFile(path, new List <Simplex3D>()
                {
                    sample
                });
            }
        }
        public void TestAngleBetweenFacesI()
        {
            var randomSimplices = Simplex3D.RandomSamples(NUMBER_SAMPLES);

            foreach (var randomSimplex in randomSimplices)
            {
                var normalABC = randomSimplex.NormalOnFace("A", "B", "C");
                var normalABD = randomSimplex.NormalOnFace("A", "D", "B");
                var A         = randomSimplex.GetPoint("A");
                var angleA    = Math.PI - Simplex3D.Angle(A, normalABC, normalABD);

                var normalBCA = randomSimplex.NormalOnFace("B", "C", "A");
                var normalBAD = randomSimplex.NormalOnFace("B", "A", "D");
                var B         = randomSimplex.GetPoint("B");
                var angleB    = Math.PI - Simplex3D.Angle(B, normalBCA, normalBAD);

                if (Math.Abs(angleA - angleB) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high!");
                }
            }
        }
        public void TestStandardSimplex()
        {
            var standardSimplex = Simplex3D.GetStandardSimplex();

            standardSimplex.Compute(MESH_STEPS, false);

            var trianlges = standardSimplex.Triangles;

            foreach (var triangle in trianlges)
            {
                var trigonometricRelations = Relations();

                foreach (var trigonometricRelation in trigonometricRelations)
                {
                    var deviation = Math.Abs(trigonometricRelation(triangle) - .0);

                    if (deviation >= TOLERANCE)
                    {
                        throw new Exception($"Deviation to high!");
                    }
                }
            }
        }
 public List <Simplex3D> FastRandomSamples3D()
 {
     return(Simplex3D.RandomSamples(NbSamples, MaxNorm));
 }
Ejemplo n.º 9
0
    // Update is called once per frame
    void Update()
    {
        double noise = Simplex3D.calcNoise((transform.position.x + Time.time / vel) / scale, (transform.position.y + Time.time / vel) / scale, (transform.position.z + Time.time / vel) / scale);

        transform.localScale = new Vector3((float)(1 + noise / amplitude), (float)(1 + noise / amplitude), (float)(1 + noise / amplitude));
    }