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; }