def __init__(self, name, n, length, edge_names=True, all_edges=None): pts = [] lens = [] radius = (length / (2 * np.sin(np.pi / n))) dt = (2 * np.pi / n) for i in range(n): pts.append((radius * np.cos(i * dt), radius * np.sin(i * dt))) lens.append(length) Face.__init__(self, name, pts, lens, edge_names=edge_names, allEdges=all_edges)
def __init__(self, name, s, edge_names=True, all_edges=None, recenter=True): angle1 = np.pi*36/180 angle2 = np.pi*54/180 angle3 = np.pi*18/180 pt1 = (0,0) pt2 = (s*np.cos(angle1), s*np.sin(angle1)) pt3 = (2*s*np.cos(angle1), 0) pt4 = (2*s*np.cos(angle1)*np.sin(angle2), -1*2*s*np.cos(angle1)*np.cos(angle2)) pt5 = (s*np.sin(angle3), -1*s*np.cos(angle3)) Face.__init__(self, name, (pt1, pt2, pt3, pt4, pt5), [s, s, s, s, s], edge_names=edge_names, all_edges=all_edges, recenter=recenter)
def transform(self, scale=1, angle=0, origin=(0, 0)): r = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) * scale o = np.array([origin] * len(self.pts_2D)) pts = np.transpose(np.dot(r, np.transpose(np.array(self.pts_2D)))) + o self.pts_2D = [tuple(x) for x in np.rows(pts)] for (i, d) in enumerate(self.decorations): o = np.array([origin] * len(d[0])) pts = np.transpose(np.dot(r, np.transpose(np.array(d[0])))) + o self.decorations[i] = ([tuple(x) for x in np.rows(pts)], d[1])
def rotate_z(angle): r = np.array([[np.cos(angle), -np.sin(angle), 0, 0], [np.sin(angle), np.cos(angle), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) return r