update
This commit is contained in:
		
							
								
								
									
										72
									
								
								2021.03.19_plot_twist_graphene_with_python/twist_graphene.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								2021.03.19_plot_twist_graphene_with_python/twist_graphene.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| """ | ||||
| This code is supported by the website: https://www.guanjihuan.com | ||||
| The newest version of this code is on the web page: https://www.guanjihuan.com/archives/10909 | ||||
| """ | ||||
|  | ||||
| import numpy as np | ||||
| import copy | ||||
| import matplotlib.pyplot as plt | ||||
| from math import * | ||||
|  | ||||
| def main(): | ||||
|     x_array = np.arange(-20, 20.1) | ||||
|     y_array = np.arange(-20, 20.1) | ||||
|     coordinates = [] | ||||
|     for x in x_array: | ||||
|         for y in y_array: | ||||
|             coordinates.append([0+x*3, 0+y*np.sqrt(3)]) | ||||
|             coordinates.append([1+x*3, 0+y*np.sqrt(3)]) | ||||
|             coordinates.append([-1/2+x*3, np.sqrt(3)/2+y*np.sqrt(3)]) | ||||
|             coordinates.append([-3/2+x*3, np.sqrt(3)/2+y*np.sqrt(3)]) | ||||
|     x_range1 = max(np.array(coordinates)[:, 0])-min(np.array(coordinates)[:, 0]) | ||||
|     y_range1 = max(np.array(coordinates)[:, 1])-min(np.array(coordinates)[:, 1]) | ||||
|      | ||||
|     theta = -1.1/180*pi | ||||
|     rotation_matrix = np.zeros((2, 2)) | ||||
|     rotation_matrix[0, 0] = np.cos(theta) | ||||
|     rotation_matrix[1, 1] = np.cos(theta) | ||||
|     rotation_matrix[0, 1] = -np.sin(theta) | ||||
|     rotation_matrix[1, 0] = np.sin(theta) | ||||
|     coordinates2 = copy.deepcopy(coordinates) | ||||
|     for i in range(len(coordinates)): | ||||
|         coordinates2[i] = np.dot(rotation_matrix, coordinates[i]) | ||||
|     x_range2 = max(np.array(coordinates2)[:, 0])-min(np.array(coordinates2)[:, 0]) | ||||
|     y_range2 = max(np.array(coordinates2)[:, 1])-min(np.array(coordinates2)[:, 1]) | ||||
|  | ||||
|     x_range = max([x_range1, x_range2]) | ||||
|     y_range = max([y_range1, y_range2]) | ||||
|     fig, ax = plt.subplots(figsize=(9*x_range/y_range,9)) | ||||
|     plt.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95) | ||||
|     plt.axis('off') | ||||
|     plot_dots_1(ax, coordinates) | ||||
|     plot_dots_2(ax, coordinates2) | ||||
|     plot_dots_0(ax, [[0, 0]]) | ||||
|     plt.savefig('twist_graphene.eps')  | ||||
|     plt.show() | ||||
|  | ||||
|  | ||||
| def plot_dots_0(ax, coordinates): | ||||
|     for i in range(len(coordinates)): | ||||
|         ax.plot(coordinates[i][0], coordinates[i][1], 'ko', markersize=0.5) | ||||
|  | ||||
|  | ||||
| def plot_dots_1(ax, coordinates): | ||||
|     for i1 in range(len(coordinates)): | ||||
|         for i2 in range(len(coordinates)): | ||||
|             if np.sqrt((coordinates[i1][0] - coordinates[i2][0])**2+(coordinates[i1][1] - coordinates[i2][1])**2) < 1.1: | ||||
|                 ax.plot([coordinates[i1][0], coordinates[i2][0]], [coordinates[i1][1], coordinates[i2][1]], '-k', linewidth=0.2) | ||||
|     for i in range(len(coordinates)): | ||||
|         ax.plot(coordinates[i][0], coordinates[i][1], 'ro', markersize=0.5) | ||||
|      | ||||
|  | ||||
| def plot_dots_2(ax, coordinates): | ||||
|     for i1 in range(len(coordinates)): | ||||
|         for i2 in range(len(coordinates)): | ||||
|             if np.sqrt((coordinates[i1][0] - coordinates[i2][0])**2+(coordinates[i1][1] - coordinates[i2][1])**2) < 1.1: | ||||
|                 ax.plot([coordinates[i1][0], coordinates[i2][0]], [coordinates[i1][1], coordinates[i2][1]], '--k', linewidth=0.2) | ||||
|     for i in range(len(coordinates)): | ||||
|         ax.plot(coordinates[i][0], coordinates[i][1], 'bo', markersize=0.5)     | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
		Reference in New Issue
	
	Block a user