Source code for pyacs.lib.icosahedron.subdivide

"""Subdivide icosahedron faces and push vertices to unit sphere."""

from pyacs.lib.euclid import Vector3


[docs] def subdivide(verts, faces): """Subdivide each triangle into four triangles, pushing verts to the unit sphere. Parameters ---------- verts : list List of vertices (modified in place). faces : list List of face index tuples (modified in place). Returns ------- verts : list Updated vertices. faces : list Updated faces. """ from progress.bar import Bar triangles = len(faces) bar = Bar('', max=triangles, suffix='%(percent).1f%% - %(elapsed)ds') for faceIndex in range(triangles): face = faces[faceIndex] a, b, c = (Vector3(*verts[vertIndex]) for vertIndex in face) verts.append((a + b).normalized()[:]) verts.append((b + c).normalized()[:]) verts.append((a + c).normalized()[:]) i = len(verts) - 3 j, k = i + 1, i + 2 faces.append((i, j, k)) faces.append((face[0], i, k)) faces.append((i, face[1], j)) faces[faceIndex] = (k, j, face[2]) bar.next() bar.finish() return verts, faces