def test_animation(): # 1. set parameters init_pegs = np.array([[0.25, 0.38], [0.4, 0.1], [0.6, 0.4], [0.0, 0.6], [0.4, 0.6], [0.2, 0.8]]) init_pegs = np.array([[0.25, 0.35], [0.4, 0.1], [0.6, 0.4], [0.05, 0.6], [0.4, 0.6], [0.22, 0.7], [-0.25, 1.5]]) init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.5], [1.5, 0.2]]) direction = 1 diameter = 0.2 init_setting = (init_nodes, init_pegs, direction, diameter) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory # fig, ax = plt.subplots() # plot_trajectory(init_setting, trajectory, ax=ax) # plt.show() # animation example num_pts = 400 step = 2 outfile = 'unrolling-with-original.mp4' film_writer_title = 'unrolling' circle_pnts = 40 unrolling_animation(init_setting, trajectory, num_pts, step, circle_pnts, outfile=outfile, film_writer_title=film_writer_title)
def test_rotation(angle): # 1. set parameters init_pegs = np.array([[0.25, 0.35], [0.4, 0.1], [0.47, 0.29], [0.38, 0.38], [0.6, 0.4], [0.4, 0.6], [0.20, 0.7], [0.20, 0.15], [0.05, 1.27], [0.25, 0.90], [0.03, 0.40], [0.58, 0.63], [0.15, 0.05], [0.31, 0.20], [0.64, 0.23], [0.31, 0.93], [0.03, 0.38], [0.30, 0.03], [0.56, 0.06], [0.13, 1.0], [0.38, 0.74], [0.11, 1.28], [0.17, 1.09], [-0.01, 1.13], [0.42, 0.49], [0.00, 0.88], [-0.11, 1.28], [0.45, 0.47], [0.12, 0.33], [-0.02, 1.31], [0.15, 0.69], [0.14, 0.46], # YZ [0.19, 0.49], [-0.23, 0.648], # YZ ADD [-0.15, 0.62], # [0.05, 0.60] ]) init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.5], [1.5, 0.2]]) T = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) init_nodes = np.dot(T, init_nodes.transpose()).transpose() direction = 1 diameter = 0.1 init_setting = (init_nodes, init_pegs, direction, diameter) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory fig, ax = plt.subplots() plot_trajectory(init_setting, trajectory, ax=ax) plt.show()
def test_unrolling(): # 1. set parameters init_pegs = np.array([[0.25, 0.38], [0.4, 0.1], [0.6, 0.4], [0.0, 0.6], [0.4, 0.6], [0.2, 0.8]]) init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.5], [1.5, 0.2]]) direction = 1 diameter = 0.2 init_setting = (init_nodes, init_pegs, direction, diameter) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory fig, ax = plt.subplots() plot_trajectory(init_setting, trajectory, ax=ax) plt.show()
# cases 7 different shape init_nodes = np.array([[0.0, 0.0], [0.3, -0.5], [1.0, 1.0], [1.5, 0.2]]) angle = 0 # 20 30 for cases 6, 0 30 for cases 7 angle = np.deg2rad(angle) T = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) init_nodes = np.dot(T, init_nodes.transpose()).transpose() direction = 1 diameter = 0.1 init_setting = (init_nodes, init_pegs, direction, diameter) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory fig, ax = plt.subplots() plot_trajectory(init_setting, trajectory, ax=ax) # ax.plot(pivots[:, 0], pivots[:, 1], 'ro', markersize=2) plt.show() # 4. unrolling animation """ num_pts = 400 step = 2 outfile = 'cases7/unrolling-0.mp4' # outfile = None
def pipeline(): """ contains cases 1-7 """ # case 1-1 case = 1 init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.5], [1.5, 0.2]]) angle = 0 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.18, -0.29], [0.25, 0.35], [0.19, 0.49], [-0.2, 0.63], [-0.23, 0.648], [-0.5324176, 0.34558240]]) # case 1-50 """ case = 1 init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.5], [1.5, 0.2]]) angle = 50 name = 'case-{:d}-{:d}'.format(case, angle) pivots = None """ # case 2-1 """ case = 2 init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.1], [1.58, 0.2]]) angle = 0 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, -0.1], [0.38, 0.38], [0.19, 0.49], [-0.15, 0.62], [-0.23, 0.648]]) """ # case 2-2 """ case = 2 init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.1], [1.58, 0.2]]) angle = 30 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, 0.0], [0.03, 0.38], [0.03, 0.40], [-0.15, 0.62], [-0.23, 0.648]]) """ # case 2-3 """ case = 2 init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], [1.0, 0.1], [1.58, 0.2]]) angle = 60 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, -0.1], [0.13, 1.0], [0, 0.88], [-0.23, 0.648]]) """ # case 3-1 """ # length = 0.8 * original angle = 61 case = 3 init_nodes = np.array([[0, 0], [0.24, 0.4], [0.736, 0.48], [1.1808, 0.3424]]) length = 0.8 angle = 61 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, 0.0], [-0.15, 0.62], [-0.23, 0.648], [-0.3, 0.6]]) """ # case 3-2 """ # length = 0.6 angle = 62.5 case = 3 init_nodes = np.array([[0, 0], [0.18, 0.3], [0.504, 0.42], [0.8424, 0.4032]]) length = 0.6 angle = 62.5 name = 'case-{:d}-{:d}'.format(case, int(angle)) pivots = np.array([[0, -0.2], [-0.15, 0.62], [-0.23, 0.648]]) """ # case 3-3 """ # length = 0.4 angle = 61 case = 3 init_nodes = np.array([[0, 0], [0.12, 0.2], [0.304, 0.32], [0.5136, 0.3728]]) length = 0.6 angle = 61 name = 'case-{:d}-{:d}'.format(case, int(angle)) pivots = None """ # case 4-1 """ case = 4 init_nodes = np.array([[0.0, 0.0], [0.3, 0.2], [1.0, 0.1], [1.65, 0.2]]) angle = 30 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.2, -0.2], [0.2, 0.15], [0.31, 0.20], [0.6, 0.4]]) """ # case 5-1 """ case = 5 init_nodes = np.array([[0.0, 0.0], [0.3, 0.2], [1.0, 0.1], [1.65, 0.05]]) angle = 30 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.2, -0.2], [0.25, 0.35], [0.15, 0.69], [-0.02, 1.31]]) """ # case 6-1 """ case = 6 init_nodes = np.array([[0.0, 0.0], [0.3, 1.0], [1.0, -0.5], [1.5, 0.2]]) angle = 20 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.5, 0], [-0.15, 0.62], [-0.01, 1.13], [0.05, 1.27], [-0.06, 1.47]]) """ # case 6-2 """ case = 6 init_nodes = np.array([[0.0, 0.0], [0.3, 1.0], [1.0, -0.5], [1.5, 0.2]]) angle = 30 name = 'case-{:d}-{:d}'.format(case, angle) pivots = None """ # case 7-1 """ case = 7 init_nodes = np.array([[0.0, 0.0], [0.3, -0.5], [1.0, 1.0], [1.5, 0.2]]) angle = 30 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, 0], [0.30, 0.03], [0.4, 0.1], [0.6, 0.4]]) """ # case 7-2 """ case = 7 init_nodes = np.array([[0.0, 0.0], [0.3, -0.5], [1.0, 1.0], [1.5, 0.2]]) angle = 0 name = 'case-{:d}-{:d}'.format(case, angle) pivots = np.array([[-0.25, 0], [0.30, 0.03], [0.4, 0.1], [0.47, 0.29], [0.15, 0.69], [0, 0.88]]) """ # 1. set initial condition directory = 'case-{:d}-{:d}'.format(case, int(angle)) if not os.path.isdir(directory): os.makedirs(directory) angle = np.deg2rad(angle) T = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) # initial bezier curve control points init_nodes = np.dot(T, init_nodes.transpose()).transpose() init_pegs = np.array([ [0.25, 0.35], [0.4, 0.1], [0.47, 0.29], [0.38, 0.38], [0.6, 0.4], [0.4, 0.6], [0.20, 0.7], [0.20, 0.15], [0.05, 1.27], [0.25, 0.90], [0.03, 0.40], [0.58, 0.63], [0.15, 0.05], [0.31, 0.20], [0.64, 0.23], [0.31, 0.93], [0.03, 0.38], [0.30, 0.03], [0.56, 0.06], [0.13, 1.0], [0.38, 0.74], [0.11, 1.28], [0.17, 1.09], [-0.01, 1.13], [0.42, 0.49], [0.00, 0.88], [-0.11, 1.28], [0.45, 0.47], [0.12, 0.33], [-0.02, 1.31], [0.15, 0.69], [0.14, 0.46], [0.19, 0.49], [-0.23, 0.648], [-0.15, 0.62], ]) direction = 1 diameter = 0.1 init_setting = (init_nodes, init_pegs, direction, diameter) save_artifact_figures(init_nodes, direction, diameter, directory, name) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory # fig, ax = plt.subplots() # plot_trajectory(init_setting, trajectory, ax=ax) # plt.show() # 4. create unrolling animation num_pts = 400 step = 2 circle_pnts = 40 unrolling_outfile = os.path.join(directory, name + '-unrolling.mp4') unrolling_film_writer_title = 'unrolling' unrolling_animation(init_setting, trajectory, num_pts, step, circle_pnts, outfile=unrolling_outfile, film_writer_title=unrolling_film_writer_title) # 5. create pulling animation pulling_film_writer_title = 'pulling' pulling_outfile = os.path.join(directory, name + '-pulling.mp4') if pivots is not None: pivots_file = os.path.join(directory, name + '-pivots.txt') create_pulling_animation(init_setting, trajectory, pivots, outfile=pulling_outfile, film_writer_title=pulling_film_writer_title, pivots_file=pivots_file) else: create_freepulling(init_setting, trajectory, outfile=pulling_outfile, film_writer_title='writer', num_ptr=400) # only use below section of code in OS X call(['open', directory])
def pipeline_backup(): # test_unrolling() # test_animation() # angle = float(sys.argv[1]) # angle = np.deg2rad(angle) # test_rotation(angle) # 1. set parameters init_pegs = np.array([ [0.25, 0.35], [0.4, 0.1], [0.47, 0.29], [0.38, 0.38], [0.6, 0.4], [0.4, 0.6], [0.20, 0.7], [0.20, 0.15], [0.05, 1.27], [0.25, 0.90], [0.03, 0.40], [0.58, 0.63], [0.15, 0.05], [0.31, 0.20], [0.64, 0.23], [0.31, 0.93], [0.03, 0.38], [0.30, 0.03], [0.56, 0.06], [0.13, 1.0], [0.38, 0.74], [0.11, 1.28], [0.17, 1.09], [-0.01, 1.13], [0.42, 0.49], [0.00, 0.88], [-0.11, 1.28], [0.45, 0.47], [0.12, 0.33], [-0.02, 1.31], [0.15, 0.69], [0.14, 0.46], # YZ [0.19, 0.49], [-0.23, 0.648], # YZ ADD [-0.15, 0.62], # [0.05, 0.60] ]) np.savetxt('pegs.txt', init_pegs, fmt='%0.8f', delimiter=' ') # cases 1 # init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], # [1.0, 0.5], [1.5, 0.2]]) # cases 2 different shape # init_nodes = np.array([[0.0, 0.0], [0.3, 0.5], # [1.0, 0.1], [1.58, 0.2]]) # cases 3 different length # length = 0.8 * original angle = 61 # init_nodes = np.array([[0, 0], [0.24, 0.4], [0.736, 0.48], # [1.1808, 0.3424]]) # length = 0.6 * original angle = 62.5 # init_nodes = np.array([[0, 0], [0.18, 0.3], [0.504, 0.42], [0.8424, 0.4032]]) # length = 0.4 * original angle = 61 # init_nodes = np.array([[0, 0], [0.12, 0.2], [0.304, 0.32], [0.5136, 0.3728]]) # cases 4 different shape # init_nodes = np.array([[0.0, 0.0], [0.3, 0.2], # [1.0, 0.1], [1.65, 0.2]]) # cases 5 different shape # init_nodes = np.array([[0.0, 0.0], [0.3, 0.2], # [1.0, 0.1], [1.65, 0.05]]) # cases 6 different shape # init_nodes = np.array([[0.0, 0.0], [0.3, 1.0], # [1.0, -0.5], [1.5, 0.2]]) # cases 7 different shape init_nodes = np.array([[0.0, 0.0], [0.3, -0.5], [1.0, 1.0], [1.5, 0.2]]) angle = 0 # 20 30 for cases 6, 0 30 for cases 7 angle = np.deg2rad(angle) T = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]]) init_nodes = np.dot(T, init_nodes.transpose()).transpose() direction = 1 diameter = 0.1 init_setting = (init_nodes, init_pegs, direction, diameter) # 2. simulate unrolling process trajectory = simulate_unrolling(init_nodes, init_pegs, diameter, direction) origins, beziers, arcs, diameters, collide_pegs = trajectory # 3. plot the trajectory fig, ax = plt.subplots() plot_trajectory(init_setting, trajectory, ax=ax) # ax.plot(pivots[:, 0], pivots[:, 1], 'ro', markersize=2) plt.show() # 4. unrolling animation """ num_pts = 400 step = 2 outfile = 'cases7/unrolling-0.mp4' # outfile = None film_writer_title = 'unrolling' unrolling_animation(init_setting, trajectory, num_pts, step, 40, outfile=outfile, film_writer_title=film_writer_title) """ # 5. create pulling animation # 1. cases 1 # angle 60 # pivots = np.array([[-0.25, -0.2], [-0.15, 0.62], [-0.23, 0.648], [-0.5, 0.4]]) # angle 26 # pivots = np.array([[0, -0.2], [0.03, 0.38], [0.03, 0.40], [-0.11, 1.28], # [-0.25, 1.4]]) # angle 40 # pivots = np.array([[0, -0.4], [-0.15, 0.62], [-0.23, 0.648]]) # 2. cases 2 same length different shape # angle = 0 # pivots = np.array([[-0.25, -0.1], [0.38, 0.38], [0.19, 0.49], # [-0.15, 0.62], [-0.23, 0.648]]) # angle = 30 # pivots = np.array([[-0.25, 0.0], [0.03, 0.38], [0.03, 0.40], # [-0.15, 0.62], [-0.23, 0.648]]) # angle = 60 # pivots = np.array([[-0.25, -0.1], [0.13, 1.0], [0, 0.88], [-0.23, 0.648]]) # cases 3 different length # angle = 61 length = 0.8 # pivots = np.array([[-0.25, 0.0], [-0.15, 0.62], [-0.23, 0.648], [-0.3, 0.6]]) # angle = 62.5 length = 0.6 # pivots = np.array([[0, -0.2], [-0.15, 0.62], [-0.23, 0.648]]) # angle = 61 length = 0.4 # outfile=None # cases 4 different shape # angle = 30 # pivots = np.array([[-0.2, -0.2], [0.2, 0.15], [0.31, 0.20], [0.6, 0.4]]) # cases 5 different shape # angle = 30 # pivots = np.array([[-0.2, -0.2], [0.25, 0.35], [0.15, 0.69], [-0.02, 1.31]]) # case 6 different shape # angle = 20 # pivots = np.array([[-0.5, 0], [-0.15, 0.62], [-0.01, 1.13], [0.05, 1.27], # [-0.06, 1.47]]) # angle = 30 # pivots = None # case 7 different shape # angle = 30 # pivots = np.array([[-0.25, 0], [0.30, 0.03], [0.4, 0.1], [0.6, 0.4]]) # angle = 0 """