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++; } }
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); } }); }
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); }
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))); } } }