当前位置: 首页 > article >正文

通过python理解光的偏振

文章目录

    • 基本原理
    • 椭圆偏振光

基本原理

光是横波,可以写成 E ⃗ = A ⃗ c o s ( ω t − k ⃗ r ⃗ ) \vec E = \vec{A}cos(\omega t-\vec k\vec r) E =A cos(ωtk r ),振动方向与传播方向垂直,而在三维空间中,与光线垂直的乃是法平面。换言之,光波在传输过程中,只要振动方向在某一平面内,就是合法的,而其振动方向,即为偏振方向。

这种横波在传播过程中存在的不同振动方向的特性,即为光的偏振。

这种现象最早是丹麦科学家巴多林在1669年发现的,他看到当一道光照射冰洲石的时候,这束光会一分为二,其实就是晶体的双折射现象。这个现象随后被波动光学的老祖宗惠更斯认为是纵波的现象,显然是不对的,直到1810年马斯吕才用偏振解释了这个现象,他也被称为偏振之父。

下面画一下偏振的示意图

#偏振光演示
import numpy as np
import matplotlib.pyplot as plt
def polarShow():
    z = np.arange(0,5,0.01)      #传播方向,单位um
    dWave = 0.6328
    x1 = z*0
    y1 = np.cos(2*np.pi*z/dWave)#此光波偏振方向为y
    x2 = np.cos(2*np.pi*z/dWave)#此光波偏振方向为y
    y2 = z*0
    ax = plt.subplot(projection='3d')
    ax.plot3D(z,x1,y1)
    ax.plot3D(z,x2,y2)
    ax.plot3D(z,x1,y2)
    plt.show()

出图如下,其中绿色为光轴,即光的传播方向,蓝色和橘色分别是两个不同偏振方向的光。

在这里插入图片描述

椭圆偏振光

生活中的大部分光都是各种偏振方向的均匀混合,看不出偏振特性。上图所示的蓝色和橙色光波,其偏振方向单一,这种光叫做线偏振光。又因为这两束光处处保持等相位,则这两束光的合成仍旧为偏振光。

如果二者存在相位差,那么其合成将不再是线偏振光,下面将程序中插入一个相位

#两个存在相位差的线偏振光演示
def polarShow(dWave = 0.6328,delta=0.5):
    z = np.arange(0,5,0.01)      
    x1 = z*0
    y1 = np.cos(2*np.pi*z/dWave+delta)#此光波偏振方向为y

    x2 = np.cos(2*np.pi*z/dWave)#此光波偏振方向为x
    y2 = z*0

    x3 = x1+x2
    y3 = y1+y2

    ax = plt.subplot(projection='3d')
    ax.plot3D(z,x1,y1)
    ax.plot3D(z,x2,y2)
    ax.plot3D(z,x3,y3)
    ax.plot3D(z,x1,y2)
    plt.show()

调整视角之后,如下图所示,红色是光轴,蓝色和橘色是两个不同方向的偏振光,绿色是两个方向偏振光的合成。可见两束存在相位差的线偏振光合成之后,偏振方向会随着传播位置发生变化。由于沿着光的传播方向看去,其投影为一个椭圆,故称之为椭圆偏振光。

在这里插入图片描述

调整相位差,然后画出光波沿传播方向上的投影

#偏振光演示
def polarShow(dWave = 0.6328):
    z = np.arange(0,5,0.01)      
    x = np.cos(2*np.pi*z/dWave) #x偏振光
    delta = [0, 1/6, 1/4, 1/3, 1/2, 2/3, 3/4, 5/6, 1]
    ths = [d*np.pi for d in delta]
    titles = [f"{int(180*d)}°" for d in delta]
    for i in range(9):
        #子图绘制,表示3×3的布局中的第(1+i)个图
        ax =plt.subplot(3, 3, 1+i)  
        ax.set_title(titles[i])
        y = np.cos(2*np.pi*z/dWave+ths[i])#此光波偏振方向为y
        ax.plot(x,y)
        plt.xticks([])
        plt.yticks([])  #去掉坐标轴
    plt.subplots_adjust(wspace=0.5,hspace=0.5)#调整子图间距
    plt.show()

于是就得到了这张著名的图片:

在这里插入图片描述


http://www.kler.cn/a/6542.html

相关文章:

  • 任务三数据库加固
  • STM32 高级 物联网通信之CAN通讯
  • 【IoTDB 线上小课 10】为什么选择 IoTDB 管理时序数据?
  • Linux网络基础--传输层Tcp协议(上) (详细版)
  • UE5喷涂功能
  • [ESP]从零开始的Arduino IDE安装与ESP环境配置教程
  • jsp+javaEE高校毕业生去向跟踪管理系统gzyy84程序mysql
  • 分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测
  • 回归预测 | MATLAB实现GA-BiLSTM遗传算法优化双向长短期记忆网络的数据多输入单输出回归预测
  • 技术动态 | 基于GPT-4的知识图谱构建能力评测
  • 【C++】开散列哈希表封装实现unordered_map和unordered_set
  • HTML - Javascript - JS可变参数函数
  • Stable Diffusion 安装教程
  • opencv_c++学习(二)
  • 使用JSR303对数据进行校验【JAVA】
  • Linux reset子系统和驱动实例
  • GEE:栅格转矢量
  • Jackson之ObjectMapper常用用法
  • 【异常解决】java: 无法访问org.springframework.boot.SpringApplication的解决方案
  • 中级软考有没有必要考?
  • php+mysql仓储进销存仓库管理系统
  • 【C++】多态(二)
  • 从零开始学习InfluxDB:安装和使用入门教程
  • C++ using:软件设计中的面向对象编程技巧
  • 分库分表笔记
  • MVVM理解、object.defineProperty、数据代理