运动学 (文档字符串)¶
- 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]]