本文主要是介绍python模拟水滴折射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1 注意点
- 2 完整代码
- 3 运行结果
1 注意点
2 完整代码
import numpy as np
import matplotlib.pyplot as pltdef calc_abc_from_line_2d(x0, y0, x1, y1):a = y0 - y1b = x1 - x0c = x0*y1 - x1*y0return a, b, c# 求两直线的交点坐标
def get_line_cross_point(line1, line2):# line1 和 line2 是两个数组, 数组元素为 [x0, y0, x1, y1]a0, b0, c0 = calc_abc_from_line_2d(*line1)a1, b1, c1 = calc_abc_from_line_2d(*line2)D = a0 * b1 - a1 * b0if D == 0:return Nonex = (b0 * c1 - b1 * c0) / Dy = (a1 * c0 - a0 * c1) / D# print(x, y)return x, y# 基本信息
r = 1 # 圆的半径
a, b = (0., 0.) # 圆心
theta2 = 0.8 * np.pi # 入射光线与 x 轴夹角
angle1 = np.pi - theta2 # 入射角
rushedianx = a + r * np.cos(theta2)
rushediany = b + r * np.sin(theta2) # 入射点
n = 1.3 # 折射率
angle2 = angle1 / n # 折射角# 画图准备
fig = plt.figure() # 创建画板
axes = fig.add_subplot(111) # “111”的含义:将画布分割成1行1列,图像画在从左到右从上到下的第1块
axes.axis('equal')# 使用参数方程画圆
theta = np.arange(0,
这篇关于python模拟水滴折射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!