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; } }
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(); }
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); } } }