运动学 (文档字符串)

class sympy.physics.vector.point.Point(name)[源代码][源代码]

这个对象表示动态系统中的一个点。

它存储了一个点的:位置、速度和加速度。位置是一个向量,定义为从父点到此点的向量距离。

参数:
名称字符串

点的显示名称

方法

a1pt_theory(otherpoint, outframe, interframe)

使用1点理论设置此点的加速度。

a2pt_theory(otherpoint, outframe, fixedframe)

使用两点理论设置此点的加速度。

acc(frame)

此点在参考系中的加速度向量。

locatenew(name, value)

从此点定义的位置创建一个新点。

partial_velocity(frame, *gen_speeds)

返回此点在给定框架中线速度矢量的部分速度,相对于一个或多个提供的广义速度。

pos_from(otherpoint)

返回此点与另一点之间的向量距离。

set_acc(frame, value)

用于设置此点在参考系中的加速度。

set_pos(otherpoint, value)

用于设置此点相对于的位置。

set_vel(frame, value)

设置此点在参考系中的速度向量。

v1pt_theory(otherpoint, outframe, interframe)

根据1点理论设置此点的速度。

v2pt_theory(otherpoint, outframe, fixedframe)

使用两点理论设置此点的速度。

vel(frame)

该点在参考系中的速度向量。

示例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> N = ReferenceFrame('N')
>>> O = Point('O')
>>> P = Point('P')
>>> u1, u2, u3 = dynamicsymbols('u1 u2 u3')
>>> O.set_vel(N, u1 * N.x + u2 * N.y + u3 * N.z)
>>> O.acc(N)
u1'*N.x + u2'*N.y + u3'*N.z

symbols() 可以用来一次性创建多个点,例如:

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> from sympy import symbols
>>> N = ReferenceFrame('N')
>>> u1, u2 = dynamicsymbols('u1 u2')
>>> A, B = symbols('A B', cls=Point)
>>> type(A)
<class 'sympy.physics.vector.point.Point'>
>>> A.set_vel(N, u1 * N.x + u2 * N.y)
>>> B.set_vel(N, u2 * N.x + u1 * N.y)
>>> A.acc(N) - B.acc(N)
(u1' - u2')*N.x + (-u1' + u2')*N.y
a1pt_theory(
otherpoint,
outframe,
interframe,
)[源代码][源代码]

使用1点理论设置此点的加速度。

点加速度的1点理论看起来是这样的:

^N a^P = ^B a^P + ^N a^O + ^N alpha^B x r^OP + ^N omega^B x (^N omega^B x r^OP) + 2 ^N omega^B x ^B v^P

其中 O 是 B 中的一个固定点,P 是 B 中的一个移动点,而 B 在框架 N 中旋转。

参数:
其他要点

1-点理论 (O) 的第一个点

outframe参考框架

我们希望在此点定义加速度的参考系(N)

固定框架参考框架

此计算中的中间帧 (B)

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> q2 = dynamicsymbols('q2')
>>> qd = dynamicsymbols('q', 1)
>>> q2d = dynamicsymbols('q2', 1)
>>> N = ReferenceFrame('N')
>>> B = ReferenceFrame('B')
>>> B.set_ang_vel(N, 5 * B.y)
>>> O = Point('O')
>>> P = O.locatenew('P', q * B.x + q2 * B.y)
>>> P.set_vel(B, qd * B.x + q2d * B.y)
>>> O.set_vel(N, 0)
>>> P.a1pt_theory(O, N, B)
(-25*q + q'')*B.x + q2''*B.y - 10*q'*B.z
a2pt_theory(
otherpoint,
outframe,
fixedframe,
)[源代码][源代码]

使用两点理论设置此点的加速度。

点加速度的2点理论如下所示:

^N a^P = ^N a^O + ^N alpha^B x r^OP + ^N omega^B x (^N omega^B x r^OP)

其中 O 和 P 都是固定在框架 B 中的点,框架 B 在框架 N 中旋转。

参数:
其他要点

2点理论的第一个要点 (O)

outframe参考框架

我们希望在此点定义加速度的参考系(N)

固定框架参考框架

两个点都固定的框架(B)

示例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> qd = dynamicsymbols('q', 1)
>>> N = ReferenceFrame('N')
>>> B = N.orientnew('B', 'Axis', [q, N.z])
>>> O = Point('O')
>>> P = O.locatenew('P', 10 * B.x)
>>> O.set_vel(N, 5 * N.x)
>>> P.a2pt_theory(O, N, B)
- 10*q'**2*B.x + 10*q''*B.y
acc(frame)[源代码][源代码]

此点在参考系中的加速度向量。

参数:
框架参考框架

返回的加速度矢量将被定义的参考系。

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_acc(N, 10 * N.x)
>>> p1.acc(N)
10*N.x
locatenew(name, value)[源代码][源代码]

从此点定义的位置创建一个新点。

参数:
名称str

新点的名称

向量

新点相对于此点的位置

示例

>>> from sympy.physics.vector import ReferenceFrame, Point
>>> N = ReferenceFrame('N')
>>> P1 = Point('P1')
>>> P2 = P1.locatenew('P2', 10 * N.x)
partial_velocity(frame, *gen_speeds)[源代码][源代码]

返回此点在给定框架中线速度矢量的部分速度,相对于一个或多个提供的广义速度。

参数:
框架参考框架

定义速度所用的参考系。

gen_speeds时间的功能

广义速度。

返回:
partial_velocitiesVector 的元组

与提供的广义速度相对应的部分速度矢量。

示例

>>> from sympy.physics.vector import ReferenceFrame, Point
>>> from sympy.physics.vector import dynamicsymbols
>>> N = ReferenceFrame('N')
>>> A = ReferenceFrame('A')
>>> p = Point('p')
>>> u1, u2 = dynamicsymbols('u1, u2')
>>> p.set_vel(N, u1 * N.x + u2 * A.y)
>>> p.partial_velocity(N, u1)
N.x
>>> p.partial_velocity(N, u1, u2)
(N.x, A.y)
pos_from(otherpoint)[源代码][源代码]

返回此点与另一点之间的向量距离。

参数:
其他要点

我们正在相对于另一个点定位这一点

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p2 = Point('p2')
>>> p1.set_pos(p2, 10 * N.x)
>>> p1.pos_from(p2)
10*N.x
set_acc(frame, value)[源代码][源代码]

用于设置此点在参考系中的加速度。

参数:
框架参考框架

定义此点加速度的框架

向量

此点在坐标系中的加速度矢量值

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_acc(N, 10 * N.x)
>>> p1.acc(N)
10*N.x
set_pos(otherpoint, value)[源代码][源代码]

用于设置此点相对于另一点的位置。

参数:
其他要点

这一点相对于这一点位置定义的另一个点

向量

定义此点位置的向量

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p2 = Point('p2')
>>> p1.set_pos(p2, 10 * N.x)
>>> p1.pos_from(p2)
10*N.x
set_vel(frame, value)[源代码][源代码]

设置此点在参考系中的速度向量。

参数:
框架参考框架

定义此点速度的参考系

向量

此点在坐标系中的速度矢量值

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_vel(N, 10 * N.x)
>>> p1.vel(N)
10*N.x
v1pt_theory(
otherpoint,
outframe,
interframe,
)[源代码][源代码]

根据1点理论设置此点的速度。

点速度的1点理论看起来是这样的:

^N v^P = ^B v^P + ^N v^O + ^N omega^B x r^OP

其中 O 是 B 中的一个固定点,P 是 B 中的一个移动点,而 B 在框架 N 中旋转。

参数:
其他要点

1-点理论 (O) 的第一个点

outframe参考框架

我们希望在此点定义速度的参考系 (N)

帧间参考框架

此计算中的中间帧 (B)

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> q2 = dynamicsymbols('q2')
>>> qd = dynamicsymbols('q', 1)
>>> q2d = dynamicsymbols('q2', 1)
>>> N = ReferenceFrame('N')
>>> B = ReferenceFrame('B')
>>> B.set_ang_vel(N, 5 * B.y)
>>> O = Point('O')
>>> P = O.locatenew('P', q * B.x + q2 * B.y)
>>> P.set_vel(B, qd * B.x + q2d * B.y)
>>> O.set_vel(N, 0)
>>> P.v1pt_theory(O, N, B)
q'*B.x + q2'*B.y - 5*q*B.z
v2pt_theory(
otherpoint,
outframe,
fixedframe,
)[源代码][源代码]

使用两点理论设置此点的速度。

点速度的2点理论如下所示:

^N v^P = ^N v^O + ^N omega^B x r^OP

其中 O 和 P 都是固定在框架 B 中的点,框架 B 在框架 N 中旋转。

参数:
其他要点

2点理论的第一个要点 (O)

outframe参考框架

我们希望在此点定义速度的参考系 (N)

固定框架参考框架

两个点都固定的框架(B)

示例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> q = dynamicsymbols('q')
>>> qd = dynamicsymbols('q', 1)
>>> N = ReferenceFrame('N')
>>> B = N.orientnew('B', 'Axis', [q, N.z])
>>> O = Point('O')
>>> P = O.locatenew('P', 10 * B.x)
>>> O.set_vel(N, 5 * N.x)
>>> P.v2pt_theory(O, N, B)
5*N.x + 10*q'*B.y
vel(frame)[源代码][源代码]

该点在参考系中的速度向量。

参数:
框架参考框架

返回的速度矢量将定义在其中的框架

示例

>>> from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
>>> N = ReferenceFrame('N')
>>> p1 = Point('p1')
>>> p1.set_vel(N, 10 * N.x)
>>> p1.vel(N)
10*N.x

如果可能,速度将自动计算,否则将返回 ValueError 。如果可以从相对点计算出多个不同的速度,则将使用最直接相对于此点的点。在点之间的相对位置不一致的情况下,可能会返回错误的速度。用户有责任以自洽的方式定义点之间的先前相对位置和速度。

>>> p = Point('p')
>>> q = dynamicsymbols('q')
>>> p.set_vel(N, 10 * N.x)
>>> p2 = Point('p2')
>>> p2.set_pos(p, q*N.x)
>>> p2.vel(N)
(Derivative(q(t), t) + 10)*N.x

运动学方程

sympy.physics.vector.functions.get_motion_params(frame, **kwargs)[源代码][源代码]

返回在给定框架中作为时间矢量函数的三种运动参数 - (加速度、速度和位置)。

如果提供了高阶微分函数,则使用低阶函数作为边界条件。例如,给定加速度,则速度和位置参数被视为边界条件。

指定边界条件的时间值取自 timevalue1(用于位置边界条件)和 timevalue2(用于速度边界条件)。

如果未提供任何边界条件,则默认情况下它们为零(在向量输入的情况下为零向量)。如果边界条件也是时间的函数,则通过在dynamicsymbols._t时间符号中代入时间值,将其转换为常数。

此函数也可用于计算旋转运动参数。请查看参数和示例以获得更清晰的了解。

参数:
框架参考框架

表达运动参数的框架

加速度向量

物体/框架的加速度作为时间的函数

速度向量

速度作为时间的函数或作为时间 = timevalue1 时的速度边界条件

位置向量

速度作为时间的函数或作为时间 = timevalue1 时的速度边界条件

时间值1sympyfiable

位置边界条件的时间值

timevalue2sympyfiable

速度边界条件的`时间值`

示例

>>> from sympy.physics.vector import ReferenceFrame, get_motion_params, dynamicsymbols
>>> from sympy.physics.vector import init_vprinting
>>> init_vprinting(pretty_print=False)
>>> from sympy import symbols
>>> R = ReferenceFrame('R')
>>> v1, v2, v3 = dynamicsymbols('v1 v2 v3')
>>> v = v1*R.x + v2*R.y + v3*R.z
>>> get_motion_params(R, position = v)
(v1''*R.x + v2''*R.y + v3''*R.z, v1'*R.x + v2'*R.y + v3'*R.z, v1*R.x + v2*R.y + v3*R.z)
>>> a, b, c = symbols('a b c')
>>> v = a*R.x + b*R.y + c*R.z
>>> get_motion_params(R, velocity = v)
(0, a*R.x + b*R.y + c*R.z, a*t*R.x + b*t*R.y + c*t*R.z)
>>> parameters = get_motion_params(R, acceleration = v)
>>> parameters[1]
a*t*R.x + b*t*R.y + c*t*R.z
>>> parameters[2]
a*t**2/2*R.x + b*t**2/2*R.y + c*t**2/2*R.z
sympy.physics.vector.functions.kinematic_equations(
speeds,
coords,
rot_type,
rot_order='',
)[源代码][源代码]

给出与旋转类型相关的 qdot 到 u 的方程。

提供旋转类型和顺序,如在 orient 中。速度假定为体固定的;如果我们通过 rot_type 定义 B 在 A 中的方向,则 B 在 A 中的角速度假定为以下形式:speed[0]*B.x + speed[1]*B.y + speed[2]*B.z

参数:
速度长度为 3 的列表

体固定角速度测量数值。

坐标长度为3或4的列表

用于定义两个框架方向的坐标。

rot_typestr

用于创建方程的旋转类型。仅限 Body、Space 或 Quaternion。

rot_orderstr 或 int

如果适用,一系列旋转的顺序。

示例

>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import kinematic_equations, vprint
>>> u1, u2, u3 = dynamicsymbols('u1 u2 u3')
>>> q1, q2, q3 = dynamicsymbols('q1 q2 q3')
>>> vprint(kinematic_equations([u1,u2,u3], [q1,q2,q3], 'body', '313'),
...     order=None)
[-(u1*sin(q3) + u2*cos(q3))/sin(q2) + q1', -u1*cos(q3) + u2*sin(q3) + q2', (u1*sin(q3) + u2*cos(q3))*cos(q2)/sin(q2) - u3 + q3']
sympy.physics.vector.functions.partial_velocity(vel_vecs, gen_speeds, frame)[源代码][源代码]

返回在给定参考系中,相对于提供的广义速度的每个给定速度矢量的部分速度列表。

输出是一个列表的列表。外层列表的元素数量等于提供的速度向量的数量。内层列表是,对于每个速度向量,该速度向量相对于提供的广义速度的偏导数。

参数:
速度向量可迭代对象

速度向量(角速度或线速度)的可迭代对象。

gen_speeds可迭代对象

广义速度的可迭代对象。

框架参考框架

偏导数将要被取的参考系。

示例

>>> from sympy.physics.vector import Point, ReferenceFrame
>>> from sympy.physics.vector import dynamicsymbols
>>> from sympy.physics.vector import partial_velocity
>>> u = dynamicsymbols('u')
>>> N = ReferenceFrame('N')
>>> P = Point('P')
>>> P.set_vel(N, u * N.x)
>>> vel_vecs = [P.vel(N)]
>>> gen_speeds = [u]
>>> partial_velocity(vel_vecs, gen_speeds, N)
[[N.x]]