Exemplo n.º 1
0
    public DoublyConnectedEdgeList GetVoronoiDiagram()
    {
        //input
        float [,] input = new float[, ] {
            { 20, 80 }, { 40, 60 }, { 20, 30 }, { 70, 70 }, { 60, 50 }
        };

        DoublyConnectedEdgeList dcel = new DoublyConnectedEdgeList(0, 0, 100, 100);


        SiteEvent siteEvent;
        Face      face;

        //20,30
        siteEvent      = new SiteEvent(20, 20);
        face           = new Face(siteEvent);
        siteEvent.face = face;
        dcel.faceList.Add(face);

        face.AddEdge(new Edge(new Vertex(50, 0)));
        face.AddEdge(new Edge(new Vertex(48, 15)));
        face.AddEdge(new Edge(new Vertex(15, 45)));
        face.AddEdge(new Edge(new Vertex(0, 45)));
        face.AddEdge(new Edge(new Vertex(0, 0)));

        //70,30
        siteEvent      = new SiteEvent(70, 30);
        face           = new Face(siteEvent);
        siteEvent.face = face;
        dcel.faceList.Add(face);

        face.AddEdge(new Edge(new Vertex(50, 0)));
        face.AddEdge(new Edge(new Vertex(100, 0)));
        face.AddEdge(new Edge(new Vertex(100, 58)));
        face.AddEdge(new Edge(new Vertex(55, 35)));
        face.AddEdge(new Edge(new Vertex(48, 15)));

        //40,60
        siteEvent      = new SiteEvent(40, 40);
        face           = new Face(siteEvent);
        siteEvent.face = face;
        dcel.faceList.Add(face);

        face.AddEdge(new Edge(new Vertex(48, 15)));
        face.AddEdge(new Edge(new Vertex(55, 35)));
        face.AddEdge(new Edge(new Vertex(43, 65)));
        face.AddEdge(new Edge(new Vertex(15, 45)));

        //60,50
        siteEvent      = new SiteEvent(60, 50);
        face           = new Face(siteEvent);
        siteEvent.face = face;
        dcel.faceList.Add(face);

        face.AddEdge(new Edge(new Vertex(55, 35)));
        face.AddEdge(new Edge(new Vertex(100, 58)));
        face.AddEdge(new Edge(new Vertex(100, 100)));
        face.AddEdge(new Edge(new Vertex(50, 100)));
        face.AddEdge(new Edge(new Vertex(43, 65)));

        //20,70
        siteEvent      = new SiteEvent(20, 70);
        face           = new Face(siteEvent);
        siteEvent.face = face;
        dcel.faceList.Add(face);

        face.AddEdge(new Edge(new Vertex(0, 45)));
        face.AddEdge(new Edge(new Vertex(15, 45)));
        face.AddEdge(new Edge(new Vertex(43, 65)));
        face.AddEdge(new Edge(new Vertex(50, 100)));
        face.AddEdge(new Edge(new Vertex(0, 100)));

        return(dcel);
    }