pmse_se/or/mod.rs
1//! 刚体 (object rigid) 运动计算
2
3/// (物体) 刚体: 不会形变
4#[derive(Debug, Clone)]
5pub struct ObjR {
6 // + (1) 物体固有物理量
7 /// 质量 (单位: kg)
8 pub m: f32,
9 /// 转动惯量 (单位: kg/m2)
10 pub rm: f32,
11
12 // + (2) 平动物理量
13 /// 位置 (单位: m) (x, y, z)
14 pub x: [f32; 3],
15 /// 速度 (单位: m/s) (x, y, z) None 表示 固定不动 的物体.
16 pub v: Option<[f32; 3]>,
17 /// 加速度 (单位: m/s2) (x, y, z) None 表示 匀速直线运动 的物体.
18 pub a: Option<[f32; 3]>,
19
20 // + (3) 转动物理量
21 /// 角度 (旋转) (单位: rad) (x, y, z)
22 pub r: [f32; 3],
23 /// 角速度 (单位: rad/s) (x, y, z) None 表示 不旋转 的物体.
24 pub rv: Option<[f32; 3]>,
25 /// 角加速度 (单位: rad/s2) (x, y, z) None 表示 匀速旋转 的物体.
26 pub ra: Option<[f32; 3]>,
27
28 // + (4) 加速计算物理量
29 /// 最大半径 (单位: m): 物体任意一点, 距离重心的最大距离.
30 /// None 表示半径为 0.
31 pub cr: Option<f32>,
32 /// 物体的体积 (单位: m3). None 表示体积为 0.
33 pub cv: Option<f32>,
34}
35
36impl Default for ObjR {
37 fn default() -> Self {
38 Self {
39 m: 0.0,
40 rm: 0.0,
41 x: [0.0, 0.0, 0.0],
42 v: None,
43 a: None,
44 r: [0.0, 0.0, 0.0],
45 rv: None,
46 ra: None,
47 cr: None,
48 cv: None,
49 }
50 }
51}
52
53/// 刚体 模拟计算的数值限制 (下限, 上限)
54#[derive(Debug, Clone)]
55pub struct ObjLR {
56 /// 模拟计算的 时间 间隔 (单位: s) [最小值, 最大值]
57 pub t: [f32; 2],
58
59 /// 物体质量 (单位: kg)
60 pub m: [f32; 2],
61 /// 转动惯量 (单位: kg/m2)
62 pub rm: [f32; 2],
63 /// 物体位置坐标值 (单位: m)
64 pub x: [f32; 2],
65 /// 物体的速度 (单位: m/s)
66 pub v: [f32; 2],
67 /// 物体的加速度 (单位: m/s2)
68 pub a: [f32; 2],
69
70 // TODO 角度 (单位: rad) (x, y, z) None 表示不限制.
71 //r: Option<[[f32; 2]; 3]>,
72 /// 角速度 (单位: rad/s)
73 pub rv: [f32; 2],
74 /// 角加速度 (单位: rad/s2)
75 pub ra: [f32; 2],
76}
77
78impl Default for ObjLR {
79 fn default() -> Self {
80 Self {
81 // 模拟计算中允许的时间间隔: 最小 0.001s (1ms), 最大 1s
82 t: [0.001, 1.0],
83 // 允许的物体质量: 最小 0.001kg (1g), 最大 100 万吨 (1Gkg)
84 m: [0.001, 1.0e9],
85 // 允许的物体转动惯量: 最小 1u kg/m2, 最大 1T kg/m2
86 rm: [1.0e-6, 1.0e12],
87 // 允许的物体位置坐标: 最小 1um, 最大 200km.
88 x: [1.0e-6, 2.0e5],
89 // 允许的物体速度: 最小 1um/s, 最大 300m/s.
90 v: [1.0e-6, 300.0],
91 // 允许的物体加速度: 最小 1um/s2, 最大 300km/s.
92 a: [1.0e-6, 3.0e5],
93 // TODO 角度: 不限制.
94 //r: None,
95 // 角速度: 最小 1u rad/s, 最大 10k rad/s.
96 rv: [1.0e-6, 1.0e4],
97 // 角加速度: 最小 1u rad/s2, 最大 100k rad/s2.
98 ra: [1.0e-6, 1.0e5],
99 }
100 }
101}