Пример #1
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);
            }
        }
Пример #2
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();
        }