static public Figure get_Icosahedron(float sz)
        {
            Figure res = new Figure();
            float  ang = (float)(Math.PI / 5);

            bool  is_upper = true;
            int   ind      = 0;
            float a        = 0;

            for (int i = 0; i < 10; ++i)
            {
                res.points.Add(new Point3D((float)Math.Cos((float)a), (float)Math.Sin((float)a), is_upper ? (float)0.5 : (float)-0.5));
                is_upper = !is_upper;
                ind++;
                a += ang;
            }
            Side s;

            for (int i = 0; i < ind; i++)
            {
                s = new Side(res);
                if (i % 2 == 0)
                {
                    s.points.AddRange(new int[] { i, (i + 1) % ind, (i + 2) % ind });
                    //  s.drawing_pen = new Pen(Color.Green);
                }
                else
                {
                    s.points.AddRange(new int[] { (i + 2) % ind, (i + 1) % ind, i });
                    //   s.drawing_pen = new Pen(Color.Red);
                }

                res.sides.Add(s);
            }



            res.points.Add(new Point3D(0, 0, (float)Math.Sqrt(5) / 2));  // ind
            res.points.Add(new Point3D(0, 0, -(float)Math.Sqrt(5) / 2)); // ind+1
            for (int i = 0; i < ind; i += 2)
            {
                s = new Side(res);
                s.points.AddRange(new int[] { i, ind, (i + 2) % ind });
                s.points.Reverse();

                res.sides.Add(s);
            }

            for (int i = 1; i < ind; i += 2)
            {
                s = new Side(res);
                s.points.AddRange(new int[] { i, (i + 2) % ind, ind + 1 });
                s.points.Reverse();
                res.sides.Add(s);
            }

            res.scale_around_center(sz, sz, sz);

            res.set_rand_color();
            return(res);
        }
 public Side(Figure h = null)
 {
     host = h;
 }