aTx[t_] = 3;
aTy[t_] = 3;
aTz[t_] = 3;
alphaX[t_] = 3;
alphaY[t_] = 3;
alphaZ[t_] = 3;
\[Omega]x0 = 1;
\[Omega]y0 = 1;
\[Omega]z0 = 1;
(*定义平动加速度和转动角加速度函数*)
aT[t_] = {aTx[t], aTy[t], aTz[t]} ;(*平动加速度函数,这里aTx,aTy,aTz是自定义函数*)
alpha[t_] = {alphaX[t], alphaY[t],
alphaZ[t]} ;(*角加速度函数,这里alphaX,alphaY,alphaZ是自定义函数*)
(*初始化条件*)
v0 = {0, 0, 0}; (*初始平动速度*)
q0 = {1, 0, 0, 0}; (*初始四元数,表示无旋转*)
r0 = {0, 0, 0}; (*坐标系b原点初始位置*)
omega0 = {\[Omega]x0, \[Omega]y0, \[Omega]z0};
(*通过积分得到平动速度和平动位置*)
vT[t_] = Integrate[aT[s], {s, 0, t}] + v0;
rT[t_] = Integrate[vT[s], {s, 0, t}] + r0;
(*通过积分得到角速度和四元数随时间的变化*)
omega[t_] = Integrate[alpha[s], {s, 0, t}] + omega0;
quaternion[t_] = Module[{q, omegaVec, dt = 0.01}, q = q0;
For[i = 0, i < t/dt, i++, omegaVec = omega[i*dt];
qDot =
0.5*QuaternionMultiply[q,
Quaternion[0, omegaVec[[1]], omegaVec[[2]], omegaVec[[3]]]];
q = q + qDot*dt;
q = q/Norm[q]]; q];
(*定义一个函数来获取系b相对于系a的坐标轴方向*)
getAxesDirections[t_] =
Module[{q = quaternion[t], axes},
axes = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
axes =
Table[QuaternionMultiply[q,
QuaternionMultiply[
Quaternion[0, axes[[i, 1]], axes[[i, 2]], axes[[i, 3]]],
InverseQuaternion[q]]][[2 ;; 4]], {i, 3}];
axes]
(*可视化运动*)
(* Manipulate[Graphics3D[{(*绘制系a*)Arrow[{{0,0,0},{1,0,0}}],Arrow[{{0,\
0,0},{0,1,0}}],Arrow[{{0,0,0},{0,0,1}}],PointSize[Large],Point[{0,0,0}\
],(*绘制系b*)Arrow[{rT[t],rT[t]+getAxesDirections[t][[1]]}],Arrow[{rT[t],\
rT[t]+getAxesDirections[t][[2]]}],Arrow[{rT[t],rT[t]+\
getAxesDirections[t][[3]]}],PointSize[Large],Point[rT[t]]},Axes->True]\
,{t,0,10,0.1}] *)
我的待解决问题描述是:
一个运动状态比较复杂的非惯性系系b,对静止系系a存在平动的同时又存在转动。系b在转动上对自己原点转动的转轴也在时刻发生变化,其转动角速度矢量对时间的一阶导可通过前面的步骤设定;同时,系b在三维平动上也存在一个空间加速度可通过前面步骤设定。分别用一个原点和三条互相垂直、交于原点一点的射线表示系a和系b。要求,对于变换输入前面描述的平动和转动加速度对时间的函数信息,绘制出相应系b在静止系系a参考下对时间t变化的可视化运动图。


aTy[t_] = 3;
aTz[t_] = 3;
alphaX[t_] = 3;
alphaY[t_] = 3;
alphaZ[t_] = 3;
\[Omega]x0 = 1;
\[Omega]y0 = 1;
\[Omega]z0 = 1;
(*定义平动加速度和转动角加速度函数*)
aT[t_] = {aTx[t], aTy[t], aTz[t]} ;(*平动加速度函数,这里aTx,aTy,aTz是自定义函数*)
alpha[t_] = {alphaX[t], alphaY[t],
alphaZ[t]} ;(*角加速度函数,这里alphaX,alphaY,alphaZ是自定义函数*)
(*初始化条件*)
v0 = {0, 0, 0}; (*初始平动速度*)
q0 = {1, 0, 0, 0}; (*初始四元数,表示无旋转*)
r0 = {0, 0, 0}; (*坐标系b原点初始位置*)
omega0 = {\[Omega]x0, \[Omega]y0, \[Omega]z0};
(*通过积分得到平动速度和平动位置*)
vT[t_] = Integrate[aT[s], {s, 0, t}] + v0;
rT[t_] = Integrate[vT[s], {s, 0, t}] + r0;
(*通过积分得到角速度和四元数随时间的变化*)
omega[t_] = Integrate[alpha[s], {s, 0, t}] + omega0;
quaternion[t_] = Module[{q, omegaVec, dt = 0.01}, q = q0;
For[i = 0, i < t/dt, i++, omegaVec = omega[i*dt];
qDot =
0.5*QuaternionMultiply[q,
Quaternion[0, omegaVec[[1]], omegaVec[[2]], omegaVec[[3]]]];
q = q + qDot*dt;
q = q/Norm[q]]; q];
(*定义一个函数来获取系b相对于系a的坐标轴方向*)
getAxesDirections[t_] =
Module[{q = quaternion[t], axes},
axes = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
axes =
Table[QuaternionMultiply[q,
QuaternionMultiply[
Quaternion[0, axes[[i, 1]], axes[[i, 2]], axes[[i, 3]]],
InverseQuaternion[q]]][[2 ;; 4]], {i, 3}];
axes]
(*可视化运动*)
(* Manipulate[Graphics3D[{(*绘制系a*)Arrow[{{0,0,0},{1,0,0}}],Arrow[{{0,\
0,0},{0,1,0}}],Arrow[{{0,0,0},{0,0,1}}],PointSize[Large],Point[{0,0,0}\
],(*绘制系b*)Arrow[{rT[t],rT[t]+getAxesDirections[t][[1]]}],Arrow[{rT[t],\
rT[t]+getAxesDirections[t][[2]]}],Arrow[{rT[t],rT[t]+\
getAxesDirections[t][[3]]}],PointSize[Large],Point[rT[t]]},Axes->True]\
,{t,0,10,0.1}] *)
我的待解决问题描述是:
一个运动状态比较复杂的非惯性系系b,对静止系系a存在平动的同时又存在转动。系b在转动上对自己原点转动的转轴也在时刻发生变化,其转动角速度矢量对时间的一阶导可通过前面的步骤设定;同时,系b在三维平动上也存在一个空间加速度可通过前面步骤设定。分别用一个原点和三条互相垂直、交于原点一点的射线表示系a和系b。要求,对于变换输入前面描述的平动和转动加速度对时间的函数信息,绘制出相应系b在静止系系a参考下对时间t变化的可视化运动图。

