forked from LennyJove/optic_simulation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplanewave_2D.py
More file actions
58 lines (50 loc) · 1.75 KB
/
Copy pathplanewave_2D.py
File metadata and controls
58 lines (50 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
# 参数设置
A0 = 1.0 # 振幅
lmbd = 632.8e-9 # 波长 [单位:空间坐标单位]
theta = np.pi/4 # 传播方向与x轴夹角 [弧度]
L = 2 * lmbd # 坐标范围 [-L, L]
N = 500 # 采样点数
# 计算波矢k
k = 2 * np.pi / lmbd # 波数
kx = k * np.cos(theta) # x方向波矢分量
ky = k * np.sin(theta) # y方向波矢分量
# 创建网格
x = np.linspace(-L, L, N)
y = np.linspace(-L, L, N)
X, Y = np.meshgrid(x, y)
# 计算复振幅
phase = kx * X + ky * Y # 相位项 k·r
E = A0 * np.exp(1j * phase) # 复振幅
intensity = np.abs(E) ** 2
phase = np.angle(E)
# np.real(E)
# 可视化(绘制实部)
# 可视化(绘制强度和相位)
plt.figure(figsize=(12, 6))
# 绘制强度图
plt.subplot(1, 2, 1)
plt.imshow(intensity,
cmap='viridis', # 使用viridis颜色映射
extent=[-L, L, -L, L],
origin='lower') # 坐标系原点在左下角
plt.colorbar(label='Intensity') # 在绘图中添加一个颜色条
plt.xlabel('x/m')
plt.ylabel('y/m')
plt.title(f'Intensity Distribution: λ={lmbd:.2e}, θ={np.rad2deg(theta):.1f}°')
# 绘制相位图
plt.subplot(1, 2, 2)
plt.imshow(phase,
cmap='hsv', # 使用hsv颜色映射表示相位
extent=[-L, L, -L, L],
origin='lower') # 坐标系原点在左下角
plt.colorbar(label='Phase (radians)')
plt.xlabel('x/m')
plt.ylabel('y/m')
plt.title(f'Phase Distribution: λ={lmbd:.2f}, θ={np.rad2deg(theta):.1f}°')
plt.tight_layout()
plt.show()