路径 (文档字符串)

执行器使用的路径实现。

class sympy.physics.mechanics.pathway.LinearPathway(*attachments)[源代码][源代码]

一对附着点之间的线性路径。

参数:
附件tuple[Point, Point]

一对 Point 对象,它们之间是线性路径的范围。构造函数期望传递两个点,例如 LinearPathway(Point('pA'), Point('pB'))。多于或少于两个点将导致错误抛出。

属性:
attachments

定义路径端点的两个点。

extension_velocity

路径扩展速度的精确解析表达式。

length

路径长度的精确解析表达式。

方法

to_loads(force)

加载由运动方程方法类所需的。

示例

>>> from sympy.physics.mechanics import LinearPathway

要构建一条路径,需要将两个点作为 tuple 传递给 attachments 参数。

>>> from sympy.physics.mechanics import Point
>>> pA, pB = Point('pA'), Point('pB')
>>> linear_pathway = LinearPathway(pA, pB)
>>> linear_pathway
LinearPathway(pA, pB)

上面创建的路径在没有描述其附着点的位置和速度的情况下并不是很有趣。没有这些信息,就无法描述路径如何移动,即其长度或延伸速度。

>>> from sympy.physics.mechanics import ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> N = ReferenceFrame('N')
>>> q = dynamicsymbols('q')
>>> pB.set_pos(pA, q*N.x)
>>> pB.pos_from(pA)
q(t)*N.x

路径的长度可以通过其 length 属性访问。

>>> linear_pathway.length
sqrt(q(t)**2)

注意如何返回一个看似过于复杂的表达式。这实际上是必需的,因为它确保路径的长度始终为正。

路径的扩展速度可以通过其 extension_velocity 属性类似地访问。

>>> linear_pathway.extension_velocity
sqrt(q(t)**2)*Derivative(q(t), t)/q(t)
property extension_velocity

路径扩展速度的精确解析表达式。

property length

路径长度的精确解析表达式。

to_loads(force)[源代码][源代码]

加载由运动方程方法类所需的。

参数:
强制表达式

沿路径长度作用的力的大小。根据路径长度、路径延伸速度和点对力之间的符号约定,如果这个 Expr 是正的,那么力将作用于推动点对彼此远离(它是扩张的)。

示例

下面的示例展示了如何生成线性执行器产生的负载,该执行器产生扩展力 F。首先,在全局坐标系 Nx 方向上,创建一个连接两个点的线性执行器,这两个点由坐标 q 分隔。

>>> from sympy.physics.mechanics import (LinearPathway, Point,
...     ReferenceFrame)
>>> from sympy.physics.vector import dynamicsymbols
>>> q = dynamicsymbols('q')
>>> N = ReferenceFrame('N')
>>> pA, pB = Point('pA'), Point('pB')
>>> pB.set_pos(pA, q*N.x)
>>> linear_pathway = LinearPathway(pA, pB)

现在创建一个符号 F 来描述沿路径产生的(扩张性)力的大小。KanesMethod 所需的载荷列表可以通过调用路径的 to_loads 方法并传递 F 作为唯一参数来生成。

>>> from sympy import symbols
>>> F = symbols('F')
>>> linear_pathway.to_loads(F)
[(pA, - F*q(t)/sqrt(q(t)**2)*N.x), (pB, F*q(t)/sqrt(q(t)**2)*N.x)]
class sympy.physics.mechanics.pathway.ObstacleSetPathway(*attachments)[源代码][源代码]

一组附着点之间的障碍设置路径。

参数:
附件tuple[Point, Point]

定义分段障碍物路径的 Point 对象集合。

属性:
attachments

定义路径分段路径的一组点。

extension_velocity

路径扩展速度的精确解析表达式。

length

路径长度的精确解析表达式。

方法

to_loads(force)

加载由运动方程方法类所需的。

示例

要构建一个障碍集路径,需要将三个或更多的点作为 tuple 传递给 attachments 参数。

>>> from sympy.physics.mechanics import ObstacleSetPathway, Point
>>> pA, pB, pC, pD = Point('pA'), Point('pB'), Point('pC'), Point('pD')
>>> obstacle_set_pathway = ObstacleSetPathway(pA, pB, pC, pD)
>>> obstacle_set_pathway
ObstacleSetPathway(pA, pB, pC, pD)

上面创建的路径在没有描述其附着点的位置和速度的情况下并不是很有趣。没有这些信息,就无法描述路径如何移动,即其长度或延伸速度。

>>> from sympy import cos, sin
>>> from sympy.physics.mechanics import ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> N = ReferenceFrame('N')
>>> q = dynamicsymbols('q')
>>> pO = Point('pO')
>>> pA.set_pos(pO, N.y)
>>> pB.set_pos(pO, -N.x)
>>> pC.set_pos(pA, cos(q) * N.x - (sin(q) + 1) * N.y)
>>> pD.set_pos(pA, sin(q) * N.x + (cos(q) - 1) * N.y)
>>> pB.pos_from(pA)
- N.x - N.y
>>> pC.pos_from(pA)
cos(q(t))*N.x + (-sin(q(t)) - 1)*N.y
>>> pD.pos_from(pA)
sin(q(t))*N.x + (cos(q(t)) - 1)*N.y

路径的长度可以通过其 length 属性访问。

>>> obstacle_set_pathway.length.simplify()
sqrt(2)*(sqrt(cos(q(t)) + 1) + 2)

路径的扩展速度可以通过其 extension_velocity 属性类似地访问。

>>> obstacle_set_pathway.extension_velocity.simplify()
-sqrt(2)*sin(q(t))*Derivative(q(t), t)/(2*sqrt(cos(q(t)) + 1))
property attachments

定义路径分段路径的一组点。

property extension_velocity

路径扩展速度的精确解析表达式。

property length

路径长度的精确解析表达式。

to_loads(force)[源代码][源代码]

加载由运动方程方法类所需的。

参数:
强制表达式

沿着路径长度作用的力。假设这个 Expr 代表一个膨胀力。

示例

下面的例子展示了如何生成一个执行器在四个点之间沿着障碍路径移动并产生扩展力 F 时的负载。首先,创建一对参考系 AB,在这四个点 pApBpCpD 将被定位。前两个点在参考系 A 中,后两个点在参考系 B 中。参考系 B 还将被定向,使得它通过围绕全局参考系中的轴 N.z 旋转 qA 相关联(N.zA.zB.z 是平行的)。

>>> from sympy.physics.mechanics import (ObstacleSetPathway, Point,
...     ReferenceFrame)
>>> from sympy.physics.vector import dynamicsymbols
>>> q = dynamicsymbols('q')
>>> N = ReferenceFrame('N')
>>> N = ReferenceFrame('N')
>>> A = N.orientnew('A', 'axis', (0, N.x))
>>> B = A.orientnew('B', 'axis', (q, N.z))
>>> pO = Point('pO')
>>> pA, pB, pC, pD = Point('pA'), Point('pB'), Point('pC'), Point('pD')
>>> pA.set_pos(pO, A.x)
>>> pB.set_pos(pO, -A.y)
>>> pC.set_pos(pO, B.y)
>>> pD.set_pos(pO, B.x)
>>> obstacle_set_pathway = ObstacleSetPathway(pA, pB, pC, pD)

现在创建一个符号 F 来描述沿路径产生的(扩张性)力的大小。KanesMethod 所需的载荷列表可以通过调用路径的 to_loads 方法并传递 F 作为唯一参数来生成。

>>> from sympy import Symbol
>>> F = Symbol('F')
>>> obstacle_set_pathway.to_loads(F)
[(pA, sqrt(2)*F/2*A.x + sqrt(2)*F/2*A.y),
 (pB, - sqrt(2)*F/2*A.x - sqrt(2)*F/2*A.y),
 (pB, - F/sqrt(2*cos(q(t)) + 2)*A.y - F/sqrt(2*cos(q(t)) + 2)*B.y),
 (pC, F/sqrt(2*cos(q(t)) + 2)*A.y + F/sqrt(2*cos(q(t)) + 2)*B.y),
 (pC, - sqrt(2)*F/2*B.x + sqrt(2)*F/2*B.y),
 (pD, sqrt(2)*F/2*B.x - sqrt(2)*F/2*B.y)]
class sympy.physics.mechanics.pathway.PathwayBase(*attachments)[源代码][源代码]

所有路径类继承的抽象基类。

属性:
attachments

定义路径端点的两个点。

extension_velocity

表示路径扩展速度的表达式。

length

表示路径长度的表达式。

方法

to_loads(force)

加载由运动方程方法类所需的。

注释

此类实例不能被用户直接实例化。然而,它可以通过子类化来创建自定义路径类型。

property attachments

定义路径端点的两个点。

abstract property extension_velocity

表示路径扩展速度的表达式。

abstract property length

表示路径长度的表达式。

abstract to_loads(force)[源代码][源代码]

加载由运动方程方法类所需的。

class sympy.physics.mechanics.pathway.WrappingPathway(
attachment_1,
attachment_2,
geometry,
)[源代码][源代码]

包装几何对象的路径。

参数:
附件_1

Point 对象对中的第一个对象,环绕路径在此之间展开。

附件_2

成对的 Point 对象中的第二个,包裹路径在此之间延伸。

几何WrappingGeometryBase

路径环绕的几何形状。

属性:
attachments

定义路径端点的两个点。

extension_velocity

路径扩展速度的精确解析表达式。

geometry

路径环绕的几何形状。

length

路径长度的精确解析表达式。

方法

to_loads(force)

加载由运动方程方法类所需的。

示例

>>> from sympy.physics.mechanics import WrappingPathway

要构建一个环绕路径,与其他路径一样,必须传递一对点,然后作为关键字参数传递一个环绕几何类的实例。我们将使用一个半径为 r 且轴平行于 N.x 并通过点 pO 的圆柱体。

>>> from sympy import symbols
>>> from sympy.physics.mechanics import Point, ReferenceFrame, WrappingCylinder
>>> r = symbols('r')
>>> N = ReferenceFrame('N')
>>> pA, pB, pO = Point('pA'), Point('pB'), Point('pO')
>>> cylinder = WrappingCylinder(r, pO, N.x)
>>> wrapping_pathway = WrappingPathway(pA, pB, cylinder)
>>> wrapping_pathway
WrappingPathway(pA, pB, geometry=WrappingCylinder(radius=r, point=pO,
    axis=N.x))
property extension_velocity

路径扩展速度的精确解析表达式。

property geometry

路径环绕的几何形状。

property length

路径长度的精确解析表达式。

to_loads(force)[源代码][源代码]

加载由运动方程方法类所需的。

参数:
强制表达式

沿路径长度作用的力的量级。假设这个 Expr 表示一个扩张力。

示例

下面的示例展示了如何生成在围绕圆柱体产生扩张力 F 的执行器中产生的载荷。首先,创建一个半径为 r 的圆柱体,其轴平行于全局坐标系 NN.z 方向,并且通过点 pO

>>> from sympy import symbols
>>> from sympy.physics.mechanics import (Point, ReferenceFrame,
...     WrappingCylinder)
>>> N = ReferenceFrame('N')
>>> r = symbols('r', positive=True)
>>> pO = Point('pO')
>>> cylinder = WrappingCylinder(r, pO, N.z)

使用 WrappingPathway 类创建执行器的路径,该类定义在两个点 pApB 之间延伸。这两个点都位于圆柱体的表面上,并且 pB 的位置相对于 pA 由动力学符号 q 定义。

>>> from sympy import cos, sin
>>> from sympy.physics.mechanics import WrappingPathway, dynamicsymbols
>>> q = dynamicsymbols('q')
>>> pA = Point('pA')
>>> pB = Point('pB')
>>> pA.set_pos(pO, r*N.x)
>>> pB.set_pos(pO, r*(cos(q)*N.x + sin(q)*N.y))
>>> pB.pos_from(pA)
(r*cos(q(t)) - r)*N.x + r*sin(q(t))*N.y
>>> pathway = WrappingPathway(pA, pB, cylinder)

现在创建一个符号 F 来描述沿路径产生的(扩张性)力的大小。KanesMethod 所需的载荷列表可以通过调用路径的 to_loads 方法并传递 F 作为唯一参数来生成。

>>> F = symbols('F')
>>> loads = pathway.to_loads(F)
>>> [load.__class__(load.location, load.vector.simplify()) for load in loads]
[(pA, F*N.y), (pB, F*sin(q(t))*N.x - F*cos(q(t))*N.y),
 (pO, - F*sin(q(t))*N.x + F*(cos(q(t)) - 1)*N.y)]