包装几何(文档字符串)

用于包装路径的几何对象。

class sympy.physics.mechanics.wrapping_geometry.WrappingCylinder(radius, point, axis)[源代码][源代码]

一个实心(无限长)的圆柱体。

参数:
半径符号

圆柱体的半径。

圆柱轴线通过的点。

向量

圆柱体对齐的轴。

属性:
axis

圆柱体对齐的轴。

point

圆柱轴线通过的点。

radius

圆柱体的半径。

方法

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_end_vectors(
point_1,
point_2,
)[源代码][源代码]

在两个端点处平行于测地线的向量。

参数:
点_1

测地线的起始点。

点_2

测地线终止的点。

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

与几何体关联的点。

abstract point_on_surface(point)[源代码][源代码]

如果一个点在几何体的表面上,则返回 True

参数:

需要确定是否在几何体表面上的点。

class sympy.physics.mechanics.wrapping_geometry.WrappingSphere(radius, point)[源代码][源代码]

一个实心的球形物体。

参数:
半径符号

球的半径。这个符号必须表示一个正值且恒定的值,即它不能是一个动态符号,也不能是一个表达式。

球体中心的点。

属性:
point

球体中心的点。

radius

球的半径。

方法

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_end_vectors(
point_1,
point_2,
)[源代码][源代码]

在两个端点处平行于测地线的向量。

参数:
点_1

测地线的起始点。

点_2

测地线终止的点。

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')

假设 p1N.x 方向上距离 pOr,而 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

球的半径。