""" Program: Figure 3 - Image Sinks Date: 25 June 2019 Author: Lebo Molefe Plot the image sinks for different solid boundary shapes. """ import numpy as np import matplotlib.pyplot as plt from sink_positions import sink_positions_corner, sink_positions_parallel_walls, sink_positions_rectangle, \ sink_positions_equilateral_triangle, sink_positions_isosceles_right, sink_positions_306090 # Colors bubble_color = 'navy' water_color = 'lightblue' bubble_size = 3 linewidth = 1 alpha = 0.2 fontsize = 14 x_text = -0.15 y_text = 0.85 #figsize = (8, 32) figsize = (4, 16) # General plot format def plot_format(ax): ax.set_xticks([]) ax.set_yticks([]) ax.axis([-10, 10, -10, 10]) # Set up axes plt.figure(figsize=figsize) ax1 = plt.subplot2grid(shape=(8, 2), loc=(0, 0), rowspan=1, colspan=1) ax2 = plt.subplot2grid(shape=(8, 2), loc=(0, 1), rowspan=1, colspan=1) ax3 = plt.subplot2grid(shape=(8, 2), loc=(1, 0), rowspan=1, colspan=1) ax4 = plt.subplot2grid(shape=(8, 2), loc=(1, 1), rowspan=1, colspan=1) ax5 = plt.subplot2grid(shape=(8, 2), loc=(2, 0), rowspan=1, colspan=1) ax6 = plt.subplot2grid(shape=(8, 2), loc=(2, 1), rowspan=1, colspan=1) ax7 = plt.subplot2grid(shape=(8, 2), loc=(3, 0), rowspan=1, colspan=1) ax8 = plt.subplot2grid(shape=(8, 2), loc=(3, 1), rowspan=1, colspan=1) ax9 = plt.subplot2grid(shape=(8, 2), loc=(4, 0), rowspan=1, colspan=1) ax10 = plt.subplot2grid(shape=(8, 2), loc=(4, 1), rowspan=1, colspan=1) ax11 = plt.subplot2grid(shape=(8, 2), loc=(5, 0), rowspan=1, colspan=1) ax12 = plt.subplot2grid(shape=(8, 2), loc=(5, 1), rowspan=1, colspan=1) ax13 = plt.subplot2grid(shape=(8, 2), loc=(6, 0), rowspan=1, colspan=1) ax14 = plt.subplot2grid(shape=(8, 2), loc=(6, 1), rowspan=1, colspan=1) ax15 = plt.subplot2grid(shape=(8, 2), loc=(7, 0), rowspan=1, colspan=1) ax16 = plt.subplot2grid(shape=(8, 2), loc=(7, 1), rowspan=1, colspan=1) ### a - Vertical wall ### plot_format(ax1) # Wall ax1.plot((0, 0), (-10, 10), linestyle='-', linewidth=linewidth, color='k') # Water ax1.fill([0, -10, -10, 0], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sink ax1.plot(-5, 0, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax1.text(x=x_text, y=y_text, s='a', fontsize=fontsize, weight='bold', transform=ax1.transAxes) plot_format(ax2) # Wall ax2.plot((0, 0), (-10, 10), linestyle='--', linewidth=linewidth, color='k') # Water ax2.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sink ax2.plot((-5, 5), (0, 0), linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #### b - Corner angle 60 degrees ### plot_format(ax3) bubble_position = (5, 4) # Corner ax3.plot((0, 10 / np.tan(np.pi / 3)), (0.1, 10), linestyle='-', linewidth=linewidth, color='k') ax3.plot((0, 10), (0, 0), linestyle='-', linewidth=linewidth, color='k') # Sink ax3.plot(bubble_position[0], bubble_position[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Water ax3.fill([0, 10, 10, 10 / np.tan(np.pi / 3)], [0, 0, 10, 10], color=water_color, alpha=alpha) # Label ax3.text(x=x_text, y=y_text, s='b', fontsize=fontsize, weight='bold', transform=ax3.transAxes) plot_format(ax4) # Corner ax4.plot((-0, 10 / np.tan(np.pi / 3)), (0, 10), linestyle='--', linewidth=linewidth, color='k') ax4.plot((-0, 10), (0, 0), linestyle='--', linewidth=linewidth, color='k') # Sink image_sinks = sink_positions_corner(n=3, bubble_position=bubble_position, print_result=False) for point in image_sinks: ax4.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Water ax4.fill([-10, -10, 10, 10], [-10, 10, 10, -10], color=water_color, alpha=alpha) #### c - Parallel walls ### plot_format(ax5) wall_dist = 2 # Wall ax5.plot((-wall_dist, -wall_dist), (-10, 10), linestyle='-', linewidth=linewidth, color='k') ax5.plot((wall_dist, wall_dist), (-10, 10), linestyle='-', linewidth=linewidth, color='k') # Water ax5.fill([-wall_dist, wall_dist, wall_dist, -wall_dist], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sink ax5.plot(1, 0, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax5.text(x=x_text, y=y_text, s='c', fontsize=fontsize, weight='bold', transform=ax5.transAxes) plot_format(ax6) # Wall ax6.plot((-wall_dist, -wall_dist), (-10, 10), linestyle='--', linewidth=linewidth, color='k') ax6.plot((wall_dist, wall_dist), (-10, 10), linestyle='--', linewidth=linewidth, color='k') # Water ax6.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks = sink_positions_parallel_walls(distance_between_walls=2 * wall_dist, bubble_position=(1, 0), n=5, print_result=False) for point in image_sinks: ax6.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #### d - Semi-enclosed parallel walls ### plot_format(ax7) wall_dist = 2 # Wall ax7.plot((-wall_dist, -wall_dist), (-3, 10), linestyle='-', linewidth=linewidth, color='k') ax7.plot((wall_dist, wall_dist), (-3, 10), linestyle='-', linewidth=linewidth, color='k') ax7.plot((-wall_dist, wall_dist), (-3, -3), linestyle='-', linewidth=linewidth, color='k') # Water ax7.fill([-wall_dist, wall_dist, wall_dist, -wall_dist], [-3, -3, 10, 10], color=water_color, alpha=alpha) # Sink ax7.plot(1, 0, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax7.text(x=x_text, y=y_text, s='d', fontsize=fontsize, weight='bold', transform=ax7.transAxes) plot_format(ax8) # Wall ax8.plot((-wall_dist, -wall_dist), (-3, 10), linestyle='--', linewidth=linewidth, color='k') ax8.plot((wall_dist, wall_dist), (-3, 10), linestyle='--', linewidth=linewidth, color='k') ax8.plot((-wall_dist, wall_dist), (-3, -3), linestyle='--', linewidth=linewidth, color='k') # Water ax8.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks_top = sink_positions_parallel_walls(distance_between_walls=4, bubble_position=(1, 0), n=5, print_result=False) image_sinks_bottom = sink_positions_parallel_walls(distance_between_walls=4, bubble_position=(1, -6), n=5, print_result=False) for point in image_sinks_top: ax8.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) for point in image_sinks_bottom: ax8.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #### e - Rectangle ### plot_format(ax9) horizontal = 2 vertical = 1.5 # Wall ax9.plot((-horizontal, horizontal), (vertical, vertical), linestyle='-', linewidth=linewidth, color='k') ax9.plot((-horizontal, -horizontal), (-vertical, vertical), linestyle='-', linewidth=linewidth, color='k') ax9.plot((horizontal, horizontal), (-vertical, vertical), linestyle='-', linewidth=linewidth, color='k') ax9.plot((-horizontal, horizontal), (-vertical, -vertical), linestyle='-', linewidth=linewidth, color='k') # Water ax9.fill([-horizontal, horizontal, horizontal, -horizontal], [-vertical, -vertical, vertical, vertical], color=water_color, alpha=alpha) # Sink ax9.plot(1, 0, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax9.text(x=x_text, y=y_text, s='e', fontsize=fontsize, weight='bold', transform=ax9.transAxes) plot_format(ax10) # Wall ax10.plot((-10, 10), (vertical, vertical), linestyle='--', linewidth=linewidth, color='k') ax10.plot((-horizontal, -horizontal), (-10, 10), linestyle='--', linewidth=linewidth, color='k') ax10.plot((horizontal, horizontal), (-10, 10), linestyle='--', linewidth=linewidth, color='k') ax10.plot((-10, 10), (-vertical, -vertical), linestyle='--', linewidth=linewidth, color='k') # Water ax10.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks = sink_positions_rectangle(l_x=2 * horizontal, l_y=2 * vertical, bubble_position=(1, 0), w=3, print_result=False) for point in image_sinks: ax10.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) ### f - Equilateral triangle ### plot_format(ax11) # Equilateral triangle l = 4 # Walls ax11.plot((0, l * np.sin(np.pi / 6)), (0, l * np.cos(np.pi / 6)), linestyle='-', linewidth=linewidth, color='k') ax11.plot((0, -l * np.sin(np.pi / 6)), (0, l * np.cos(np.pi / 6)), linestyle='-', linewidth=linewidth, color='k') ax11.plot((-l * np.sin(np.pi / 6), l * np.sin(np.pi / 6)), (l * np.cos(np.pi / 6), l * np.cos(np.pi / 6)), linestyle='-', linewidth=linewidth, color='k') # Water ax11.fill([0, l * np.sin(np.pi / 6), -l * np.sin(np.pi / 6)], [0, l * np.cos(np.pi / 6), l * np.cos(np.pi / 6)], color=water_color, alpha=alpha) # Sink ax11.plot(0, 2, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax11.text(x=x_text, y=y_text, s='f', fontsize=fontsize, weight='bold', transform=ax11.transAxes) plot_format(ax12) # Walls ax12.plot((-10 * np.tan(np.pi / 6), 10 * np.tan(np.pi / 6)), (-10, 10), linestyle='--', linewidth=linewidth, color='k') ax12.plot((10 * np.tan(np.pi / 6), -10 * np.tan(np.pi / 6)), (-10, 10), linestyle='--', linewidth=linewidth, color='k') ax12.plot( (-10, 10), (l * np.cos(np.pi / 6), l * np.cos(np.pi / 6)), linestyle='--', linewidth=linewidth, color='k') # Water ax12.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks = sink_positions_equilateral_triangle(l=l, bubble_position=(0, 2), w=4, print_result=False, rotate=False) for point in image_sinks: ax12.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #### g - Isosceles right triangle ### plot_format(ax13) l = 3 # Walls ax13.plot((0, 0), (0, l), linestyle='-', linewidth=linewidth, color='k') ax13.plot((0, l), (0, 0), linestyle='-', linewidth=linewidth, color='k') ax13.plot((0, l), (l, 0), linestyle='-', linewidth=linewidth, color='k') # Water ax13.fill([0, l, 0], [0, 0, l], color=water_color, alpha=alpha) # Sink ax13.plot(1.2, 0.8, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax13.text(x=x_text, y=y_text, s='g', fontsize=fontsize, weight='bold', transform=ax13.transAxes) plot_format(ax14) # Walls ax14.plot((-10, 10), (13, -7), linestyle='--', linewidth=linewidth, color='k') ax14.plot((-10, 10), (0, 0), linestyle='--', linewidth=linewidth, color='k') ax14.plot((0, 0), (-10, 10), linestyle='--', linewidth=linewidth, color='k') # Water ax14.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks = sink_positions_isosceles_right(l=l, bubble_position=(1.2, 0.8), w=4, print_result=True) for point in image_sinks: ax14.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #### h - 30-60-90 degree right triangle ### plot_format(ax15) l = 5 # Walls ax15.plot((0, 0), (0, l * np.sqrt(3) / 2), linestyle='-', linewidth=linewidth, color='k') ax15.plot((0, l / 2), (0, 0), linestyle='-', linewidth=linewidth, color='k') ax15.plot((0, l / 2), (l * np.sqrt(3) / 2, 0), linestyle='-', linewidth=linewidth, color='k') # Water ax15.fill([0, l / 2, 0], [0, 0, l * np.sqrt(3) / 2], color=water_color, alpha=alpha) # Sink ax15.plot(0.8, 1.5, linestyle='', marker='o', markersize=bubble_size, color=bubble_color) # Label ax15.text(x=x_text, y=y_text, s='h', fontsize=fontsize, weight='bold', transform=ax15.transAxes) plot_format(ax16) # Walls ax16.plot((-10, 10), (10 * np.sqrt(3) + l * np.sqrt(3) / 2, -10 * np.sqrt(3) + l * np.sqrt(3) / 2), linestyle='--', linewidth=linewidth, color='k') ax16.plot((-10, 10), (0, 0), linestyle='--', linewidth=linewidth, color='k') ax16.plot((0, 0), (-10, 10), linestyle='--', linewidth=linewidth, color='k') # Water ax16.fill([-10, 10, 10, -10], [-10, -10, 10, 10], color=water_color, alpha=alpha) # Sinks image_sinks = sink_positions_306090(l=l, bubble_position=(0.8, 1.5), w=3, print_result=True) for point in image_sinks: ax16.plot(point[0], point[1], linestyle='', marker='o', markersize=bubble_size, color=bubble_color) #ax = plt.axis() plt.savefig('figure03.pdf', bbox_inches='tight', pad_inches=0) plt.show()