def smooth_tris(tris): "Compute normals at each vertex from a list of triangles" from TupleMath import minus,cross,normalize norms = {} for pt0,pt1,pt2 in tris: n = normalize(cross(minus(pt1,pt0),minus(pt2,pt0))) # This is a bad idea, since I'm keying a dictionary on floats! addappend(norms,fixkey(pt0),n) addappend(norms,fixkey(pt1),n) addappend(norms,fixkey(pt2),n) newtris = [] for pt0,pt1,pt2 in tris: newtris.append((pt0,average(norms[fixkey(pt0)]), pt1,average(norms[fixkey(pt1)]), pt2,average(norms[fixkey(pt2)]))) return newtris
def average(l): from TupleMath import normalize,plus avg = (0.,0.,0.) for xyz in l: avg = plus(avg,xyz) return normalize(avg)