Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        public Icosahedron Hexagons()
        {
            var R = new Icosahedron();

            R.Verticies = new List <Vector3>();
            R.Faces     = new List <Face>();



            return(R);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        public Icosahedron Hexagons()
        {
            var R = new Icosahedron();
            R.Verticies = new List<Vector3>();
            R.Faces = new List<Face>();

            return R;
        }