예제 #1
0
        private void GenerateSpanningTree()
        {
            switch (m_spanningTreeType)
            {
            case SpanningTreeType.Minimum:
                m_spanningTree = new MinimumSpanningTree(m_edges.ToArray());
                break;

            case SpanningTreeType.DepthFirst:
                m_spanningTree = new DepthFirstSpanningTree(m_edges.ToArray());
                break;

            case SpanningTreeType.BreathFirst:
                m_spanningTree = new BreathFirstSpanningTree(m_edges.ToArray());
                break;
            }
        }
예제 #2
0
    private void DrawMinimumSpanningTree()
    {
        if (!m_showMinimumSpanningTree)
        {
            return;
        }

        if (m_voronoiDiagram == null)
        {
            return;
        }

        if (m_voronoiDiagram.Edges == null || m_voronoiDiagram.Edges.Count == 0)
        {
            return;
        }

        if (m_spanningTree == null || m_delaunayTriangulationEdges != m_voronoiDiagram.Edges)
        {
            m_delaunayTriangulationEdges = m_voronoiDiagram.Edges;

            List <STEdge> edges     = new List <STEdge>();
            STEdge        cacheEdge = null;
            for (int i = 0; i < m_delaunayTriangulationEdges.Count; i++)
            {
                cacheEdge        = new STEdge();
                cacheEdge.PointA = m_delaunayTriangulationEdges[i].LeftSite;
                cacheEdge.PointB = m_delaunayTriangulationEdges[i].RightSite;

                edges.Add(cacheEdge);
            }

            m_spanningTree = new MinimumSpanningTree(edges.ToArray());
        }

        Gizmos.color = m_minimumSpanningTreeColor;
        for (int i = 0; i < m_spanningTree.Segments.Count; i++)
        {
            DrawThickLine(m_spanningTree.Segments[i].PointA, m_spanningTree.Segments[i].PointB);
        }
    }
        private void GenerateSpannningTree()
        {
            List <Vector3> roomCenters = new List <Vector3>();

            for (int i = 0; i < m_rooms.Length; i++)
            {
                roomCenters.Add(m_rooms[i].Center + m_rooms[i].CenterBias);
            }

            m_voronoiDiagram = new VoronoiDiagram(roomCenters.ToArray(), new VBorder(m_mapSize.x, m_mapSize.z));

            STEdge        cacheEdge = null;
            List <STEdge> stEdges   = new List <STEdge>();

            for (int i = 0; i < m_voronoiDiagram.Edges.Count; i++)
            {
                cacheEdge        = new STEdge();
                cacheEdge.PointA = m_voronoiDiagram.Edges[i].LeftSite;
                cacheEdge.PointB = m_voronoiDiagram.Edges[i].RightSite;

                stEdges.Add(cacheEdge);
            }
            m_spanningTree = new MinimumSpanningTree(stEdges.ToArray());
        }