包装几何(文档字符串)¶
用于包装路径的几何对象。
- class sympy.physics.mechanics.wrapping_geometry.WrappingCylinder(radius, point, axis)[源代码][源代码]¶
一个实心(无限长)的圆柱体。
方法
geodesic_end_vectors
(point_1, point_2)在两个端点处平行于测地线的向量。
geodesic_length
(point_1, point_2)几何表面上两点之间的最短距离。
point_on_surface
(point)如果一个点在圆柱体的表面上,则返回
True
。参见
WrappingSphere
球面几何,其中包裹方向始终是大地测量方向。
示例
要创建一个
WrappingCylinder
实例,需要一个表示其半径的Symbol
,一个定义其轴的Vector
,以及一个其轴通过的Point
:>>> from sympy import symbols >>> from sympy.physics.mechanics import (Point, ReferenceFrame, ... WrappingCylinder) >>> N = ReferenceFrame('N') >>> r = symbols('r') >>> pO = Point('pO') >>> ax = N.x
一个半径为
r
,轴平行于N.x
并通过pO
的圆柱体可以通过以下方式实例化:>>> WrappingCylinder(r, pO, ax) WrappingCylinder(radius=r, point=pO, axis=N.x)
- property axis¶
圆柱体对齐的轴。
- geodesic_length(point_1, point_2)[源代码][源代码]¶
几何表面上两点之间的最短距离。
- 参数:
- 点_1点
应计算测地线长度的起点。
- 点_2点
应计算测地线长度的点。
示例
测地线长度只能在圆柱体表面上的两点之间计算。首先,必须创建一个
WrappingCylinder
实例,并附带两个位于其表面上的点:>>> from sympy import symbols, cos, sin >>> from sympy.physics.mechanics import (Point, ReferenceFrame, ... WrappingCylinder, dynamicsymbols) >>> N = ReferenceFrame('N') >>> r = symbols('r') >>> pO = Point('pO') >>> pO.set_vel(N, 0) >>> cylinder = WrappingCylinder(r, pO, N.x) >>> p1 = Point('p1') >>> p2 = Point('p2')
假设
p1
相对于pO
位于N.x + r*N.y
处,而p2
相对于pO
位于r*(cos(q)*N.y + sin(q)*N.z)
处,其中q(t)
是一个广义坐标,根据右手定则指定围绕N.x
轴旋转的角度,其中N.y
为零。这些位置可以通过以下方式设置:>>> q = dynamicsymbols('q') >>> p1.set_pos(pO, N.x + r*N.y) >>> p1.pos_from(pO) N.x + r*N.y >>> p2.set_pos(pO, r*(cos(q)*N.y + sin(q)*N.z).normalize()) >>> p2.pos_from(pO).simplify() r*cos(q(t))*N.y + r*sin(q(t))*N.z
测地线长度,在这种情况下是直角三角形的斜边,其中另外两条边的长度分别是
1``(平行于圆柱轴)和 ``r*q(t)``(平行于圆柱的横截面),可以使用 ``geodesic_length
方法计算:>>> cylinder.geodesic_length(p1, p2).simplify() sqrt(r**2*q(t)**2 + 1)
如果
geodesic_length
方法传入一个不在球体表面上的Point
参数,则会引发ValueError
,因为在这种情况下无法计算值。
- property point¶
圆柱轴线通过的点。
- point_on_surface(point)[源代码][源代码]¶
如果一个点在圆柱体的表面上,则返回
True
。- 参数:
- 点点
需要确定其是否在圆柱体表面上的点。该点相对于圆柱体轴线的位置必须是一个简单的表达式,涉及球体的半径,否则此检查可能无法正常工作。
- property radius¶
圆柱体的半径。
- class sympy.physics.mechanics.wrapping_geometry.WrappingGeometryBase[源代码][源代码]¶
所有几何类继承的抽象基类。
- 属性:
point
与几何体关联的点。
方法
geodesic_end_vectors
(point_1, point_2)在两个端点处平行于测地线的向量。
geodesic_length
(point_1, point_2)返回几何体表面上两点之间的最短距离。
point_on_surface
(point)如果一个点在几何体的表面上,则返回
True
。注释
此类实例不能被用户直接实例化。然而,它可以通过子类化来创建自定义几何类型。
- abstract geodesic_end_vectors(
- point_1,
- point_2,
在两个端点处平行于测地线的向量。
- 参数:
- 点_1点
测地线的起始点。
- 点_2点
测地线终止的点。
- abstract geodesic_length(
- point_1,
- point_2,
返回几何体表面上两点之间的最短距离。
- 参数:
- 点_1点
应计算测地线长度的起点。
- 点_2点
应计算测地线长度的点。
- abstract property point¶
与几何体关联的点。
- class sympy.physics.mechanics.wrapping_geometry.WrappingSphere(radius, point)[源代码][源代码]¶
一个实心的球形物体。
方法
geodesic_end_vectors
(point_1, point_2)在两个端点处平行于测地线的向量。
geodesic_length
(point_1, point_2)返回球体表面上两点之间的最短距离。
point_on_surface
(point)如果一个点在球体表面,则返回
True
。参见
WrappingCylinder
圆柱形几何结构,其中包裹方向可以定义。
示例
要创建一个
WrappingSphere
实例,需要一个表示其半径的Symbol
和一个表示其中心位置的Point
:>>> from sympy import symbols >>> from sympy.physics.mechanics import Point, WrappingSphere >>> r = symbols('r') >>> pO = Point('pO')
一个以
pO
为中心,半径为r
的球体可以通过以下方式实例化:>>> WrappingSphere(r, pO) WrappingSphere(radius=r, point=pO)
- geodesic_length(point_1, point_2)[源代码][源代码]¶
返回球体表面上两点之间的最短距离。
- 参数:
- 点_1点
应计算测地线长度的起点。
- 点_2点
应计算测地线长度的点。
示例
测地线长度只能在球体表面上的两点之间计算。首先,必须创建一个
WrappingSphere
实例,并附带两个位于其表面上的点:>>> from sympy import symbols >>> from sympy.physics.mechanics import (Point, ReferenceFrame, ... WrappingSphere) >>> N = ReferenceFrame('N') >>> r = symbols('r') >>> pO = Point('pO') >>> pO.set_vel(N, 0) >>> sphere = WrappingSphere(r, pO) >>> p1 = Point('p1') >>> p2 = Point('p2')
假设
p1
在N.x
方向上距离pO
为r
,而p2
位于N.y + N.z
方向上从pO
出发的球面上。这些位置可以通过以下方式设置:>>> p1.set_pos(pO, r*N.x) >>> p1.pos_from(pO) r*N.x >>> p2.set_pos(pO, r*(N.y + N.z).normalize()) >>> p2.pos_from(pO) sqrt(2)*r/2*N.y + sqrt(2)*r/2*N.z
测地线长度,在这种情况下是球体周长的四分之一,可以使用
geodesic_length
方法计算:>>> sphere.geodesic_length(p1, p2) pi*r/2
如果
geodesic_length
方法传递了一个参数,而该参数对应的Point
不在球体表面上,则会引发ValueError
,因为在这种情况下无法计算出值。
- property point¶
球体中心的点。
- point_on_surface(point)[源代码][源代码]¶
如果一个点在球体表面,则返回
True
。- 参数:
- 点点
需要确定其是否在球体表面上的点。该点相对于球体中心的位置必须是一个简单的表达式,涉及球体的半径,否则此检查可能无法正常工作。
- property radius¶
球的半径。