def plot_2d(pts_a, g, tol=1e-12): # g = 6 g = g + 1 beta = math.sqrt(np.pi / 6) num = 1000 h_x = np.linspace(-beta, beta, g) h_y = np.linspace(-beta, beta, num) hl = np.transpose([np.tile(h_x, len(h_y)), np.repeat(h_y, len(h_x))]) v_x = np.linspace(-beta, beta, num) v_y = np.linspace(-beta, beta, g) vl = np.transpose([np.tile(v_x, len(v_y)), np.repeat(v_y, len(v_x))]) grid_lines = np.concatenate((hl, vl)) pts_b = grid_lines pts = mf.sphr2cube_2d(pts_a) cond1 = abs(pts[:, 0] - beta) < tol bpn1 = pts[cond1][:, [1, 2]] pts = np.delete(pts, np.where(cond1)[0], 0) cond2 = abs(pts[:, 0] + beta) < tol bpn2 = pts[cond2][:, [1, 2]] pts = np.delete(pts, np.where(cond2)[0], 0) cond3 = abs(pts[:, 1] - beta) < tol bpn3 = pts[cond3][:, [2, 0]] pts = np.delete(pts, np.where(cond3)[0], 0) cond4 = abs(pts[:, 1] + beta) < tol bpn4 = pts[cond4][:, [2, 0]] pts = np.delete(pts, np.where(cond4)[0], 0) cond5 = abs(pts[:, 2] - beta) < tol bpn5 = pts[cond5][:, [0, 1]] pts = np.delete(pts, np.where(cond5)[0], 0) cond6 = abs(pts[:, 2] + beta) < tol bpn6 = pts[cond6][:, [0, 1]] pts = np.delete(pts, np.where(cond6)[0], 0) pts_1_l = [bpn1, bpn2, bpn3, bpn4, bpn5, bpn6] for pts_1 in pts_1_l: fig = plt.figure() plt.plot(pts_b[:, 0], pts_b[:, 1], "o", markerfacecolor="b", markersize=0.5) plt.plot(pts_1[:, 0], pts_1[:, 1], "o", markerfacecolor="r", markersize=4) plt.show() return
def bpn_in_grid(bpn, grid, n, l_rcsl_go, mt_rcsl_go, tol=1e-06): bpn_c = mf.sphr2cube_2d(bpn) beta = math.sqrt(np.pi / 6) cond1 = abs(bpn_c[:, 0] - beta) < tol bpn1 = np.copy(bpn_c[cond1]) bpn11 = bpn1[:, [1, 2]] bpn_c = np.delete(bpn_c, np.where(cond1)[0], 0) cond2 = abs(bpn_c[:, 0] + beta) < tol bpn2 = np.copy(bpn_c[cond2]) bpn22 = bpn2[:, [1, 2]] bpn_c = np.delete(bpn_c, np.where(cond2)[0], 0) cond3 = abs(bpn_c[:, 1] - beta) < tol bpn3 = np.copy(bpn_c[cond3]) bpn33 = bpn3[:, [2, 0]] bpn_c = np.delete(bpn_c, np.where(cond3)[0], 0) cond4 = abs(bpn_c[:, 1] + beta) < tol bpn4 = np.copy(bpn_c[cond4]) bpn44 = bpn4[:, [2, 0]] bpn_c = np.delete(bpn_c, np.where(cond4)[0], 0) cond5 = abs(bpn_c[:, 2] - beta) < tol bpn5 = np.copy(bpn_c[cond5]) bpn55 = bpn5[:, [0, 1]] bpn_c = np.delete(bpn_c, np.where(cond5)[0], 0) cond6 = abs(bpn_c[:, 2] + beta) < tol bpn6 = np.copy(bpn_c[cond6]) bpn66 = bpn6[:, [0, 1]] bpn_c = np.delete(bpn_c, np.where(cond6)[0], 0) if len(bpn_c) != 0: raise "Algorithm is incorrect!" bpn_cc = [bpn11, bpn22, bpn33, bpn44, bpn55, bpn66] num_bpn = 6 * n * n bpn_grid = np.zeros((num_bpn, 3)) for ct1 in range(len(bpn_cc)): bpn_l = bpn_cc[ct1] for ct2 in range(len(grid)): num_bpn = num_bpn - 1 g = grid[ct2] g_x = g[0] g_y = g[1] a_lt_u = g_x + beta / n a_lt_l = g_x - beta / n b_lt_u = g_y + beta / n b_lt_l = g_y - beta / n tol1 = 1e-06 cond1a = (a_lt_l - bpn_l[:, 0]) < tol1 cond1b = (bpn_l[:, 0] - a_lt_u) < tol1 cond1 = cond1a & cond1b cond2a = (b_lt_l - bpn_l[:, 1]) < tol1 cond2b = (bpn_l[:, 1] - b_lt_u) < tol1 cond2 = cond2a & cond2b cond = cond1 & cond2 if np.any(cond): if ct1 == 0: bpn_pick, ind = pick_ctr(bpn1, l_rcsl_go, mt_rcsl_go, g) bpn1 = np.delete(bpn1, ind, 0) bpn_grid[num_bpn, :] = bpn_pick elif ct1 == 1: bpn_pick, ind = pick_ctr(bpn2, l_rcsl_go, mt_rcsl_go, g) bpn2 = np.delete(bpn2, ind, 0) bpn_grid[num_bpn, :] = bpn_pick elif ct1 == 2: bpn_pick, ind = pick_ctr(bpn3, l_rcsl_go, mt_rcsl_go, g) bpn3 = np.delete(bpn3, ind, 0) bpn_grid[num_bpn, :] = bpn_pick elif ct1 == 3: bpn_pick, ind = pick_ctr(bpn4, l_rcsl_go, mt_rcsl_go, g) bpn4 = np.delete(bpn4, ind, 0) bpn_grid[num_bpn, :] = bpn_pick elif ct1 == 4: bpn_pick, ind = pick_ctr(bpn5, l_rcsl_go, mt_rcsl_go, g) bpn5 = np.delete(bpn5, ind, 0) bpn_grid[num_bpn, :] = bpn_pick elif ct1 == 5: bpn_pick, ind = pick_ctr(bpn6, l_rcsl_go, mt_rcsl_go, g) bpn6 = np.delete(bpn6, ind, 0) bpn_grid[num_bpn, :] = bpn_pick bpn_l = np.delete(bpn_l, ind, 0) else: raise "Insufficient normals to sample!" bpn_grid_sphr = mf.cube2sphr_2d(bpn_grid) return bpn_grid_sphr