近日看到一个光学的题目,记得是当时没有做的一个题,在各种原因下,就用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()






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






