def translate(self, T): TM = vl.translation_matrix(T) for P in self.P: new_vertices = [ vl.transform(TM, P.vertices[:, i:i + 1]) for i in range(P.vertices.shape[1]) ] P.vertices = np.concatenate(new_vertices, axis=1)
def __init__(self, center, radius, length=np.inf, closed=True): super(Cylinder, self).__init__() self.center = np.reshape(center, (-1, 1)) self.radius = radius self.length = length self.closed = closed self.z_min = -1. self.z_max = 1. self.T = vl.translation_matrix(center) self.S = vl.scale_matrix([radius, radius, length / 2.])
def __init__(self, center, normal): self.center = np.reshape(center, (-1, 1)) self.normal = np.reshape(normal, (-1, 1)) self.T = vl.translation_matrix(center)
def translate(self, T): self.T = np.dot(self.T, vl.translation_matrix(T))
def translate(self, T): TM = vl.translation_matrix(T) self.origin = vl.transform(TM, self.origin) self.screen = vl.transform(TM, self.screen)
def __init__(self, center, divs, radius=1.): num_vertices = (divs - 1) * divs + 2 u = -np.pi / 2 v = -np.pi du = np.pi / divs dv = 2 * np.pi / divs st = [] P = [[0., -radius, 0.]] N = [[0., -radius, 0.]] for i in range(divs - 1): u += du v = -np.pi for j in range(divs): x = radius * np.cos(u) * np.cos(v) y = radius * np.sin(u) z = radius * np.cos(u) * np.sin(v) P.append([x, y, z]) N.append([x, y, z]) st.append([u / np.pi + 0.5, v * 0.5 / np.pi + 0.5]) v += dv P.append([0., radius, 0.]) N.append([0., radius, 0.]) npolys = divs * divs face_index = [] verts_index = [0 for _ in range((6 + (divs - 1) * 4) * divs)] vid = 1 l = 0 num_v = 0 for i in range(divs): for j in range(divs): if i == 0: face_index.append(3) verts_index[l] = (0) verts_index[l + 1] = (j + vid) if j == (divs - 1): verts_index[l + 2] = vid else: verts_index[l + 2] = (j + vid + 1) l += 3 elif i == (divs - 1): face_index.append(3) verts_index[l] = (j + vid + 1 - divs) verts_index[l + 1] = (vid + 1) if j == (divs - 1): verts_index[l + 2] = (vid + 1 - divs) else: verts_index[l + 2] = (j + vid + 2 - divs) l += 3 else: face_index.append(4) verts_index[l] = (j + vid + 1 - divs) verts_index[l + 1] = (j + vid + 1) if j == (divs - 1): verts_index[l + 2] = (vid + 1) else: verts_index[l + 2] = (j + vid + 2) if j == (divs - 1): verts_index[l + 3] = (vid + 1 - divs) else: verts_index[l + 3] = (j + vid + 2 - divs) l += 4 # print i, j num_v += 1 vid = num_v P = np.array(P).T P = vl.transform(vl.translation_matrix(center), P) super(TriSphere, self).__init__(npolys, face_index, verts_index, P)
def __init__(self, center, radius): super(Sphere, self).__init__() self.center = np.reshape(center, (-1, 1)) self.radius = radius self.S = vl.scale_matrix([radius, radius, radius]) self.T = vl.translation_matrix(center)