暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python基础|光学作图

一个人的成长之路 2021-09-26
787

近日看到一个光学的题目,记得是当时没有做的一个题,在各种原因下,就用python来玩了一下。

下面是题目:



首先,要实现这个效果,那肯定是先实现画一条线的图。



实现结果如下:



实现代码如下:



那接下来就可以实现多条线的结果啦!!!


先给出代码如下:



1# -*- coding: utf-8 -*-
2"""
3Created on Sun Sep 26 19:29:31 2021
4@author: ZhangGD
5@mail:2976493517@qq.com
6"""

7
8import matplotlib.pyplot as plt
9import numpy as np
10from math import *
11
12n1 = 1  #空气折射率
13n2 = 1.5    #玻璃折射率
14i_2 = []   #表示i2'的值
15i2 = []     #表示i2
16i_1 = []    #表示i1'的值
17
18
19i1 = np.linspace(0,100,100)*np.pi/180  #i1的值
20I = np.linspace(0,100,100)             #画图的横坐标
21A1 = np.linspace(np.pi/6,np.pi/3,12)  #A的变化范围
22
23def optics():
24    for k in range(5):
25        A = A1[k]
26        theta = []
27        for j in range(100):
28            a = asin(n1/n2*sin(i1[j]))
29            i2.append(a)
30
31            i22 = A - a
32            i_2.append(i22)
33
34            i11 = asin(sin(i22)*n2/n1)  
35            #数学错误,当k的值为5时,sin(i22)*n2/n1的值超过正负1
36            i_1.append(i11)
37
38            theta_0 = (i1[j] + i11 - A)*180/np.pi
39            theta.append(theta_0)
40
41        plt.plot(I,theta)
42    plt.show()
43
44optics()




代码效果:




结果并不像题目中给出的一般,因为随着代码中k的值增大时,其中的三角函数值超过1,导致反三角函数的值出现错误。
可以改变A的值的变化范围,可以出现多条曲线的情况!!!



文章转载自一个人的成长之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论