实用工具¶
包含
折射角
fresnel_coefficients
偏差
布鲁斯特角
临界角
透镜制造者公式
mirror_formula
lens_formula
超焦距
横向放大
- sympy.physics.optics.utils.brewster_angle(medium1, medium2)[源代码][源代码]¶
此函数计算从介质1到介质2的布儒斯特入射角,单位为弧度。
- 参数:
- 中等 1中等或可简化为符号的
介质1的折射率
- 中等 2中等或可简化为符号的
介质1的折射率
示例
>>> from sympy.physics.optics import brewster_angle >>> brewster_angle(1, 1.33) 0.926093295503462
- sympy.physics.optics.utils.critical_angle(medium1, medium2)[源代码][源代码]¶
此函数计算从介质1到介质2的临界入射角(标志着全内反射的开始),单位为弧度。
- 参数:
- 中等 1中等或可简化为符号的
介质1的折射率。
- 中等 2中等或可简化为符号的
介质1的折射率。
示例
>>> from sympy.physics.optics import critical_angle >>> critical_angle(1.33, 1) 0.850908514477849
- sympy.physics.optics.utils.deviation(
- incident,
- medium1,
- medium2,
- normal=None,
- plane=None,
此函数计算光线在平面表面由于折射引起的偏转角度。
- 参数:
- 事件矩阵, Ray3D, 序列或浮点数
入射矢量或入射角
- medium1sympy.physics.optics.medium.Medium 或 sympifiable
介质1或其折射率
- medium2sympy.physics.optics.medium.Medium 或 sympifiable
介质 2 或其折射率
- 正常矩阵, Ray3D, 或序列
法向量
- 平面飞机
两种介质的分界面。
- 返回入射光线和折射光线之间的角度偏差
示例
>>> from sympy.physics.optics import deviation >>> from sympy.geometry import Point3D, Ray3D, Plane >>> from sympy.matrices import Matrix >>> from sympy import symbols >>> n1, n2 = symbols('n1, n2') >>> n = Matrix([0, 0, 1]) >>> P = Plane(Point3D(0, 0, 0), normal_vector=[0, 0, 1]) >>> r1 = Ray3D(Point3D(-1, -1, 1), Point3D(0, 0, 0)) >>> deviation(r1, 1, 1, n) 0 >>> deviation(r1, n1, n2, plane=P) -acos(-sqrt(-2*n1**2/(3*n2**2) + 1)) + acos(-sqrt(3)/3) >>> round(deviation(0.1, 1.2, 1.5), 5) -0.02005
- sympy.physics.optics.utils.fresnel_coefficients(
- angle_of_incidence,
- medium1,
- medium2,
此函数使用菲涅尔方程来计算反射和透射系数。当电场矢量在入射平面内时(标记为’p’)和当电场矢量垂直于入射平面时(标记为’s’),这两种极化情况下都会获得这些系数。除非入射光线在全内反射中反射,否则有四个实系数,在这种情况下有两个复数系数。入射角是入射光线与表面法线之间的角度。
medium1
和medium2
可以是Medium
或任何可符号化的对象。- 参数:
- 入射角sympifiable
- medium1中等或可简化为符号的
介质1或其折射率
- medium2中等或可简化为符号的
介质 2 或其折射率
- 返回:
- 返回一个包含四个实数菲涅尔系数的列表:
- [反射 p (TM), 反射 s (TE),
- 传输 p (TM),传输 s (TE)]
- 如果光线发生全内反射,则返回
- 两个复杂菲涅尔系数的列表:
- [反射 p (TM), 反射 s (TE)]
参考文献
示例
>>> from sympy.physics.optics import fresnel_coefficients >>> fresnel_coefficients(0.3, 1, 2) [0.317843553417859, -0.348645229818821, 0.658921776708929, 0.651354770181179] >>> fresnel_coefficients(0.6, 2, 1) [-0.235625382192159 - 0.971843958291041*I, 0.816477005968898 - 0.577377951366403*I]
- sympy.physics.optics.utils.hyperfocal_distance(f, N, c)[源代码][源代码]¶
- 参数:
- f: 可符号化
给定镜头的焦距。
- N: 可符号化
给定镜头的F值。
- c: 可符号化
给定图像格式的弥散圆(CoC)。
- sympy.physics.optics.utils.lens_formula(focal_length=None, u=None, v=None)[源代码][源代码]¶
当提供其中两个参数时,此函数提供三个参数中的一个。这仅对近轴光线有效。
- 参数:
- 焦距sympifiable
镜子的焦距。
- usympifiable
物体在主轴上与光学中心的距离。
- vsympifiable
图像在主轴上与光学中心的距离。
示例
>>> from sympy.physics.optics import lens_formula >>> from sympy.abc import f, u, v >>> lens_formula(focal_length=f, u=u) f*u/(f + u) >>> lens_formula(focal_length=f, v=v) f*v/(f - v) >>> lens_formula(u=u, v=v) u*v/(u - v)
- sympy.physics.optics.utils.lens_makers_formula(n_lens, n_surr, r1, r2, d=0)[源代码][源代码]¶
此函数计算透镜的焦距。它遵循笛卡尔符号约定。
- 参数:
- n_lens中等或可简化为符号的
透镜的折射率。
- n_surr中等或可简化为符号的
周围反射的索引。
- r1sympifiable
第一表面的曲率半径。
- r2sympifiable
第二表面的曲率半径。
- d可符号化,可选
透镜厚度,默认值为 0。
示例
>>> from sympy.physics.optics import lens_makers_formula >>> from sympy import S >>> lens_makers_formula(1.33, 1, 10, -10) 15.1515151515151 >>> lens_makers_formula(1.2, 1, 10, S.Infinity) 50.0000000000000 >>> lens_makers_formula(1.33, 1, 10, -10, d=1) 15.3418463277618
- sympy.physics.optics.utils.mirror_formula(focal_length=None, u=None, v=None)[源代码][源代码]¶
当提供其中两个参数时,此函数提供三个参数中的一个。这仅对近轴光线有效。
- 参数:
- 焦距sympifiable
镜子的焦距。
- usympifiable
物体在主轴上与极点的距离。
- vsympifiable
图像在主轴上与极点的距离。
示例
>>> from sympy.physics.optics import mirror_formula >>> from sympy.abc import f, u, v >>> mirror_formula(focal_length=f, u=u) f*u/(-f + u) >>> mirror_formula(focal_length=f, v=v) f*v/(-f + v) >>> mirror_formula(u=u, v=v) u*v/(u + v)
- sympy.physics.optics.utils.refraction_angle(
- incident,
- medium1,
- medium2,
- normal=None,
- plane=None,
此函数计算在平面表面折射后的传输向量。
medium1
和medium2
可以是Medium
或任何可符号化的对象。如果incident
是一个数字,则视为入射角(以弧度为单位),在这种情况下返回折射角。如果
incident
是 \(Ray3D\) 的对象,\(normal\) 也必须是 \(Ray3D\) 的实例,以便将输出作为 \(Ray3D\) 获取。请注意,如果未提供分离平面且 \(normal\) 是 \(Ray3D\) 的实例,则假定normal
在分离平面上与入射光线相交。当 \(normal\) 是 \(Matrix\) 或其他序列时,情况将不会如此。如果incident
是 \(Ray3D\) 的实例且未提供 \(plane\),而normal
不是 \(Ray3D\),则输出将是 \(Matrix\)。- 参数:
- 事件矩阵, Ray3D, 序列或一个数字
入射矢量或入射角
- medium1sympy.physics.optics.medium.Medium 或 sympifiable
介质1或其折射率
- medium2sympy.physics.optics.medium.Medium 或 sympifiable
介质 2 或其折射率
- 正常矩阵, Ray3D, 或序列
法向量
- 平面飞机
两种介质的分界面。
- 返回:
- 根据输入返回折射角或折射光线。
示例
>>> from sympy.physics.optics import refraction_angle >>> from sympy.geometry import Point3D, Ray3D, Plane >>> from sympy.matrices import Matrix >>> from sympy import symbols, pi >>> n = Matrix([0, 0, 1]) >>> P = Plane(Point3D(0, 0, 0), normal_vector=[0, 0, 1]) >>> r1 = Ray3D(Point3D(-1, -1, 1), Point3D(0, 0, 0)) >>> refraction_angle(r1, 1, 1, n) Matrix([ [ 1], [ 1], [-1]]) >>> refraction_angle(r1, 1, 1, plane=P) Ray3D(Point3D(0, 0, 0), Point3D(1, 1, -1))
由于两种介质的折射率不同
>>> n1, n2 = symbols('n1, n2') >>> refraction_angle(r1, n1, n2, n) Matrix([ [ n1/n2], [ n1/n2], [-sqrt(3)*sqrt(-2*n1**2/(3*n2**2) + 1)]]) >>> refraction_angle(r1, n1, n2, plane=P) Ray3D(Point3D(0, 0, 0), Point3D(n1/n2, n1/n2, -sqrt(3)*sqrt(-2*n1**2/(3*n2**2) + 1))) >>> round(refraction_angle(pi/6, 1.2, 1.5), 5) 0.41152