1. 电磁波的传播
电磁波是纵波,一维电磁波可以表示为的形式,在传播方向和传播时间组成的平面内波动情况,用Mayavi可以很快作出图形,代码如下所示, 采用mlab.surf可以作出曲面图。
from mayavi import mlab
import numpy as np
x, t = np.mgrid[0:2*np.pi:50j, 0:2*np.pi:50j]
A, k, w = 1, 1, 1
y = A * np.sin(k*x - w*t)
mlab.surf(x, t, y)
mlab.axes()
mlab.show()
光在x-t平面内的传播
2. 光的偏振
偏振光传播时,当光和光之间存在相位差,表现为椭圆偏振光。圆偏振光是椭圆偏振光的一个特例。
- 光用Mayavi画椭圆偏振光曲线,可以分别画出、分量和合成的圆偏振光。代码如下,采用mlab.plot3d可以画出空间曲线。
import numpy as np
from mayavi import mlab
t=np.mgrid[-4*np.pi:4*np.pi:400j]
t1=np.mgrid[-4*np.pi:4.2*np.pi:400j] # t1用于时间坐标的绘制
mlab.plot3d(np.zeros_like(t1),np.zeros_like(t1),t1,color=(0.1,0.1,0.1))
mlab.plot3d(np.cos(t),np.zeros_like(t),t,color=(0.1,0.1,0.9)) # x分量
mlab.plot3d(np.zeros_like(t),np.cos(t+np.pi/2),t,color=(0.1,0.1,0.9)) # y分量
mlab.plot3d(np.cos(t),np.cos(t+np.pi/2),t,color=(0.9, 0.1, 0.1))
# mlab.axes()
mlab.show()
偏振光曲线
- 用mlab.quiver3d函数可以作出空间的矢量。如下代码所示,mlab.quiver3d(x, y, z, u, v, w)中,x, y, z 代表矢量起始点的空间坐标,u,v,w为方向矢量。当p光和s光之间没有相位差时为线偏振状态。
import numpy as np
from mayavi import mlab
t = np.linspace(0, 4*np.pi, 100)
p = np.sin(t)
s = np.sin(t)
zero = np.zeros_like(t)
mlab.plot3d(zero, p, t)
mlab.plot3d(s, zero, t)
mlab.plot3d(zero, zero, t, tube_radius='0.005')
mlab.quiver3d(zero, zero, t, zero, p, zero)
mlab.quiver3d(zero, zero, t, s, zero, zero)
mlab.outline()
mlab.show()
线偏振
- 当p光和s光之间的相位差为pi/2,且p光与s光的振幅相等时,为圆偏振光。p光和s光的分量作图如下
import numpy as np
from mayavi import mlab
t = np.linspace(0, 4*np.pi, 100)
p = np.sin(t)
s = np.cos(t)
zero = np.zeros_like(t)
mlab.plot3d(zero, p, t)
mlab.plot3d(s, zero, t)
mlab.plot3d(zero, zero, t, tube_radius='0.005')
mlab.quiver3d(zero, zero, t, zero, p, zero)
mlab.quiver3d(zero, zero, t, s, zero, zero)
mlab.outline()
mlab.show()
圆偏振光
- 圆偏振光变化如下代码所示
import numpy as np
from mayavi import mlab
t = np.linspace(0, 4*np.pi, 100)
p = np.sin(t)
s = np.cos(t)
zero = np.zeros_like(t)
mlab.plot3d(s, p, t)
mlab.plot3d(zero, zero, t, tube_radius='0.005')
mlab.quiver3d(zero, zero, t, s, p, zero)
mlab.outline()
mlab.show()
圆偏振光
网友评论