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