void Start()
        {
            var bf      = new BistellarFlip3D(numPoint, 1);
            var nodes   = bf.Nodes.ToArray();
            var voronoi = new VoronoiGraph3D(nodes);
            int count   = 0;

            foreach (var n in voronoi.nodes)
            {
                var o = n.Value.Meshilify();
                var c = (float3)n.Value.center;
                if (o.vertices.Any(v =>
                                   v.x + c.x < min ||
                                   v.x + c.x > max ||
                                   v.y + c.y < min ||
                                   v.y + c.y > max ||
                                   v.z + c.z < min ||
                                   v.z + c.z > max))
                {
                    continue;
                }
                var g = new GameObject(count.ToString());
                var f = g.AddComponent <MeshFilter>();
                var r = g.AddComponent <MeshRenderer>();
                var m = new Material(mat);
                r.sharedMaterial     = m;
                f.mesh               = o;
                g.transform.position = c;
                count++;
            }
        }
Ejemplo n.º 2
0
        public void MustHave4NeighborExceptMostOuter([ValueSource(nameof(nums))] int num)
        {
            var bf = new BistellarFlip3D(num, 1);
            var rt = new DN(new d3(0, 0, 0), new d3(3, 0, 0), new d3(0, 3, 0), new d3(0, 0, 3));

            bf.Nodes.ForEach(n => {
                var t = n.tetrahedra;
                var c = 0;

                Assert.IsTrue(rt.Contains(t.a, true) && rt.Contains(t.b, true) &&
                              rt.Contains(t.c, true) && rt.Contains(t.d, true));
                if (rt.Contains(t.a, false))
                {
                    c++;
                }
                if (rt.Contains(t.b, false))
                {
                    c++;
                }
                if (rt.Contains(t.c, false))
                {
                    c++;
                }
                if (rt.Contains(t.d, false))
                {
                    c++;
                }
                if (c >= 2)
                {
                    Assert.IsTrue(n.neighbor.Count == 4);
                }
            });
        }
Ejemplo n.º 3
0
        public void Performance([Values(100)] int num)
        {
            // takes 15.3 sec before refactor for 100 nums
            var sw = Stopwatch.StartNew();
            var bf = new BistellarFlip3D(num, 1);

            sw.Stop();
            UnityEngine.Debug.Log(sw.Elapsed);
        }
Ejemplo n.º 4
0
        public void DelaunayTrianglesTest([ValueSource(nameof(nums))] int num)
        {
            var bf = new BistellarFlip3D(num, 1);

            foreach (var n in bf.Nodes)
            {
                var t        = n.tetrahedra;
                var c        = n.tetrahedra.GetCircumscribedSphere();
                var abc      = new TR(t.a, t.b, t.c);
                var bcd      = new TR(t.b, t.c, t.d);
                var cda      = new TR(t.c, t.d, t.a);
                var dab      = new TR(t.d, t.a, t.b);
                var pair_abc = n.neighbor.Find(_n => _n.HasFacet(abc));
                var pair_bcd = n.neighbor.Find(_n => _n.HasFacet(bcd));
                var pair_cda = n.neighbor.Find(_n => _n.HasFacet(cda));
                var pair_dab = n.neighbor.Find(_n => _n.HasFacet(dab));
                var d1       = n.neighbor.Count(_n => _n.HasFacet(abc));
                var d2       = n.neighbor.Count(_n => _n.HasFacet(bcd));
                var d3       = n.neighbor.Count(_n => _n.HasFacet(cda));
                var d4       = n.neighbor.Count(_n => _n.HasFacet(dab));
                Assert.IsTrue(d1 < 2 && d2 < 2 && d3 < 2 && d4 < 2);
                Assert.IsTrue(n.neighbor.Count >= 3);
                if (pair_abc != null)
                {
                    Assert.IsFalse(c.Contains(pair_abc.tetrahedra.RemainingPoint(abc)));
                }
                if (pair_bcd != null)
                {
                    Assert.IsFalse(c.Contains(pair_bcd.tetrahedra.RemainingPoint(bcd)));
                }
                if (pair_cda != null)
                {
                    Assert.IsFalse(c.Contains(pair_cda.tetrahedra.RemainingPoint(cda)));
                }
                if (pair_dab != null)
                {
                    Assert.IsFalse(c.Contains(pair_dab.tetrahedra.RemainingPoint(dab)));
                }
            }
        }