实用工具

包含

  • 折射角

  • 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’),这两种极化情况下都会获得这些系数。除非入射光线在全内反射中反射,否则有四个实系数,在这种情况下有两个复数系数。入射角是入射光线与表面法线之间的角度。medium1medium2 可以是 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,
)[源代码][源代码]

此函数计算在平面表面折射后的传输向量。medium1medium2 可以是 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
sympy.physics.optics.utils.transverse_magnification(si, so)[源代码][源代码]

计算镜子反射时的横向放大率,即图像大小与物体大小的比率。

参数:
所以:可符号化

透镜-物体距离。

si: 可符号化

透镜-图像距离。