Ejemplo n.º 1
0
        public void DrawAll_ST(PaintEventArgs e)
        {
            SuperTriangle current = this.Current;

            while (current != null)
            {
                DrawCurrent_ST(e, current);
                current = current.Link_STriangle;
            }
        }
Ejemplo n.º 2
0
 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("Неверное обозначение точки");
     }
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
 public SuperTriangle(SuperTriangle S_Triangle)
 {
     this.Last_S_Triangle = S_Triangle;
 }
Ejemplo n.º 7
0
 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;
 }