点的速度
【mechanics】定义了【Point】类,封装了位置、速度、加速度等运动学物理量,但这设置这些物理量时,需要指定相应的坐标框架,示例如下
from sympy.physics.mechanics import Point, ReferenceFrame
from sympy import Symbol, print_latex
p = Point('p')
v = Symbol('v')
N = ReferenceFrame('N')
p.set_vel(N, v * N.y) # 设置速度
print_latex(p.vel(N)) # 返回速度
N表示一个坐标框架,【N.y】为其 y y y轴。【vel】可返回粒子在特定坐标系下的的速度,示例中返回的值为 v n ^ y v\mathbf{\hat{n}_y} vn^y,表示沿着 y y y轴的 v v v。
点的位置
N之时规定了三个坐标轴的方向,但并没有设置原点。为了表示p1的位置,需要创建另一个点作为参考。
O = Point("O")
p.set_pos(O, 10 * N.x)
print_latex(p.pos_from(O))
在设置 p p p点位置时,参考了坐标原点 O O O,在显示 p p p点位置时,同样以 O O O为基准,其值为 10 n ^ x 10\mathbf{\hat{n}_x} 10n^x。
【locatenew】方法可以根据现有点来创建新点,示例如下
q = p.locatenew("q", 10 * N.y)
print_latex(q.pos_from(O))
代码中,以 p p p点为基准创建 q q q点, q q q点相对于 O O O的位置为 10 n ^ x + 10 n ^ y 10\mathbf{\hat{n}_x} + 10\mathbf{\hat{n}_y} 10n^x+10n^y。
速度变换
在处理多个物体的相对运动时,往往涉及到坐标系的变换。设坐标系中 B B B的坐标原点为 O O O, P P P为 B B B中一点,且坐标系 B B B绕 N N N以角速度 ω \omega ω旋转,其旋转半径为 r r r,则 P P P在 N N N中的速度为
v ⃗ N P = v ⃗ B P + v ⃗ N O + ω ⃗ × r ⃗ \vec v^P_N = \vec v^P_B + \vec v^O_N + \vec\omega\times\vec r \\\ vNP=vBP+vNO+ω×r
其中, v ⃗ B P \vec v^P_B vBP为点 P P P在 B B B中的速度; v ⃗ N O \vec v^O_N vNO为坐标系 B B B相对于 N N N的速度。当 P P P在 B B B中固定时,该式变为
v ⃗ N P = v ⃗ N O + ω ⃗ × r ⃗ \vec v^P_N = \vec v^O_N + \vec\omega\times\vec r \\\ vNP=vNO+ω×r
sympy中封装了这两种速度变换方法,分别为【v1pt_theory】和【v2pt_theory】。
from sympy.physics.vector import Point, ReferenceFrame, dynamicsymbols
from sympy import print_latex
q, q2 = dynamicsymbols('q q2')
qd, q2d = dynamicsymbols('q 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)
vTest = P.v1pt_theory(O, N, B)
print_latex(vTest)
B = N.orientnew('B', 'Axis', [q, N.z])
P = O.locatenew('P', 10 * B.x)
O.set_vel(N, 5 * N.x)
vTest = P.v2pt_theory(O, N, B)
print_latex(vTest)
d d t q ( t ) b ^ x + d d t q 2 ( t ) b ^ y − 5 q ( t ) b ^ z 5 n ^ x + 10 d d t q ( t ) b ^ y \frac{d}{d t} q{\left(t \right)}\mathbf{\hat{b}_x} + \frac{d}{d t} q_{2}{\left(t \right)}\mathbf{\hat{b}_y} - 5 q{\left(t \right)}\mathbf{\hat{b}_z}\\ 5\mathbf{\hat{n}_x} + 10 \frac{d}{d t} q{\left(t \right)}\mathbf{\hat{b}_y} dtdq(t)b^x+dtdq2(t)b^y−5q(t)b^z5n^x+10dtdq(t)b^y