public void AddPoint(Vector2 point, bool playerOne) { // Add castle Points.Add(new Vector2(point.x, point.y)); var badTriangles = FindBadTriangles(point); var polygon = FindHoleBoundary(badTriangles); this.polygon = polygon; foreach (Triangle triangle in badTriangles) { Delauney.Remove(triangle); } newTriangles = new HashSet <Triangle>(); var vertex = new Vertex(point); Delauney.Add(vertex); foreach (Edge edge in polygon) { var triangle = new Triangle(edge.start, edge.end, vertex); Delauney.Add(triangle); newTriangles.Add(triangle); } AdjustVoronoi(vertex, badTriangles, newTriangles, playerOne); }
public GameState(Vector2 bottomLeft, Vector2 topRight) { this.BottomLeft = bottomLeft; this.TopRight = topRight; // Debug.Log(BottomLeft + " " + topRight); // Initialize Data Structures Delauney = new Triangulation(); Voronoi = new Graph(); // Set up Border triangle float dx = topRight.x - bottomLeft.x; float dy = topRight.y - bottomLeft.y; var bLeft = new Vertex(dx * -30, dy * -30); var bRight = new Vertex(dx * 30, dy * -30); var top = new Vertex(0, dy * 30); bLeft.Boundary = true; bRight.Boundary = true; top.Boundary = true; var triangle = new Triangle(bLeft, top, bRight); Delauney.Add(bLeft, bRight, top); Delauney.Add(triangle); }
public Triangulation Copy() { var tri = new Triangulation(); foreach (Triangle triangle in Triangles) { var p0 = tri.Add(triangle.p0.Copy()); var p1 = tri.Add(triangle.p1.Copy()); var p2 = tri.Add(triangle.p2.Copy()); tri.Add(new Triangle(p0, p1, p2)); } return(tri); }
private void UpdateTriangulation(Measurement3D measurement, List <Tetrahedron> badTetrahedrons, List <Triangle> polygon) { // for each triangle in badTriangles do // remove them from the data structure foreach (Tetrahedron tetrahedron in badTetrahedrons) { // remove triangle from triangulation Triangulation.Remove(tetrahedron); } // for each edge in polygon do // re-triangulate the polygonal hole foreach (Triangle triangle in polygon) { // newTri:= form a triangle from edge to point // add newTri to triangulation if (triangle.InSamePlane(measurement)) { Debug.Log("In same plane"); continue; } Tetrahedron tetrahedron = new Tetrahedron( measurement, triangle.a, triangle.b, triangle.c); Triangulation.Add(tetrahedron); } }
private void Update() { if (mInstance == null) { return; } if (!Triangulation.IsBusy) { if (toAddQueue.Count > 0) { Triangulation.Add(toAddQueue.Dequeue()); } } if (Triangulation.IsUpdated) { Render(); Triangulation.IsUpdated = false; } }