public void DrawAll_ST(PaintEventArgs e) { SuperTriangle current = this.Current; while (current != null) { DrawCurrent_ST(e, current); current = current.Link_STriangle; } }
public SuperTriangle(Point point, char wich_point, SuperTriangle S_Triangle) { this.Last_S_Triangle = S_Triangle; if (wich_point == 'A') { this.a = point; } else if (wich_point == 'B') { this.b = point; } else if (wich_point == 'C') { this.c = point; } else { throw new Exception("Неверное обозначение точки"); } }
public void UpdateCenter() { Center = new Point(pb.Size.Width / 2, pb.Size.Height / 2); if (!Main.UpdateCenter(Center, RndX, RndY)) { return; } if (Current != null) { List <SuperTriangle> S_Triangles = new List <SuperTriangle>(); SuperTriangle current = Current; while (current != null) { S_Triangles.Add(current); current = current.Link_STriangle; } for (int i = S_Triangles.Count; i > 0; i--) { S_Triangles[i - 1].UpdateCenter(Center); } } }
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(); }
public SuperTriangle(SuperTriangle S_Triangle) { this.Last_S_Triangle = S_Triangle; }
public SuperTriangle(Point A, Point B, Point C, SuperTriangle S_Triangle) { this.a = A; this.b = B; this.c = C; this.Last_S_Triangle = S_Triangle; this.center = S_Triangle.Center; }