🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Dimension.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include <string>
25
26AST_NAMESPACE_BEGIN
27
28typedef uint32_t dimension_t;
29enum class EDimension: dimension_t;
30constexpr size_t sizeof_dimension = sizeof(EDimension);
31constexpr size_t bits_of_dimension = sizeof_dimension * 8;
32
33
34#define _AST_DIM_EXP_OPBIN(value1, value2, op) \
35 (unsigned(( dim_get_exponent(value1, 0) op dim_get_exponent(value2, 0)) & 0xF) << 0) | \
36 (unsigned(( dim_get_exponent(value1, 1) op dim_get_exponent(value2, 1)) & 0xF) << 4) | \
37 (unsigned(( dim_get_exponent(value1, 2) op dim_get_exponent(value2, 2)) & 0xF) << 8) | \
38 (unsigned(( dim_get_exponent(value1, 3) op dim_get_exponent(value2, 3)) & 0xF) << 12) | \
39 (unsigned(( dim_get_exponent(value1, 4) op dim_get_exponent(value2, 4)) & 0xF) << 16) | \
40 (unsigned(( dim_get_exponent(value1, 5) op dim_get_exponent(value2, 5)) & 0xF) << 20) | \
41 (unsigned(( dim_get_exponent(value1, 6) op dim_get_exponent(value2, 6)) & 0xF) << 24) | \
42 (unsigned(( dim_get_exponent(value1, 7) op dim_get_exponent(value2, 7)) & 0xF) << 28)
43
44
45#define _AST_DIM_EXP_TIMES(value, times)\
46 (unsigned(( dim_get_exponent(value, 0) * times) & 0xF) << 0) | \
47 (unsigned(( dim_get_exponent(value, 1) * times) & 0xF) << 4) | \
48 (unsigned(( dim_get_exponent(value, 2) * times) & 0xF) << 8) | \
49 (unsigned(( dim_get_exponent(value, 3) * times) & 0xF) << 12) | \
50 (unsigned(( dim_get_exponent(value, 4) * times) & 0xF) << 16) | \
51 (unsigned(( dim_get_exponent(value, 5) * times) & 0xF) << 20) | \
52 (unsigned(( dim_get_exponent(value, 6) * times) & 0xF) << 24) | \
53 (unsigned(( dim_get_exponent(value, 7) * times) & 0xF) << 28)
54
55
56#ifdef A_CXX14
57# define _AST_DIM_USE_CXX14
58#endif
59
61template<typename T>
62constexpr int dim_get_exponent(T dimension, int idx) noexcept
63{
64 static_assert(sizeof(T) == sizeof(EDimension), "size not correct");
65 return (int((unsigned)dimension << (bits_of_dimension - 4 - idx * 4)) >> (bits_of_dimension - 4)); // 先逻辑左移,再算数右移
66}
67
69template<typename T>
70A_CONSTEXPR_CXX14 inline EDimension dim_set_exponent(T dimension, int idx, int exponent) noexcept
71{
72 static_assert(sizeof(T) == sizeof(EDimension), "size not correct");
73 // @todo 检查指数范围(4位有符号数范围:-8到7)
74 // if (exponent < -8 || exponent > 7) {
75 // //throw std::out_of_range("Exponent must be between -8 and 7");
76 // }
77 dimension_t value = (dimension_t) dimension;
78 int shift = static_cast<int>(idx) * 4;
79 int mask = 0xF << shift;
80 dimension_t newValue = value & ~mask; // 清除原值
81 // 将指数转换为4位有符号表示
82 int expBits = exponent & 0xF;
83 newValue |= (expBits << shift); // 设置新值
84
85 return (EDimension)newValue;
86}
87
88
90template<typename T>
91constexpr int dim_get_sum_abs_exponent(T dimension) noexcept
92{
93#if defined(_AST_DIM_USE_CXX14)
94 int sum = 0;
95 for (int i = 0; i < 8; ++i) {
96 sum += std::abs(dim_get_exponent(dimension, i));
97 }
98 return sum;
99#else
100 return std::abs(dim_get_exponent(dimension, 0)) +
101 std::abs(dim_get_exponent(dimension, 1)) +
102 std::abs(dim_get_exponent(dimension, 2)) +
103 std::abs(dim_get_exponent(dimension, 3)) +
104 std::abs(dim_get_exponent(dimension, 4)) +
105 std::abs(dim_get_exponent(dimension, 5)) +
106 std::abs(dim_get_exponent(dimension, 6)) +
107 std::abs(dim_get_exponent(dimension, 7));
108#endif
109}
110
112template<typename T>
113constexpr dimension_t dim_product(T dim1, T dim2) noexcept
114{
115 #if defined(_AST_DIM_USE_CXX14)
116 static_assert(sizeof(T) == sizeof(EDimension), "size not correct");
117 const size_t size = sizeof(T) * 8;
118 dimension_t result = 0;
119 dimension_t value1 = (dimension_t)dim1;
120 dimension_t value2 = (dimension_t)dim2;
121
122 // 对每个量纲分别处理
123 for (int i = 0; i < 8; ++i) {
124 int shift = i * 4;
125 // 提取两个操作数的指数
126 int exp1 = (int((unsigned)value1 << (size - 4 - shift)) >> (size - 4)); // 先逻辑左移,再算数右移
127 int exp2 = (int((unsigned)value2 << (size - 4 - shift)) >> (size - 4)); // 先逻辑左移,再算数右移
128
129 // 指数相加
130 int sum = exp1 + exp2;
131
132 // @todo 检查是否溢出(4位有符号数范围:-8到7)
133 // if (sum < -8 || sum > 7) {
134 // //throw std::overflow_error("Exponent overflow in multiplication");
135 // }
136
137 // 转换回4位表示
138 int sumBits = sum & 0xF;
139 result |= (sumBits << shift);
140 }
141
142 return result;
143 #else
144 return _AST_DIM_EXP_OPBIN(dim1, dim2, +);
145 #endif
146}
147
148// 量纲除法
149template<typename T>
150constexpr dimension_t dim_divide(T dim1, T dim2) noexcept
151{
152 #if defined(_AST_DIM_USE_CXX14)
153 static_assert(sizeof(T) == sizeof(EDimension), "size not correct");
154 const size_t size = sizeof(T) * 8;
155 dimension_t result = 0;
156 dimension_t value1 = (dimension_t)dim1;
157 dimension_t value2 = (dimension_t)dim2;
158
159
160 // 对每个量纲分别处理
161 for (int i = 0; i < 8; ++i) {
162 int shift = i * 4;
163 // 提取两个操作数的指数
164 int exp1 = (int((unsigned)value1 << (size - 4 - shift)) >> (size - 4)); // 先逻辑左移,再算数右移
165 int exp2 = (int((unsigned)value2 << (size - 4 - shift)) >> (size - 4)); // 先逻辑左移,再算数右移
166
167 // 指数相减
168 int diff = exp1 - exp2;
169
170 // @todo 检查是否溢出
171 // if (diff < -8 || diff > 7) {
172 // // throw std::overflow_error("Exponent overflow in division");
173 // }
174
175 // 转换回4位表示
176 int diffBits = diff & 0xF;
177 result |= (diffBits << shift);
178 }
179
180 return result;
181 #else
182 return _AST_DIM_EXP_OPBIN(dim1, dim2, -);
183 #endif
184}
185
187template<typename T>
188constexpr dimension_t dim_pow(T dimension, int n) noexcept
189{
190 #if defined(_AST_DIM_USE_CXX14)
191 static_assert(sizeof(T) == sizeof(EDimension), "size not correct");
192 const size_t size = sizeof(T) * 8;
193 dimension_t result = 0;
194 dimension_t value = (dimension_t)dimension;
195
196 for (int i = 0; i < 8; ++i) {
197 int shift = i * 4;
198 int exp = (int((unsigned)value << (size - 4 - shift)) >> (size - 4)); // 先逻辑左移,再算数右移
199
200 int newExp = exp * n;
201
202 // @todo 检查是否溢出
203 // if (newExp < -8 || newExp > 7) {
204 // throw std::overflow_error("Exponent overflow in power operation");
205 // }
206
207 int newExpBits = newExp & 0xF;
208 result |= (newExpBits << shift);
209 }
210
211 return result;
212 #else
213 return _AST_DIM_EXP_TIMES(dimension, n);
214 #endif
215}
216
217
218template<typename T>
219constexpr dimension_t dim_invert(T dimension) noexcept
220{
221 return dim_pow(dimension, -1);
222}
223
225constexpr EDimension operator *(EDimension dim1, EDimension dim2) noexcept
226{
227 return (EDimension)dim_product(dim1, dim2);
228}
229
231constexpr EDimension operator/(EDimension dim1, EDimension dim2) noexcept
232{
233 return (EDimension)dim_divide(dim1, dim2);
234}
235
236namespace internal
237{
239constexpr EDimension pow(EDimension dimension, int n) noexcept
240{
241 return (EDimension)dim_pow(dimension, n);
242}
243};
244
245// @brief 量纲索引枚举类
246enum
247{
248 kIdxMass,
249 kIdxLength,
250 kIdxAngle,
251 kIdxTime,
252 kIdxTemperature,
253 kIdxCurrent,
254 kIdxAmount,
255 kIdxLuminous,
256};
257
258namespace dimensions
259{
260 constexpr dimension_t kUnit = 0;
261
262 // 基本量纲 7个
263 constexpr dimension_t kLength = 1 << kIdxLength * 4;
264 constexpr dimension_t kMass = 1 << kIdxMass * 4;
265 constexpr dimension_t kTime = 1 << kIdxTime * 4;
266 constexpr dimension_t kCurrent = 1 << kIdxCurrent * 4;
267 constexpr dimension_t kTemperature = 1 << kIdxTemperature * 4;
268 constexpr dimension_t kAmount = 1 << kIdxAmount * 4;
269 constexpr dimension_t kLuminous = 1 << kIdxLuminous * 4;
270 // 辅助量纲
271 constexpr dimension_t kAngle = 1 << kIdxAngle * 4;
272
273 // 导出量纲(由基本量纲组合而成)
274 constexpr dimension_t kAngVel = dim_divide(kAngle, kTime);
275 constexpr dimension_t kAngularVelocity = kAngVel;
276
277 // 导出量纲(由基本量纲组合而成)
278 constexpr dimension_t kArea = dim_product(kLength, kLength);
279 constexpr dimension_t kVolume = dim_product(kArea, kLength);
280 constexpr dimension_t kSpeed = dim_divide(kLength, kTime);
281 constexpr dimension_t kAcceleration = dim_divide(kSpeed, kTime);
282 constexpr dimension_t kForce = dim_product(kMass, kAcceleration);
283 constexpr dimension_t kPressure = dim_divide(kForce, kArea);
284 constexpr dimension_t kEnergy = dim_product(kForce, kLength);
285 constexpr dimension_t kPower = dim_divide(kEnergy, kTime);
286 constexpr dimension_t kFrequency = dim_divide(kUnit, kTime);
287};
288
292typedef enum class EDimension : dimension_t
293{
294 eUnit = dimensions::kUnit,
295
296 // 基本量纲 7个
297 eLength = dimensions::kLength,
298 eMass = dimensions::kMass,
299 eTime = dimensions::kTime,
300 eCurrent = dimensions::kCurrent,
301 eTemperature = dimensions::kTemperature,
302 eAmount = dimensions::kAmount,
303 eLuminous = dimensions::kLuminous,
304 // 辅助量纲
305 eAngle = dimensions::kAngle,
306
307 //
308 eAngVel = dimensions::kAngVel,
309 eAngularVelocity = dimensions::kAngularVelocity,
310
311 // 导出量纲(由基本量纲组合而成)
312 eArea = dimensions::kArea,
313 eVolume = dimensions::kVolume,
314 eSpeed = dimensions::kSpeed,
315 eAcceleration = dimensions::kAcceleration,
316 eForce = dimensions::kForce,
317 ePressure = dimensions::kPressure,
318 eEnergy = dimensions::kEnergy,
319 ePower = dimensions::kPower,
320 eFrequency = dimensions::kFrequency,
321
322} AEDimension;
323
324
325
327AST_UTIL_API std::string aDimName(EDimension dimension);
328
330AST_UTIL_API std::string aDimSymbol(EDimension dimension);
331
333A_CONSTEXPR_CXX14 inline bool aDimIsBase(EDimension dimension) noexcept
334{
335 return dim_get_sum_abs_exponent(dimension) == 1;
336}
337
339A_CONSTEXPR_CXX14 inline bool aDimIsDerived(EDimension dimension) noexcept
340{
341 return dim_get_sum_abs_exponent(dimension) > 1;
342}
343
345A_CONSTEXPR_CXX14 inline bool aDimIsUnit(EDimension dimension) noexcept
346{
347 return dimension == EDimension::eUnit;
348}
349
350
351
354{
355public:
357 constexpr Dimension() noexcept: dimension_(EDimension::eUnit) {}
358
360 constexpr Dimension(EDimension dimension) noexcept: dimension_(dimension) {}
361
363 static constexpr Dimension Unit() { return Dimension(EDimension::eUnit); }
365 static constexpr Dimension Length() { return Dimension(EDimension::eLength); }
367 static constexpr Dimension Mass() { return Dimension(EDimension::eMass); }
369 static constexpr Dimension Time() { return Dimension(EDimension::eTime); }
371 static constexpr Dimension Current() { return Dimension(EDimension::eCurrent); }
373 static constexpr Dimension Temperature() { return Dimension(EDimension::eTemperature); }
375 static constexpr Dimension Amount() { return Dimension(EDimension::eAmount); }
377 static constexpr Dimension Luminous() { return Dimension(EDimension::eLuminous); }
379 static constexpr Dimension Angle() { return Dimension(EDimension::eAngle); }
381 static constexpr Dimension AngVel() noexcept{ return Dimension(EDimension::eAngVel); }
383 static constexpr Dimension AngularVelocity() noexcept{ return Dimension(EDimension::eAngularVelocity); }
385 static constexpr Dimension Area() noexcept{ return Dimension(EDimension::eArea); }
387 static constexpr Dimension Volume() noexcept{ return Dimension(EDimension::eVolume); }
389 static constexpr Dimension Speed() noexcept{ return Dimension(EDimension::eSpeed); }
391 static constexpr Dimension Acceleration() noexcept{ return Dimension(EDimension::eAcceleration); }
393 static constexpr Dimension Pressure() noexcept{ return Dimension(EDimension::ePressure); }
395 static constexpr Dimension Energy() noexcept{ return Dimension(EDimension::eEnergy); }
397 static constexpr Dimension Power() noexcept{ return Dimension(EDimension::ePower); }
399 static constexpr Dimension Frequency() noexcept { return Dimension(EDimension::eFrequency); }
401 static constexpr Dimension Force() noexcept{ return Dimension(EDimension::eForce); }
402public:
404 std::string name() const { return aDimName(value()); }
406 std::string symbol() const { return aDimSymbol(value()); }
408 A_CONSTEXPR_CXX14 bool isBase() const noexcept { return aDimIsBase(value()); }
410 A_CONSTEXPR_CXX14 bool isDerived() const noexcept { return aDimIsDerived(value()); }
412 A_CONSTEXPR_CXX14 bool isUnit() const noexcept { return aDimIsUnit(value()); }
413public:
415 A_CONSTEXPR_CXX14 Dimension pow(int n) const noexcept
416 {
417 return EDimension(dim_pow(value(), n));
418 }
420 A_CONSTEXPR_CXX14 Dimension invert() const noexcept
421 {
422 return EDimension(dim_invert(value()));
423 }
425 A_CONSTEXPR_CXX14 Dimension operator*(Dimension other) const noexcept
426 {
427 return value() * other.value();
428 }
430 A_CONSTEXPR_CXX14 Dimension& operator*=(Dimension other) noexcept
431 {
432 this->dimension_ = value() * other.value();
433 return *this;
434 }
436 A_CONSTEXPR_CXX14 Dimension operator/(Dimension other) const noexcept
437 {
438 return value() / other.value();
439 }
441 A_CONSTEXPR_CXX14 Dimension& operator/=(Dimension other) noexcept
442 {
443 this->dimension_ = value() / other.value();
444 return *this;
445 }
447 A_CONSTEXPR_CXX14 bool operator==(Dimension other) const noexcept
448 {
449 return value() == other.value();
450 }
452 A_CONSTEXPR_CXX14 bool operator!=(Dimension other) const noexcept
453 {
454 return value() != other.value();
455 }
456 A_CONSTEXPR_CXX14 bool operator==(EDimension other) const noexcept
457 {
458 return value() == other;
459 }
460 A_CONSTEXPR_CXX14 bool operator!=(EDimension other) const noexcept
461 {
462 return value() != other;
463 }
464public:
466 A_CONSTEXPR_CXX14 operator EDimension() const noexcept { return dimension_; }
468 A_CONSTEXPR_CXX14 EDimension value() const noexcept { return dimension_; }
470 A_CONSTEXPR_CXX14 int getMass() const noexcept { return dim_get_exponent(dimension_, kIdxMass); }
472 A_CONSTEXPR_CXX14 int getLength() const noexcept { return dim_get_exponent(dimension_, kIdxLength);}
474 A_CONSTEXPR_CXX14 int getTime() const noexcept { return dim_get_exponent(dimension_, kIdxTime);}
476 A_CONSTEXPR_CXX14 int getCurrent() const noexcept { return dim_get_exponent(dimension_, kIdxCurrent);}
478 A_CONSTEXPR_CXX14 int getAngle() const noexcept { return dim_get_exponent(dimension_, kIdxAngle);}
480 A_CONSTEXPR_CXX14 int getTemperature() const noexcept { return dim_get_exponent(dimension_, kIdxTemperature);}
482 A_CONSTEXPR_CXX14 int getAmount() const noexcept { return dim_get_exponent(dimension_, kIdxAmount);}
484 A_CONSTEXPR_CXX14 int getLuminous() const noexcept { return dim_get_exponent(dimension_, kIdxLuminous);}
485
487 A_CONSTEXPR_CXX14 Dimension& setMass(int n) noexcept
488 {
489 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxMass, n);
490 return *this;
491 }
493 A_CONSTEXPR_CXX14 Dimension& setLength(int n) noexcept
494 {
495 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxLength, n);
496 return *this;
497 }
499 A_CONSTEXPR_CXX14 Dimension& setTime(int n) noexcept
500 {
501 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxTime, n);
502 return *this;
503 }
505 A_CONSTEXPR_CXX14 Dimension& setCurrent(int n) noexcept
506 {
507 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxCurrent, n);
508 return *this;
509 }
511 A_CONSTEXPR_CXX14 Dimension& setAngle(int n) noexcept
512 {
513 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxAngle, n);
514 return *this;
515 }
517 A_CONSTEXPR_CXX14 Dimension& setTemperature(int n) noexcept
518 {
519 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxTemperature, n);
520 return *this;
521 }
523 A_CONSTEXPR_CXX14 Dimension& setAmount(int n) noexcept
524 {
525 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxAmount, n);
526 return *this;
527 }
529 A_CONSTEXPR_CXX14 Dimension& setLuminous(int n) noexcept
530 {
531 dimension_ = (EDimension)dim_set_exponent(dimension_, kIdxLuminous, n);
532 return *this;
533 }
534protected:
535 EDimension dimension_;
536};
537
538namespace internal{
540 A_CONSTEXPR_CXX14 inline Dimension pow(Dimension dim, int n)
541 {
542 return (EDimension)dim_pow(dim.value(), n);
543 }
544}
545
546AST_NAMESPACE_END
constexpr EDimension pow(EDimension dimension, int n) noexcept
量纲指数幂运算符
定义 Dimension.hpp:239
量纲
定义 Dimension.hpp:354
A_CONSTEXPR_CXX14 Dimension & setAmount(int n) noexcept
设置量纲中的物质量维度
定义 Dimension.hpp:523
static constexpr Dimension Volume() noexcept
获取体积量纲
定义 Dimension.hpp:387
constexpr Dimension() noexcept
默认构造函数,默认单位量纲
定义 Dimension.hpp:357
A_CONSTEXPR_CXX14 Dimension & operator/=(Dimension other) noexcept
量纲除法赋值运算符
定义 Dimension.hpp:441
static constexpr Dimension Area() noexcept
获取面积量纲
定义 Dimension.hpp:385
static constexpr Dimension AngVel() noexcept
获取角速度量纲
定义 Dimension.hpp:381
A_CONSTEXPR_CXX14 bool isBase() const noexcept
判断量纲是否为基本量纲
定义 Dimension.hpp:408
A_CONSTEXPR_CXX14 int getCurrent() const noexcept
获取量纲中的电流维度
定义 Dimension.hpp:476
A_CONSTEXPR_CXX14 EDimension value() const noexcept
获取量纲的值
定义 Dimension.hpp:468
static constexpr Dimension Angle()
获取角度量纲
定义 Dimension.hpp:379
A_CONSTEXPR_CXX14 int getMass() const noexcept
获取量纲中的质量维度
定义 Dimension.hpp:470
static constexpr Dimension Frequency() noexcept
获取频率量纲
定义 Dimension.hpp:399
A_CONSTEXPR_CXX14 Dimension & setTime(int n) noexcept
设置量纲中的时间维度
定义 Dimension.hpp:499
static constexpr Dimension Speed() noexcept
获取速度量纲
定义 Dimension.hpp:389
A_CONSTEXPR_CXX14 bool operator!=(Dimension other) const noexcept
量纲不相等运算符
定义 Dimension.hpp:452
static constexpr Dimension Current()
获取电流量纲
定义 Dimension.hpp:371
A_CONSTEXPR_CXX14 Dimension invert() const noexcept
量纲倒数
定义 Dimension.hpp:420
A_CONSTEXPR_CXX14 Dimension & setMass(int n) noexcept
设置量纲中的质量维度
定义 Dimension.hpp:487
A_CONSTEXPR_CXX14 Dimension & setLuminous(int n) noexcept
设置量纲中的发光强度维度
定义 Dimension.hpp:529
A_CONSTEXPR_CXX14 int getTemperature() const noexcept
获取量纲中的温度维度
定义 Dimension.hpp:480
A_CONSTEXPR_CXX14 int getLuminous() const noexcept
获取量纲中的发光强度维度
定义 Dimension.hpp:484
A_CONSTEXPR_CXX14 int getTime() const noexcept
获取量纲中的时间维度
定义 Dimension.hpp:474
A_CONSTEXPR_CXX14 bool isUnit() const noexcept
判断量纲是否为单位量纲
定义 Dimension.hpp:412
static constexpr Dimension Energy() noexcept
获取能量量纲
定义 Dimension.hpp:395
static constexpr Dimension Mass()
获取质量量纲
定义 Dimension.hpp:367
A_CONSTEXPR_CXX14 Dimension operator*(Dimension other) const noexcept
量纲乘法运算符
定义 Dimension.hpp:425
std::string name() const
获取量纲的名称
定义 Dimension.hpp:404
static constexpr Dimension Power() noexcept
获取功率量纲
定义 Dimension.hpp:397
A_CONSTEXPR_CXX14 Dimension & operator*=(Dimension other) noexcept
量纲乘法赋值运算符
定义 Dimension.hpp:430
std::string symbol() const
获取量纲的符号
定义 Dimension.hpp:406
static constexpr Dimension Pressure() noexcept
获取压力量纲
定义 Dimension.hpp:393
A_CONSTEXPR_CXX14 Dimension & setCurrent(int n) noexcept
设置量纲中的电流维度
定义 Dimension.hpp:505
static constexpr Dimension Acceleration() noexcept
获取加速度量纲
定义 Dimension.hpp:391
A_CONSTEXPR_CXX14 int getLength() const noexcept
获取量纲中的长度维度
定义 Dimension.hpp:472
static constexpr Dimension Temperature()
获取温度量纲
定义 Dimension.hpp:373
static constexpr Dimension Amount()
获取物质量量纲
定义 Dimension.hpp:375
A_CONSTEXPR_CXX14 int getAngle() const noexcept
获取量纲中的角度维度
定义 Dimension.hpp:478
static constexpr Dimension Luminous()
获取发光强度量纲
定义 Dimension.hpp:377
A_CONSTEXPR_CXX14 Dimension pow(int n) const noexcept
量纲指数幂
定义 Dimension.hpp:415
A_CONSTEXPR_CXX14 int getAmount() const noexcept
获取量纲中的物质量维度
定义 Dimension.hpp:482
static constexpr Dimension Length()
获取长度量纲
定义 Dimension.hpp:365
A_CONSTEXPR_CXX14 Dimension & setTemperature(int n) noexcept
设置量纲中的温度维度
定义 Dimension.hpp:517
static constexpr Dimension Force() noexcept
获取力量纲
定义 Dimension.hpp:401
static constexpr Dimension Unit()
获取单位量纲
定义 Dimension.hpp:363
A_CONSTEXPR_CXX14 Dimension & setLength(int n) noexcept
设置量纲中的长度维度
定义 Dimension.hpp:493
A_CONSTEXPR_CXX14 Dimension operator/(Dimension other) const noexcept
量纲除法运算符
定义 Dimension.hpp:436
A_CONSTEXPR_CXX14 Dimension & setAngle(int n) noexcept
设置量纲中的角度维度
定义 Dimension.hpp:511
constexpr Dimension(EDimension dimension) noexcept
隐式构造函数
定义 Dimension.hpp:360
static constexpr Dimension AngularVelocity() noexcept
获取角速度量纲
定义 Dimension.hpp:383
static constexpr Dimension Time()
获取时间量纲
定义 Dimension.hpp:369
A_CONSTEXPR_CXX14 bool isDerived() const noexcept
判断量纲是否为导出量纲
定义 Dimension.hpp:410
A_CONSTEXPR_CXX14 bool operator==(Dimension other) const noexcept
量纲相等运算符
定义 Dimension.hpp:447
A_CONSTEXPR_CXX14 EDimension dim_set_exponent(T dimension, int idx, int exponent) noexcept
设置量纲的指数
定义 Dimension.hpp:70
constexpr dimension_t dim_product(T dim1, T dim2) noexcept
量纲乘法
定义 Dimension.hpp:113
A_CONSTEXPR_CXX14 bool aDimIsBase(EDimension dimension) noexcept
判断量纲是否为基本量纲
定义 Dimension.hpp:333
constexpr dimension_t dim_pow(T dimension, int n) noexcept
量纲指数幂
定义 Dimension.hpp:188
A_CONSTEXPR_CXX14 bool aDimIsUnit(EDimension dimension) noexcept
判断量纲是否为单位量纲
定义 Dimension.hpp:345
constexpr EDimension operator/(EDimension dim1, EDimension dim2) noexcept
量纲除法运算符
定义 Dimension.hpp:231
constexpr int dim_get_exponent(T dimension, int idx) noexcept
获取量纲的指数
定义 Dimension.hpp:62
std::string aDimName(EDimension dimension)
获取量纲的名称
定义 Dimension.cpp:80
constexpr int dim_get_sum_abs_exponent(T dimension) noexcept
获取量纲的指数绝对值的和
定义 Dimension.hpp:91
EDimension
量纲枚举类
定义 Dimension.hpp:293
@ eAngularVelocity
角速度
@ eAmount
物质量N (相应的基本单位: mol)
@ eArea
面积 L^2
@ eLuminous
发光强度J (相应的基本单位: cd)
@ eVolume
体积 L^3
@ eUnit
单位量纲
@ eTemperature
温度Θ (相应的基本单位: K)
@ eAngVel
角速度(别名)
@ eTime
时间T (相应的基本单位: s)
@ eCurrent
电流I (相应的基本单位: A)
@ ePower
功率 M·L^2·T^-3
@ eSpeed
速度 L·T^-1
@ eAcceleration
加速度 L·T^-2
@ eMass
质量M (相应的基本单位: kg)
@ eEnergy
能量 M·L^2·T^-2
@ eFrequency
频率 T^-1
@ eLength
长度L (相应的基本单位: m)
@ eForce
力 M·L·T^-2
@ ePressure
压力 M·L^-1·T^-2
A_CONSTEXPR_CXX14 bool aDimIsDerived(EDimension dimension) noexcept
判断量纲是否为导出量纲
定义 Dimension.hpp:339
std::string aDimSymbol(EDimension dimension)
获取量纲的符号
定义 Dimension.cpp:167