路径 (文档字符串)¶
执行器使用的路径实现。
- 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
。首先,在全局坐标系N
的x
方向上,创建一个连接两个点的线性执行器,这两个点由坐标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
时的负载。首先,创建一对参考系A
和B
,在这四个点pA
、pB
、pC
和pD
将被定位。前两个点在参考系A
中,后两个点在参考系B
中。参考系B
还将被定向,使得它通过围绕全局参考系中的轴N.z
旋转q
与A
相关联(N.z
、A.z
和B.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¶
表示路径长度的表达式。
- 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
的圆柱体,其轴平行于全局坐标系N
的N.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
类创建执行器的路径,该类定义在两个点pA
和pB
之间延伸。这两个点都位于圆柱体的表面上,并且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)]