public IEnumerator TreeGrowing()
    {
        //odd가 freeVertex가 아니였던거시다!
        //그러면 even이랑 odd가 tight가 됬으니 두 트리를 합치자!
        //이 경우 even이랑 odd는 사실 이미 tight인 상태!
        edge_info tt = new edge_info(select_even, select_odd, vert[select_even].position, vert[select_odd].position);

        //merge(select_even, select_odd);

        //odd가 freeVertex가 아니였다.
        //x는 이미 T에 속하니까 y랑 x`을 T에 추가하자.
        for (int i = 0; i < Match_edges.Count; ++i)
        {
            if (Match_edges[i].v2 == select_odd)
            {
                tree_vert[select_odd]        = true;
                tree_vert[Match_edges[i].v1] = true;
                break;
            }
        }



        //선긋는 애니메이션 추가

        Vector3[]  t_V = { vert[select_even].position, vert[select_odd].position };
        VectorLine VL  = new VectorLine("tight_edges_" + (Tight_edges.Count + 1), t_V, linematerial, width, LineType.Continuous);

        VL.textureScale = 2f;
        VL.SetColor(t_color);
        VL.Draw();
        tight_path.Add(VL);
        yield return(null);
    }
    public void initialization()
    {
        this.edges       = new List <edge_info>();
        this.Tight_edges = new List <edge_info>();
        this.Match_edges = new List <edge_info>();
        this.tight_path  = new List <VectorLine>();
        this.match_path  = new List <VectorLine>();

        for (int i = 0; i < VertNum; i += 2)
        {
            for (int j = 1; j < VertNum; j += 2)
            {
                edge_info t = new edge_info(i, j, vert[i].position, vert[j].position);
                edges.Add(t);
            }
        }

        edges.Sort(delegate(edge_info x, edge_info y){
            return(x.dist.CompareTo(y.dist));
        });

        for (int i = 0; i < vert.Length; ++i)
        {
            uf_index[i]   = -1;
            match_vert[i] = false;
            tight_vert[i] = false;
            tree_vert[i]  = false;
        }
    }
Esempio n. 3
0
    public void Ready()
    {
        Butt[1].SetActive(false);
        Butt[2].SetActive(false);
        Butt[3].SetActive(true);
        Butt[4].SetActive(false);
        this.edges          = new List <edge_info>();
        this.selected_edges = new List <edge_info>();

        for (int i = 0; i < vert.Length - 1; ++i)
        {
            for (int j = i + 1; j < vert.Length; ++j)
            {
                edge_info t = new edge_info(i, j, vert[i].position, vert[j].position);
                edges.Add(t);
            }
        }

        initialization();
    }
Esempio n. 4
0
    public void shaking()
    {
        for (int i = 0; i < vert.Length; ++i)
        {
            int ccc = 0;
            while (true)
            {
                ccc = 0;
                vert[i].position = new Vector3(Random.Range(-5f, 45f), Random.Range(-5f, 45f), 0);
                for (int j = 0; j < i; ++j)
                {
                    if (ccc > 20)
                    {
                        break;
                    }
                    ccc++;
                    if (Vector3.Distance(vert[i].position, vert[j].position) < 2f)
                    {
                        continue;
                    }
                }
                break;
            }
        }
        this.edges          = new List <edge_info>();
        this.selected_edges = new List <edge_info>();

        for (int i = 0; i < vert.Length - 1; ++i)
        {
            for (int j = i + 1; j < vert.Length; ++j)
            {
                edge_info t = new edge_info(i, j, vert[i].position, vert[j].position);
                edges.Add(t);
            }
        }
    }