Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
     }
 }
Beispiel #5
0
    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;
        }
    }