Exemplo n.º 1
0
def orthogonalize3_cross(mats_n33):
    "turns each matrix into a rotation"

    x_n3 = mats_n33[:,:,0]
    y_n3 = mats_n33[:,:,1]
    # z_n3 = mats_n33[:,:,2]

    xnew_n3 = math_utils.normr(x_n3)
    znew_n3 = math_utils.normr(np.cross(xnew_n3, y_n3))
    ynew_n3 = math_utils.normr(np.cross(znew_n3, xnew_n3))

    return np.concatenate([xnew_n3[:,:,None], ynew_n3[:,:,None], znew_n3[:,:,None]],2)
Exemplo n.º 2
0
def orthogonalize3_cross(mats_n33):
    "turns each matrix into a rotation"

    x_n3 = mats_n33[:, :, 0]
    y_n3 = mats_n33[:, :, 1]
    # z_n3 = mats_n33[:,:,2]

    xnew_n3 = math_utils.normr(x_n3)
    znew_n3 = math_utils.normr(np.cross(xnew_n3, y_n3))
    ynew_n3 = math_utils.normr(np.cross(znew_n3, xnew_n3))

    return np.concatenate(
        [xnew_n3[:, :, None], ynew_n3[:, :, None], znew_n3[:, :, None]], 2)
Exemplo n.º 3
0
def get_sphere_points(n_subdivisions):
    phi = (1+np.sqrt(5))/2
    verts = []
    verts.extend(r_[0,y,z] for y in [-1,1] for z in [-phi,phi])
    verts.extend(r_[x,y,0] for x in [-1,1] for y in [-phi,phi])
    verts.extend(r_[x,0,z] for x in [-phi,phi] for z in [-1,1])
    
    dists = ssd.cdist(verts, verts)
    triangles = []
    edge_length = dists[dists>0].min()
    for (i,j,k) in itertools.combinations(xrange(len(verts)), 3):
        if dists[i,j] == edge_length and dists[j,k] == edge_length and dists[k,i] == edge_length:
            triangles.append((i,j,k))

        
    faces = [(verts[i], verts[j], verts[k]) for (i,j,k) in triangles]

    for _i_sub in xrange(n_subdivisions):
        new_faces = []
        for (v0, v1, v2) in faces:
            new_faces.extend([
            (v0, (v0 + v1)/2, (v0 + v2)/2),
            (v1, (v1 + v0)/2, (v1 + v2)/2),
            (v2, (v2 + v0)/2, (v2 + v1)/2),            
            ((v0 + v1)/2, (v1 + v2)/2, (v2 + v0)/2)])
        faces = new_faces
        
    all_verts = np.array(faces).reshape(-1,3)
    all_verts = remove_duplicate_rows(all_verts[np.lexsort(all_verts.T)])
    all_verts = math_utils.normr(all_verts)
    return all_verts
Exemplo n.º 4
0
def get_sphere_points(n_subdivisions):
    phi = (1 + np.sqrt(5)) / 2
    verts = []
    verts.extend(r_[0, y, z] for y in [-1, 1] for z in [-phi, phi])
    verts.extend(r_[x, y, 0] for x in [-1, 1] for y in [-phi, phi])
    verts.extend(r_[x, 0, z] for x in [-phi, phi] for z in [-1, 1])

    dists = ssd.cdist(verts, verts)
    triangles = []
    edge_length = dists[dists > 0].min()
    for (i, j, k) in itertools.combinations(xrange(len(verts)), 3):
        if dists[i, j] == edge_length and dists[j, k] == edge_length and dists[
                k, i] == edge_length:
            triangles.append((i, j, k))

    faces = [(verts[i], verts[j], verts[k]) for (i, j, k) in triangles]

    for _i_sub in xrange(n_subdivisions):
        new_faces = []
        for (v0, v1, v2) in faces:
            new_faces.extend([(v0, (v0 + v1) / 2, (v0 + v2) / 2),
                              (v1, (v1 + v0) / 2, (v1 + v2) / 2),
                              (v2, (v2 + v0) / 2, (v2 + v1) / 2),
                              ((v0 + v1) / 2, (v1 + v2) / 2, (v2 + v0) / 2)])
        faces = new_faces

    all_verts = np.array(faces).reshape(-1, 3)
    all_verts = remove_duplicate_rows(all_verts[np.lexsort(all_verts.T)])
    all_verts = math_utils.normr(all_verts)
    return all_verts