private void DrawCurrent_ST(PaintEventArgs e, SuperTriangle st) { SuperTriangle ST = st; Point[] points = ST.Exist(); for (int i = 0; i < points.Length; i++) { if (points[i].X != 0 && points[i].Y != 0) { if (ST.Link_STriangle != null) { if (i == 0) { e.Graphics.DrawLine(Pens.Teal, ST.Link_STriangle.A, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.B, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.C, points[i]); } else if (i == 1) { e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.A, points[i]); e.Graphics.DrawLine(Pens.Teal, ST.Link_STriangle.B, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.C, points[i]); } else if (i == 2) { e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.A, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_STriangle.B, points[i]); e.Graphics.DrawLine(Pens.Teal, ST.Link_STriangle.C, points[i]); } DrawPoint(points[i], e); } else if (ST.Link_Triangle != null) { if (i == 0) { e.Graphics.DrawLine(Pens.Teal, ST.Link_Triangle.A, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.B, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.C, points[i]); } else if (i == 1) { e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.A, points[i]); e.Graphics.DrawLine(Pens.Teal, ST.Link_Triangle.B, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.C, points[i]); } else if (i == 2) { e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.A, points[i]); e.Graphics.DrawLine(Pens.Black, ST.Link_Triangle.B, points[i]); e.Graphics.DrawLine(Pens.Teal, ST.Link_Triangle.C, points[i]); } DrawPoint(points[i], e); } else { throw new Exception("Нету прошлого треугольника"); } } } if (st.IsFull()) { e.Graphics.DrawLine(Pens.Teal, st.A, st.B); e.Graphics.DrawLine(Pens.Teal, st.B, st.C); e.Graphics.DrawLine(Pens.Teal, st.C, st.A); } }
public void AddNewTop() { if (Current == null) { Current = new SuperTriangle(Main); } else if (Current.IsFull()) { Current = new SuperTriangle(Current); } Point[] points = Current.Exist(); ArrayList exist = new ArrayList(); ArrayList not_exist = new ArrayList(); int b = 0; foreach (Point p in points) { if (p.X != 0 && p.Y != 0) { exist.Add(p); } else { not_exist.Add(b); } b++; } if (Current.Link_Triangle != null) { if (exist.Count == 0) { int i = rnd.Next(1, 4); if (i == 1) { Current.AddPoint(RotatePoint(Center, Main.A, 180), 'A'); } else if (i == 2) { Current.AddPoint(RotatePoint(Center, Main.B, 180), 'B'); } else if (i == 3) { Current.AddPoint(RotatePoint(Center, Main.C, 180), 'C'); } } else { int k = rnd.Next(0, not_exist.Count - 1); int index = (int)not_exist[k]; if (characters[index] == 'A') { Current.AddPoint(RotatePoint(Center, Main.A, 180), characters[index]); } else if (characters[index] == 'B') { Current.AddPoint(RotatePoint(Center, Main.B, 180), characters[index]); } else if (characters[index] == 'C') { Current.AddPoint(RotatePoint(Center, Main.C, 180), characters[index]); } } } else if (Current.Link_STriangle != null && Current.Link_STriangle.Link_Triangle != null) { if (exist.Count == 0) { int i = rnd.Next(1, 4); if (i == 1) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.A, Current.Link_STriangle.A, 180), 'A'); } else if (i == 2) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.B, Current.Link_STriangle.B, 180), 'B'); } else if (i == 3) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.C, Current.Link_STriangle.C, 180), 'C'); } } else { int k = rnd.Next(0, not_exist.Count - 1); int index = (int)not_exist[k]; if (characters[index] == 'A') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.A, Current.Link_STriangle.A, 180), characters[index]); } else if (characters[index] == 'B') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.B, Current.Link_STriangle.B, 180), characters[index]); } else if (characters[index] == 'C') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_Triangle.C, Current.Link_STriangle.C, 180), characters[index]); } } } else if (Current.Link_STriangle != null && Current.Link_STriangle.Link_STriangle != null) { if (exist.Count == 0) { int i = rnd.Next(1, 4); if (i == 1) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.A, Current.Link_STriangle.A, 180), 'A'); } else if (i == 2) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.B, Current.Link_STriangle.B, 180), 'B'); } else if (i == 3) { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.C, Current.Link_STriangle.C, 180), 'C'); } } else { int k = rnd.Next(0, not_exist.Count - 1); int index = (int)not_exist[k]; if (characters[index] == 'A') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.A, Current.Link_STriangle.A, 180), characters[index]); } else if (characters[index] == 'B') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.B, Current.Link_STriangle.B, 180), characters[index]); } else if (characters[index] == 'C') { Current.AddPoint(RotatePoint(Current.Link_STriangle.Link_STriangle.C, Current.Link_STriangle.C, 180), characters[index]); } } } pb.Refresh(); }