public static Icosahedron Generate() { float t = (float)((1.0f + System.Math.Sqrt(5.0f)) / 2.0f); float s = (float)(System.Math.Sqrt(1.0f + (t * t))); var R = new Icosahedron(); R.Verticies = new List <Vector3> { MakeVert(t, 1, 0) / s, MakeVert(-t, 1, 0) / s, MakeVert(t, -1, 0) / s, MakeVert(-t, -1, 0) / s, MakeVert(1, 0, t) / s, MakeVert(1, 0, -t) / s, MakeVert(-1, 0, t) / s, MakeVert(-1, 0, -t) / s, MakeVert(0, t, 1) / s, MakeVert(0, -t, 1) / s, MakeVert(0, t, -1) / s, MakeVert(0, -t, -1) / s }; R.Faces = new List <Face>(); R.Faces.Add(new Face(0, 4, 8)); R.Faces.Add(new Face(1, 7, 10)); R.Faces.Add(new Face(2, 11, 9)); R.Faces.Add(new Face(7, 1, 3)); R.Faces.Add(new Face(0, 10, 5)); R.Faces.Add(new Face(3, 6, 9)); R.Faces.Add(new Face(3, 9, 11)); R.Faces.Add(new Face(8, 4, 6)); R.Faces.Add(new Face(2, 9, 4)); R.Faces.Add(new Face(3, 11, 7)); R.Faces.Add(new Face(4, 0, 2)); R.Faces.Add(new Face(9, 6, 4)); R.Faces.Add(new Face(2, 5, 11)); R.Faces.Add(new Face(0, 8, 10)); R.Faces.Add(new Face(5, 2, 0)); R.Faces.Add(new Face(10, 7, 5)); R.Faces.Add(new Face(1, 8, 6)); R.Faces.Add(new Face(1, 10, 8)); R.Faces.Add(new Face(6, 3, 1)); R.Faces.Add(new Face(11, 5, 7)); R.FindEdges(); return(R); }
public static Icosahedron Generate() { float t = (float)((1.0f + System.Math.Sqrt(5.0f)) / 2.0f); float s = (float)(System.Math.Sqrt(1.0f + (t * t))); var R = new Icosahedron(); R.Verticies = new List<Vector3> { MakeVert(t, 1, 0) / s, MakeVert(-t, 1, 0) / s, MakeVert(t, -1, 0) / s, MakeVert(-t, -1, 0) / s, MakeVert(1, 0, t) / s, MakeVert(1, 0, -t) / s, MakeVert(-1, 0, t) / s, MakeVert(-1, 0, -t) / s, MakeVert(0, t, 1) / s, MakeVert(0, -t, 1) / s, MakeVert(0, t, -1) / s, MakeVert(0, -t, -1) / s }; R.Faces = new List<Face>(); R.Faces.Add(new Face(0, 4, 8)); R.Faces.Add(new Face(1, 7, 10)); R.Faces.Add(new Face(2, 11, 9)); R.Faces.Add(new Face(7, 1, 3)); R.Faces.Add(new Face(0, 10, 5)); R.Faces.Add(new Face(3, 6, 9)); R.Faces.Add(new Face(3, 9, 11)); R.Faces.Add(new Face(8, 4, 6)); R.Faces.Add(new Face(2, 9, 4)); R.Faces.Add(new Face(3, 11, 7)); R.Faces.Add(new Face(4, 0, 2)); R.Faces.Add(new Face(9, 6, 4)); R.Faces.Add(new Face(2, 5, 11)); R.Faces.Add(new Face(0, 8, 10)); R.Faces.Add(new Face(5, 2, 0)); R.Faces.Add(new Face(10, 7, 5)); R.Faces.Add(new Face(1, 8, 6)); R.Faces.Add(new Face(1, 10, 8)); R.Faces.Add(new Face(6, 3, 1)); R.Faces.Add(new Face(11, 5, 7)); R.FindEdges(); return R; }
public Icosahedron Hexagons() { var R = new Icosahedron(); R.Verticies = new List <Vector3>(); R.Faces = new List <Face>(); return(R); }
public Icosahedron Subdivide() { var R = new Icosahedron(); var dividedEdgeIndex = new short[Edges.Count]; R.Verticies = new List <Vector3>(); foreach (var Vert in Verticies) { R.Verticies.Add(Vert); } for (int E = 0; E < Edges.Count; ++E) { var NewVert = Vector3.Normalize((Verticies[Edges[E].Verticies[0]] + Verticies[Edges[E].Verticies[1]]) / 2); dividedEdgeIndex[E] = (short)R.Verticies.Count; R.Verticies.Add(NewVert); } R.Faces = new List <Face>(); foreach (var Face in Faces) { int[] FEdges = new int[3]; FEdges[0] = FindEdge(Face.Verticies[0], Face.Verticies[1]); FEdges[1] = FindEdge(Face.Verticies[1], Face.Verticies[2]); FEdges[2] = FindEdge(Face.Verticies[2], Face.Verticies[0]); R.Faces.Add(new Face(Face.Verticies[0], dividedEdgeIndex[FEdges[0]], dividedEdgeIndex[FEdges[2]])); R.Faces.Add(new Face(Face.Verticies[1], dividedEdgeIndex[FEdges[1]], dividedEdgeIndex[FEdges[0]])); R.Faces.Add(new Face(Face.Verticies[2], dividedEdgeIndex[FEdges[2]], dividedEdgeIndex[FEdges[1]])); R.Faces.Add(new Face(dividedEdgeIndex[FEdges[0]], dividedEdgeIndex[FEdges[1]], dividedEdgeIndex[FEdges[2]])); } R.FindEdges(); return(R); }
public Icosahedron Subdivide() { var R = new Icosahedron(); var dividedEdgeIndex = new short[Edges.Count]; R.Verticies = new List<Vector3>(); foreach (var Vert in Verticies) R.Verticies.Add(Vert); for (int E = 0; E < Edges.Count; ++E) { var NewVert = Vector3.Normalize((Verticies[Edges[E].Verticies[0]] + Verticies[Edges[E].Verticies[1]]) / 2); dividedEdgeIndex[E] = (short)R.Verticies.Count; R.Verticies.Add(NewVert); } R.Faces = new List<Face>(); foreach (var Face in Faces) { int[] FEdges = new int[3]; FEdges[0] = FindEdge(Face.Verticies[0], Face.Verticies[1]); FEdges[1] = FindEdge(Face.Verticies[1], Face.Verticies[2]); FEdges[2] = FindEdge(Face.Verticies[2], Face.Verticies[0]); R.Faces.Add(new Face(Face.Verticies[0], dividedEdgeIndex[FEdges[0]], dividedEdgeIndex[FEdges[2]])); R.Faces.Add(new Face(Face.Verticies[1], dividedEdgeIndex[FEdges[1]], dividedEdgeIndex[FEdges[0]])); R.Faces.Add(new Face(Face.Verticies[2], dividedEdgeIndex[FEdges[2]], dividedEdgeIndex[FEdges[1]])); R.Faces.Add(new Face(dividedEdgeIndex[FEdges[0]], dividedEdgeIndex[FEdges[1]], dividedEdgeIndex[FEdges[2]])); } R.FindEdges(); return R; }
public Icosahedron Hexagons() { var R = new Icosahedron(); R.Verticies = new List<Vector3>(); R.Faces = new List<Face>(); return R; }