Пример #1
0
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
Пример #2
0
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