TNB Library
TnbValueUnit.h
[詳解]
1#pragma once
24#include "TnbStr.h"
25#include "TnbRealNumber.h"
26#include "TnbException.h"
27
28
29
30//TNB Library
31namespace TNB
32{
33
34
35
37#define _PAI 3.14159265358979323846264338327950288
38
39#ifndef _TnbDOXYGEN //Document作成用シンボル
40#if defined(_UNICODE) && ! defined(_TnbUnit_SpecialChar_DISABLE)
41 #define _S2 L"\x00B2"
42 #define _M3 L"\x33A5"
43 #define _S3 L"\x00B3"
44 #define _LITRE L"\x2113"
45 #define _DL L"\x3397"
46#else
47 #define _S2 _T("^2")
48 #define _M3 _T("m^3")
49 #define _S3 _T("^3")
50 #define _LITRE _T("l")
51 #define _DL _T("dl")
52#endif
53#endif //_TnbDOXYGEN
54
55
56
68{
69public:
70 #ifndef _TnbDOXYGEN //Document作成用シンボル
72 enum {
73 RASING = 1,
74 EXCODE = _BIT(29),
75 PFCODE = _BIT(30),
76 TNBLIB_VALUEUNIT = -1
77 };
78 #endif
79};
80
81
82
90{
94 double doRevise;
95};
96
97
98
111{
112public:
115 {
116 DEF = _BIT(30),
135 //
144
145 KIRO = KILO,
146 };
147
155 {
156 const static TUnitParam A[] =
157 {
158 // 単位文字列 日本語 係数
159 { _T(""), _T(""), 1.0 }, // -
160 { _T("Y"), _T("ヨタ"), 1.0E-24 }, // yotta
161 { _T("Z"), _T("ゼタ"), 1.0E-21 }, // zetta
162 { _T("E"), _T("エクサ"), 1.0E-18 }, // exa
163 { _T("P"), _T("ぺタ"), 1.0E-15 }, // peta
164 { _T("T"), _T("テラ"), 1.0E-12 }, // tera
165 { _T("G"), _T("ギガ"), 1.0E-9 }, // giga
166 { _T("M"), _T("メガ"), 1.0E-6 }, // mega
167 { _T("k"), _T("キロ"), 1.0E-3 }, // kilo
168 { _T("d"), _T("デシ"), 1.0E+1 }, // deci
169 { _T("c"), _T("センチ"), 1.0E+2 }, // centi
170 { _T("m"), _T("ミリ"), 1.0E+3 }, // milli
171 { _T("μ"), _T("マイクロ"), 1.0E+6 }, // micro
172 { _T("n"), _T("ナノ"), 1.0E+9 }, // nano
173 { _T("p"), _T("ピコ"), 1.0E+12 }, // pico
174 { _T("f"), _T("フェムト"), 1.0E+15 }, // femto
175 { _T("a"), _T("アト"), 1.0E+18 }, // atto
176 { _T("z"), _T("ゼプト"), 1.0E+21 }, // zepto
177 { _T("y"), _T("ヨクト"), 1.0E+24 }, // yocto
178 //
179 { _T("Yi"), _T("ヨビ"), 1.0 / 1208925819614629174706176.0 },
180 { _T("Zi"), _T("ゼビ"), 1.0 / 1180591620717411303424.0 },
181 { _T("Ei"), _T("エクスビ"), 1.0 / (1ui64 << 60) } ,
182 { _T("Pi"), _T("ペビ"), 1.0 / (1ui64 << 50) },
183 { _T("Ti"), _T("テビ"), 1.0 / (1ui64 << 40) },
184 { _T("Gi"), _T("ギビ"), 1.0 / (1ui64 << 30) },
185 { _T("Mi"), _T("メビ"), 1.0 / (1ui64 << 20) },
186 { _T("Ki"), _T("キビ"), 1.0 / (1ui64 << 10) },
187 };
188 int i = code - DEF;
189 if ( i >= 0 && i < countof(A) )
190 {
191 return &A[i];
192 }
193 throw CNoSuchTypeException();
194 }
195};
196
197
198
213template<typename U>
214class CValueUnitT : public U, public CPfUnit
215{
216public:
217
226 class CCode
227 {
228 int m_code;
229 public:
230 typedef typename U::EUnitCode EUnitCode;
232 CCode(void) : m_code(0) {}
237 CCode(EUnitCode code) : m_code(code) {}
242 CCode(EPfUnitCode code) : m_code(code) {}
247 operator EUnitCode(void) const { return EUnitCode(HasPfCode() ? 0 : m_code); }
252 operator EPfUnitCode(void) const { return EPfUnitCode(HasPfCode() ? m_code : 0); }
259 bool operator==(const CCode& c) const { return m_code == c.m_code; }
266 bool operator!=(const CCode& c) const { return m_code != c.m_code; }
272 bool HasPfCode(void) const { return (m_code & PFCODE) != 0; }
277 int ToInt(void) const { return m_code; };
282 void SetInt(int i) { m_code = i; }
283 };
284
285private:
286
287 CRealNumber m_value;
288 CCode m_code;
289
290 void m_Test(const CAbstractUnit* u){}
291 void m_Test(LPCVOID u){ ASSERT(false); }
292
294 double m_GetRevise(const CCode& c) const
295 {
296 const TUnitParam* P = c.HasPfCode() ? GetPfParam(c) : U::GetParam(c);
297 return P->doRevise;
298 }
299
301 double m_GetCoefficient(const CCode& c) const
302 {
303 double r;
304 if ( c.HasPfCode() )
305 {
306 double a = GetPfParam(c)->doCoefficient;
307 r = 1;
308 loop ( i, U::RASING )
309 {
310 r *= a;
311 }
312 }
313 else
314 {
315 r = U::GetParam(c)->doCoefficient;
316 }
317 return r;
318 }
319
320public:
321
326 CValueUnitT(void) : m_value(), m_code()
327 {
328 DEBUG_ONLY(m_Test(this));
329 }
330
336 explicit CValueUnitT(const CRealNumber& v) : m_value(v), m_code()
337 {
338 DEBUG_ONLY(m_Test(this));
339 }
340
347 CValueUnitT(const CRealNumber& v, CCode code) : m_value(v), m_code(code)
348 {
349 DEBUG_ONLY(m_Test(this));
350 }
351
357 void Set(const CRealNumber& v)
358 {
359 m_value = v;
360 }
361
368 void Set(const CRealNumber& v, CCode code)
369 {
370 m_value = v;
371 m_code = code;
372 }
373
381 CStr ToString(LPCTSTR lpszFormat = NULL) const
382 {
383 return m_value.ToString(lpszFormat) + GetUnitMarkString(m_code);
384 }
385
394 CStr ToString(CCode code, LPCTSTR lpszFormat = NULL) const
395 {
396 CValueUnitT r = *this;
397 r.ToUnit(code);
398 return r.ToString(lpszFormat);
399 }
400
406 CCode GetUnitCode(void) const
407 {
408 return m_code;
409 }
410
417 {
418 return GetUnitMarkString(m_code);
419 }
420
427 {
428 return GetUnitJapanString(m_code);
429 }
430
438 {
439 if ( m_code != code )
440 {
441 m_value -= m_GetRevise(m_code);
442 m_value *= m_GetCoefficient(code) / m_GetCoefficient(m_code);
443 m_value += m_GetRevise(code);
444 m_code = code;
445 }
446 return *this;
447 }
448
455 {
456 return m_value;
457 }
458
464 operator CRealNumber(void) const
465 {
466 return m_value;
467 }
468
476 {
477 CValueUnitT r = *this;
478 r.ToUnit(code);
479 return r.GetValue();
480 }
481
489 {
490 m_value += u.GetValue(m_code);
491 return *this;
492 }
493
501 {
502 CValueUnitT r = *this;
503 return r += u;
504 }
505
512 {
513 m_value += v;
514 return *this;
515 }
516
523 {
524 CValueUnitT r = *this;
525 return r += v;
526 }
527
534 friend CValueUnitT operator+(const CRealNumber& v, const CValueUnitT& u)
535 {
536 return u + v;
537 }
538
546 {
547 m_value -= u.GetValue(m_code);
548 return *this;
549 }
550
558 {
559 CValueUnitT r = *this;
560 return r -= u;
561 }
562
569 {
570 m_value -= v;
571 return *this;
572 }
573
580 {
581 CValueUnitT r = *this;
582 return r -= v;
583 }
584
591 friend CValueUnitT operator-(const CRealNumber& v, const CValueUnitT& u)
592 {
593 CValueUnitT r = u;
594 u.m_value = v - u.m_value;
595 return *this;
596 }
597
604 {
605 m_value *= v;
606 return *this;
607 }
608
615 {
616 CValueUnitT r = *this;
617 return r *= v;
618 }
619
626 friend CValueUnitT operator*(const CRealNumber& v, const CValueUnitT& u)
627 {
628 return u * v;
629 }
630
638 {
639 return m_value / u.GetValue(m_code);
640 }
641
648 {
649 m_value /= v;
650 return *this;
651 }
652
659 {
660 CValueUnitT r = *this;
661 return r /= v;
662 }
663
671 bool operator==(const CValueUnitT& t) const { return m_value == t.GetValue(m_code); }
672
680 bool operator!=(const CValueUnitT& t) const { return m_value != t.GetValue(m_code); }
681
689 bool operator<(const CValueUnitT& t) const { return m_value < t.GetValue(m_code); }
690
698 bool operator<=(const CValueUnitT& t) const {return m_value <= t.GetValue(m_code); }
699
707 bool operator>(const CValueUnitT& t) const { return m_value > t.GetValue(m_code); }
708
716 bool operator>=(const CValueUnitT& t) const { return m_value >= t.GetValue(m_code); }
717
718
719 //----------------
720
721
727 {
728 return U::GetKindString();
729 }
730
735 static DWORD GetUnitKindCode(void)
736 {
737 return U::KINDCODE;
738 }
739
746 {
747 CStr s;
748 if ( code.HasPfCode() )
749 {
750 s = GetPfParam(code)->lpszMarkString;
751 s += U::GetParam(U::EUnitCode(0))->lpszMarkString;
752 }
753 else
754 {
755 s = U::GetParam(code)->lpszMarkString;
756 }
757 return s;
758 }
759
766 {
767 CStr s;
768 if ( code.HasPfCode() )
769 {
770 s = GetPfParam(code)->lpszJapanString;
771 s += U::GetParam(U::EUnitCode(0))->lpszJapanString;
772 }
773 else
774 {
775 s = U::GetParam(code)->lpszJapanString;
776 }
777 return s;
778 }
779};
780
781
782
783//--------------------------------
784
785
786
798template<typename T>
799inline CStr ToStringWithJapanUnit(const T& t, LPCTSTR lpszFormat = NULL)
800{
801 return t.GetValue().ToString(lpszFormat) + t.GetUnitJapanString();
802}
803
804
805
817template<typename T>
818inline CStr ToStringWithUnitMark(const T& t, LPCTSTR lpszFormat = NULL)
819{
820 return t.GetValue().ToString(lpszFormat) + t.GetUnitMarkString();
821}
822
823
824
835template<typename T>
836inline CStr GetUnitKindString(const T& t)
837{
838 return T::GetKindString();
839}
840
851template<typename T>
852inline DWORD GetUnitKindCode(const T& t)
853{
854 return T::KINDCODE;
855}
856
857
858
859//--------------------------------
860
861
862
878{
879public:
880
885 static LPCTSTR GetKindString(void) { return _T("距離"); }
886
888 enum { KINDCODE = 'Di' };
889
892 {
907
908 MM = CPfUnit::MILLI,
909 CM = CPfUnit::CENTI,
910 KM = CPfUnit::KIRO,
911 };
912
919 static const TUnitParam* GetParam(EUnitCode code)
920 {
921 const static TUnitParam A[] =
922 {
923 // 単位文字列 日本語 係数
924 { _T("m"), _T("メートル"), 1.0 }, // m
925 { _T("in"), _T("インチ"), 39.37 }, // inch
926 { _T("ft"), _T("フィート"), 3.28084 }, // feet
927 { _T("yd"), _T("ヤード"), 1.09361 }, // yard
928 { _T("mile"), _T("マイル"), 0.000621 }, // mile
929 { _T("n.m."), _T("海里"), 0.000539 }, // kairi
930 { _T("尺"), _T("尺"), 3.3 }, // 尺
931 { _T("間"), _T("間"), 3.3 / 6.0 }, // 間
932 { _T("町"), _T("町"), 3.3 / 360.0 }, // 町
933 { _T("里"), _T("里"), 3.3 / 12960.0}, // 里
934 { _T("Å"), _T("オングストローム"), 1.0E+10 }, // オングストローム
935 { _T("AU"), _T("天文単位"), 6.68459E-12 }, // 天文単位
936 { _T("ly"), _T("光年"), 1.05700E-16 }, // 光年
937 { _T("pc"), _T("パーセク"), 3.24078E-17 }, // パーセク
938 };
939 if ( code >= 0 && code < countof(A) )
940 {
941 return &A[code];
942 }
943 throw CNoSuchTypeException();
944 }
945};
946
980
988{
989 const CValueDistance::CCode& code = x.GetUnitCode();
990 const CRealNumber& xx = x.GetValue();
991 const CRealNumber& yy = y.GetValue(code);
992 CRealNumber r = sqrt(xx * xx + yy * yy);
993 return CValueDistance(r, code);
994}
995
1002{
1003 return r * 2 * _PAI;
1004}
1005
1013{
1014 const CValueDistance::CCode& code = x.GetUnitCode();
1015 const CRealNumber& xx = x.GetValue();
1016 const CRealNumber& yy = y.GetValue(code);
1017 CRealNumber r = _PAI * sqrt((xx * xx + yy * yy) * 2);
1018 return CValueDistance(r, code);
1019}
1020
1030{
1031 const CValueDistance::CCode& code = x.GetUnitCode();
1032 CRealNumber A = x.GetValue();
1033 CRealNumber B = y.GetValue(code);
1034 if ( A < B )
1035 {
1036 Swap(A, B);
1037 }
1038 CRealNumber r = _PAI * sqrt((A * A + B * B) * 2 - (A - B) * (A - B) / 2.2);
1039 return CValueDistance(r, code);
1040}
1041
1051{
1052 const CValueDistance::CCode& code = x.GetUnitCode();
1053 CRealNumber A = x.GetValue();
1054 CRealNumber B = y.GetValue(code);
1055 if ( A < B )
1056 {
1057 Swap(A, B);
1058 }
1059 if ( B == 0.0 )
1060 {
1061 return CValueDistance(A * 4.0, code);
1062 }
1063 CRealNumber a = 1 - (B * B) / (A * A);
1064 CRealNumber r = 2 * A * _PAI * (1 - a / 4 - (a * a) * 3 / 64 - (a * a * a) * 5 / 256);
1065 return CValueDistance(r, code);
1066}
1067
1068
1069
1081{
1082public:
1083 enum { RASING = 2 };
1084
1089 static LPCTSTR GetKindString(void) { return _T("面積"); }
1090
1092 enum { KINDCODE = 'Ar' };
1093
1096 {
1103
1104 MM2 = CPfUnit::MILLI,
1105 CM2 = CPfUnit::CENTI,
1106 KM2 = CPfUnit::KIRO,
1107 };
1108
1115 static const TUnitParam* GetParam(EUnitCode code)
1116 {
1117 const static TUnitParam A[] =
1118 {
1119 // 単位文字列 日本語 係数
1120 { _T("㎡"), _T("平方メートル"), 1.0 }, // m2
1121 { _T("a"), _T("アール"), 0.01 }, // a
1122 { _T("ha"), _T("ヘクトアール"), 0.0001 }, // ha
1123 { _T("in") _S2, _T("平方インチ"), 1550.0 }, // inch2
1124 { _T("yd") _S2, _T("平方ヤード"), 1.19599 }, // yard2
1125 { _T("acre"), _T("エーカー"), 0.000247 }, // acre
1126 };
1127 if ( code >= 0 && code < countof(A) )
1128 {
1129 return &A[code];
1130 }
1131 throw CNoSuchTypeException();
1132 }
1133};
1134
1168
1176{
1177 return CValueArea(d1.GetValue(d1.M) * d2.GetValue(d2.M), CValueArea::M2);
1178}
1179
1187{
1188 return CValueDistance(a.GetValue(a.M2) / d.GetValue(d.M), CValueDistance::M);
1189}
1190
1197{
1198 CRealNumber r = sqrt(a.GetValue(a.M2));
1199 return CValueDistance(r, CValueDistance::M);
1200}
1201
1209{
1210 return x * y / 2.0;
1211}
1212
1219{
1220 return r * r * _PAI;
1221}
1222
1230{
1231 return x * y * _PAI;
1232}
1233
1234
1235
1247{
1248public:
1249 enum { RASING = 3 };
1250
1255 static LPCTSTR GetKindString(void) { return _T("体積"); }
1256
1258 enum { KINDCODE = 'Cu' };
1259
1262 {
1270
1271 MM3 = CPfUnit::MILLI,
1272 CM3 = CPfUnit::CENTI,
1273 KM3 = CPfUnit::KIRO,
1274 };
1275
1282 static const TUnitParam* GetParam(EUnitCode code)
1283 {
1284 const static TUnitParam A[] =
1285 {
1286 // 単位文字列 日本語 係数
1287 { _M3, _T("立方メートル"), 1.0 }, // m3
1288 { _T("in") _S3, _T("立方インチ"), 61023.6 }, // inch3
1289 { _T("yd") _S3, _T("立方ヤード"), 1.30795 }, // yard3
1290 { _T("bbl"), _T("バレル"), 6.28982 }, // bbl
1291 { _LITRE, _T("リットル"), 1000.0 }, // litre
1292 { _DL, _T("デシリットル"), 10000.0 }, // dl
1293 { _T("cc"), _T("cc"), 1000000.0 }, // cc
1294 };
1295 if ( code >= 0 && code < countof(A) )
1296 {
1297 return &A[code];
1298 }
1299 throw CNoSuchTypeException();
1300 }
1301};
1302
1336
1344{
1345 return CValueCubic(a.GetValue(a.M2) * d.GetValue(d.M), CValueCubic::M3);
1346}
1347
1355{
1356 return a * d;
1357}
1358
1359
1360
1372{
1373public:
1374
1379 static LPCTSTR GetKindString(void) { return _T("重量"); }
1380
1382 enum { KINDCODE = 'We' };
1383
1386 {
1394
1395 MG = CPfUnit::MILLI,
1396 KG = CPfUnit::KIRO,
1397 };
1398
1405 static const TUnitParam* GetParam(EUnitCode code)
1406 {
1407 const static TUnitParam A[] =
1408 {
1409 // 単位文字列 日本語 係数
1410 { _T("g"), _T("グラム"), 1.0 }, // g
1411 { _T("t"), _T("トン"), 0.000001 }, // t
1412 { _T("oz"), _T("オンス"), 35.274 * 0.001 }, // oz
1413 { _T("lb"), _T("ポンド"), 2.20462291 * 0.001 }, // lb
1414 { _T("ct"), _T("カラット"), 1.0 / 0.2 }, // ct
1415 { _T("貫"), _T("貫"), 0.001 / 3.750 }, // kan
1416 { _T("mon"), _T("匁"), 1.0 / 3.750 }, //monme
1417 };
1418 if ( code >= 0 && code < countof(A) )
1419 {
1420 return &A[code];
1421 }
1422 throw CNoSuchTypeException();
1423 }
1424};
1425
1458
1459
1460
1472{
1473public:
1474
1479 static LPCTSTR GetKindString(void) { return _T("温度"); }
1480
1482 enum { KINDCODE = 'Te' };
1483
1486 {
1490
1491 };
1492
1499 static const TUnitParam* GetParam(EUnitCode code)
1500 {
1501 const static TUnitParam A[] =
1502 {
1503 // 単位文字列 日本語 係数 補正値
1504 { _T("℃"), _T("摂氏"), 1.0, 0 }, // C
1505 { _T("゜F"), _T("華氏"), 9.0 / 5.0, 32, }, // F
1506 { _T("K"), _T("ケルビン"), 1.0, 273.15 }, // K
1507 };
1508 if ( code >= 0 && code < countof(A) )
1509 {
1510 return &A[code];
1511 }
1512 throw CNoSuchTypeException();
1513 }
1514};
1515
1547
1548
1549
1561{
1562public:
1563
1568 static LPCTSTR GetKindString(void) { return _T("時間"); }
1569
1571 enum { KINDCODE = 'Ti' };
1572
1575 {
1581
1582 MSEC = CPfUnit::MILLI,
1583 };
1584
1591 static const TUnitParam* GetParam(EUnitCode code)
1592 {
1593 const static TUnitParam A[] =
1594 {
1595 // 単位文字列 日本語 係数
1596 { _T("s"), _T("秒"), 1.0 }, // sec
1597 { _T("m"), _T("分"), 1.0 / 60.0 }, // min
1598 { _T("h"), _T("時"), 1.0 / 3600 }, // hour
1599 { _T("day"), _T("日"), 1.0 / (3600 * 24) }, // day
1600 { _T("week"), _T("週"), 1.0 / (3600 * 24 * 7) }, // week
1601 };
1602 if ( code >= 0 && code < countof(A) )
1603 {
1604 return &A[code];
1605 }
1606 throw CNoSuchTypeException();
1607 }
1608};
1609
1642
1654{
1655public:
1656 enum { RASING = 2 };
1657
1662 static LPCTSTR GetKindString(void) { return _T("時間^2"); }
1663
1665 enum { KINDCODE = 'Tt' };
1666
1669 {
1675
1676 MSEC2 = CPfUnit::MILLI,
1677 };
1678
1685 static const TUnitParam* GetParam(EUnitCode code)
1686 {
1687 const static TUnitParam A[] =
1688 {
1689 // 単位文字列 日本語 係数
1690 { _T("s^2"), _T("秒^2"), 1.0 }, // sec
1691 { _T("m^2"), _T("分^2"), (1.0 / 60.0) * (1.0 / 60.0) }, // min
1692 { _T("h^2"), _T("時^2"), (1.0 / 3600) * (1.0 / 3600) }, // hour
1693 { _T("day^2"), _T("日^2"), (1.0 / (3600 * 24)) * (1.0 / (3600 * 24))}, // day
1694 { _T("week^2"), _T("週^2"), (1.0 / (3600 * 24 * 7)) * (1.0 / (3600 * 24 * 7))}, // week
1695 };
1696 if ( code >= 0 && code < countof(A) )
1697 {
1698 return &A[code];
1699 }
1700 throw CNoSuchTypeException();
1701 }
1702};
1703
1736
1743inline CValueTime2 operator*(const CValueTime& t1, const CValueTime& t2)
1744{
1745 return CValueTime2(t1.GetValue(t1.SEC) * t2.GetValue(t2.SEC), CValueTime2::SEC2);
1746}
1747
1754inline CValueTime operator/(const CValueTime2& t2, const CValueTime& t)
1755{
1756 return CValueTime(t2.GetValue(t2.SEC2) / t.GetValue(t.SEC), CValueTime::SEC);
1757}
1758
1764inline CValueTime sqrt(const CValueTime2& t2)
1765{
1766 CRealNumber r = sqrt(t2.GetValue(t2.SEC2));
1767 return CValueTime(r, CValueTime::SEC);
1768}
1769
1770
1771
1783{
1784public:
1785
1790 static LPCTSTR GetKindString(void) { return _T("周波数"); }
1791
1793 enum { KINDCODE = 'Fr' };
1794
1797 {
1799
1800 KHZ = CPfUnit::KIRO,
1801 MHZ = CPfUnit::MEGA,
1802 GHZ = CPfUnit::GIGA,
1803 };
1804
1811 static const TUnitParam* GetParam(EUnitCode code)
1812 {
1813 const static TUnitParam A[] =
1814 {
1815 // 単位文字列 日本語 係数
1816 { _T("Hz"), _T("ヘルツ"), 1.0 }, // Hz
1817 };
1818 if ( code >= 0 && code < countof(A) )
1819 {
1820 return &A[code];
1821 }
1822 throw CNoSuchTypeException();
1823 }
1824};
1825
1858
1866{
1867 return f.GetValue(f.HZ) * t.GetValue(t.SEC);
1868}
1869
1877{
1878 return f * t;
1879}
1880
1888{
1889 return CValueTime(v / f.GetValue(f.HZ), CValueTime::SEC);
1890}
1891
1899{
1900 return CValueFrequency(v / t.GetValue(t.SEC), CValueFrequency::HZ);
1901}
1902
1903
1904
1917{
1918public:
1919
1924 static LPCTSTR GetKindString(void) { return _T("角度"); }
1925
1927 enum { KINDCODE = 'De' };
1928
1931 {
1935 };
1936
1943 static const TUnitParam* GetParam(EUnitCode code)
1944 {
1945 const static TUnitParam A[] =
1946 {
1947 // 単位文字列 日本語 係数
1948 { _T("°"), _T("度"), 1.0 }, // DEG
1949 { _T("\""), _T("秒"), 60.0 * 60.0 }, // DEG(秒)
1950 { _T(""), _T(""), _PAI / 180.0}, // RAD
1951 };
1952 if ( code >= 0 && code < countof(A) )
1953 {
1954 return &A[code];
1955 }
1956 throw CNoSuchTypeException();
1957 }
1958};
1959
1994
2000inline CRealNumber sin(const CValueDegree& d) { return sin(d.GetValue(d.RAD)); }
2001
2007inline CRealNumber sinh(const CValueDegree& d) { return sinh(d.GetValue(d.RAD)); }
2008
2014inline CRealNumber cos(const CValueDegree& d) { return cos(d.GetValue(d.RAD)); }
2015
2021inline CRealNumber cosh(const CValueDegree& d) { return cosh(d.GetValue(d.RAD)); }
2022
2028inline CRealNumber tan(const CValueDegree& d) { return tan(d.GetValue(d.RAD)); }
2029
2035inline CRealNumber tanh(const CValueDegree& d) { return tanh(d.GetValue(d.RAD)); }
2036
2045inline CValueDegree MakeDegree(int dd, int mm = 0, double ss = 0.0)
2046{
2047 if ( ss < 0.0 )
2048 {
2049 ss = -ss;
2050 }
2051 double r = abs(dd) * 60 * 60 + abs(mm * 60) + ss;
2052 if ( dd < 0 )
2053 {
2054 r = -r;
2055 }
2056 return CValueDegree(r, CValueDegree::DEGS);
2057}
2058
2066inline CValueDegree MakeDegree(BYTE dd, BYTE mm, double ss)
2067{
2068 double r = dd * 60 * 60 + mm * 60 + ss;
2069 return CValueDegree(r, CValueDegree::DEGS);
2070}
2071
2079{
2081 return CValueDistance(di.GetValue(c) * tan(de), c);
2082}
2083
2091inline CValueDegree CalcDegreeAverage(size_t size, const CValueDegree* pDegs)
2092{
2093 CRealNumber x = 0;
2094 CRealNumber y = 0;
2095 loop ( i, size )
2096 {
2097 x += sin(pDegs[i]);
2098 y += cos(pDegs[i]);
2099 }
2100 CValueDegree d;
2101 d.Set(atan2(x, y), CValueDegree::RAD);
2102 return d;
2103}
2104
2114inline CValueDegree CalcDegreeAverage(const CValueDegree& d1, const CValueDegree& d2, double r1 = 1.0, double r2 = 1.0)
2115{
2116 CValueDegree::CCode c = d1.GetUnitCode();
2117 CRealNumber x = sin(d1) * r1 + sin(d2) * r2;
2118 CRealNumber y = cos(d1) * r1 + cos(d2) * r2;
2119 CValueDegree d;
2120 d.Set(atan2(x, y), CValueDegree::RAD);
2121 d.ToUnit(c);
2122 return d;
2123}
2124
2133{
2134 CRealNumber v1 = d1.GetValue(CValueDegree::DEG);
2135 CRealNumber v2 = d2.GetValue(CValueDegree::DEG);
2136 CValueDegree d;
2137 v1 = fmod(v1 + 360.0 * 1000.0, 360.0);
2138 v2 = fmod(v2 + 360.0 * 1000.0, 360.0);
2139 v1 = fabs(v1 - v2);
2140 if ( v1 > 180.0 )
2141 {
2142 v1 = 360.0 - v1;
2143 }
2144 d.Set(v1, CValueDegree::DEG);
2145 return d;
2146}
2147
2148
2149
2161{
2162public:
2163
2168 static LPCTSTR GetKindString(void) { return _T("圧力"); }
2169
2171 enum { KINDCODE = 'Pr' };
2172
2175 {
2180 };
2181
2188 static const TUnitParam* GetParam(EUnitCode code)
2189 {
2190 const static TUnitParam A[] =
2191 {
2192 // 単位文字列 日本語 係数
2193 { _T("mmHg"), _T("水銀柱ミリメートル"), 1.0 }, // mmHg
2194 { _T("Torr"), _T("トル"), 1.0 }, // Torr
2195 { _T("inHg"), _T("水銀柱インチ"), 3.937E-02 }, // inHg
2196 { _T("Pa"), _T("パスカル"), 133.3224 }, // パスカル
2197 };
2198 if ( code >= 0 && code < countof(A) )
2199 {
2200 return &A[code];
2201 }
2202 throw CNoSuchTypeException();
2203 }
2204};
2205
2238
2239
2240
2252{
2253public:
2254
2259 static LPCTSTR GetKindString(void) { return _T("割合"); }
2260
2262 enum { KINDCODE = 'Re' };
2263
2266 {
2270 };
2271
2278 static const TUnitParam* GetParam(EUnitCode code)
2279 {
2280 const static TUnitParam A[] =
2281 {
2282 // 単位文字列 日本語 係数
2283 { _T("%"), _T("パーセント"), 1.0 }, // °
2284 { _T("割"), _T("割"), 0.1 }, // °
2285 { _T(""), _T(""), 0.01 }, // °
2286 };
2287 if ( code >= 0 && code < countof(A) )
2288 {
2289 return &A[code];
2290 }
2291 throw CNoSuchTypeException();
2292 }
2293};
2294
2326
2327
2328
2341{
2342public:
2343
2348 static LPCTSTR GetKindString(void) { return _T("電流"); }
2349
2351 enum { KINDCODE = 'A' };
2352
2355 {
2358 };
2359
2366 static const TUnitParam* GetParam(EUnitCode code)
2367 {
2368 const static TUnitParam A[] =
2369 {
2370 // 単位文字列 日本語 係数
2371 { _T("A"), _T("アンペア"), 1.0 }, // A
2372 { _T("Bi"), _T("ビオ"), 0.1 }, // Bi
2373 };
2374 if ( code >= 0 && code < countof(A) )
2375 {
2376 return &A[code];
2377 }
2378 throw CNoSuchTypeException();
2379 }
2380};
2381
2414
2415
2416
2428{
2429public:
2430
2435 static LPCTSTR GetKindString(void) { return _T("電圧"); }
2436
2438 enum { KINDCODE = 'V' };
2439
2442 {
2444
2445 MV = CPfUnit::MILLI,
2446 KV = CPfUnit::KIRO,
2447 };
2448
2455 static const TUnitParam* GetParam(EUnitCode code)
2456 {
2457 const static TUnitParam A[] =
2458 {
2459 // 単位文字列 日本語 係数
2460 { _T("V"), _T("ボルト"), 1.0 }, // V
2461 };
2462 if ( code >= 0 && code < countof(A) )
2463 {
2464 return &A[code];
2465 }
2466 throw CNoSuchTypeException();
2467 }
2468};
2469
2499
2500
2501
2513{
2514public:
2515
2520 static LPCTSTR GetKindString(void) { return _T(""); }
2521
2523 enum { KINDCODE = ' ' * 0x100 };
2524
2527 {
2529 };
2530
2537 static const TUnitParam* GetParam(EUnitCode code)
2538 {
2539 const static TUnitParam A[] =
2540 {
2541 // 単位文字列 日本語 係数
2542 { _T(""), _T(""), 1.0 },
2543 };
2544 if ( code >= 0 && code < countof(A) )
2545 {
2546 return &A[code];
2547 }
2548 throw CNoSuchTypeException();
2549 }
2550};
2551
2563
2564
2565
2566#ifndef _TnbDOXYGEN //Document作成用シンボル
2567 #undef _S2
2568 #undef _M3
2569 #undef _S3
2570 #undef _LITRE
2571 #undef _DL
2572#endif
2573
2574
2575
2576}; // TNB
#define _BIT(X)
BIT演算
Definition: TnbDef.h:307
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
例外状態管理関係のヘッダ
実数管理関係のヘッダ
文字列管理関係のヘッダ
#define _PAI
円周率
Definition: TnbValueUnit.h:37
単位管理抽象クラス
Definition: TnbValueUnit.h:68
タイプ相違例外
Definition: TnbException.h:146
接頭単位管理クラス
Definition: TnbValueUnit.h:111
static const TUnitParam * GetPfParam(EPfUnitCode code)
[取得] 接頭単位コードパラメータ取得
Definition: TnbValueUnit.h:154
EPfUnitCode
接頭単位コード.
Definition: TnbValueUnit.h:115
@ DECI
デシ (1.0E-1)
Definition: TnbValueUnit.h:125
@ ZEBI
ゼビ (2^70)
Definition: TnbValueUnit.h:137
@ NANO
ナノ (1.0E-9)
Definition: TnbValueUnit.h:129
@ EXBI
エクスビ (2^60)
Definition: TnbValueUnit.h:138
@ MILLI
ミリ (1.0E-3)
Definition: TnbValueUnit.h:127
@ MICRO
マイクロ (1.0E-6)
Definition: TnbValueUnit.h:128
@ KIBI
キビ (2^10)
Definition: TnbValueUnit.h:143
@ KILO
キロ (1.0E+3)
Definition: TnbValueUnit.h:124
@ GIBI
ギビ (2^30)
Definition: TnbValueUnit.h:141
@ PICO
ピコ (1.0E-12)
Definition: TnbValueUnit.h:130
@ GIGA
ギガ (1.0E+9)
Definition: TnbValueUnit.h:122
@ YOBI
ヨビ (2^80)
Definition: TnbValueUnit.h:136
@ TERA
テラ (1.0E+12)
Definition: TnbValueUnit.h:121
@ TEBI
テビ (2^40)
Definition: TnbValueUnit.h:140
@ EXA
エクサ (1.0E+18)
Definition: TnbValueUnit.h:119
@ ATTO
アト (1.0E-18)
Definition: TnbValueUnit.h:132
@ MEGA
メガ (1.0E+6)
Definition: TnbValueUnit.h:123
@ YOTTA
ヨタ (1.0E+24)
Definition: TnbValueUnit.h:117
@ PETA
ぺタ (1.0E+15)
Definition: TnbValueUnit.h:120
@ PEBI
ぺビ (2^50)
Definition: TnbValueUnit.h:139
@ FEMTO
フェムト (1.0E-15)
Definition: TnbValueUnit.h:131
@ ZETTA
ゼタ (1.0E+21)
Definition: TnbValueUnit.h:118
@ MEBI
メビ (2^20)
Definition: TnbValueUnit.h:142
@ CENTI
センチ (1.0E-2)
Definition: TnbValueUnit.h:126
@ YOCTO
ヨクト (1.0E-24)
Definition: TnbValueUnit.h:134
@ ZEPTO
ゼプト (1.0E-21)
Definition: TnbValueUnit.h:133
実数管理クラス
Definition: TnbRealNumber.h:78
CStr ToString(LPCTSTR lpszFormat=NULL) const
[取得] 文字列作成
単位管理(電流)クラス
EUnitCode
電流単位コード
@ A
A (アンペア)
@ BI
Bi (ビオ)
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(面積)クラス
EUnitCode
面積単位コード
@ ACRE
エーカー
@ A
アール
@ YARD2
平方ヤード
@ M2
平方メートル
@ HA
ヘクトアール
@ INCH2
平方インチ
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(体積)クラス
EUnitCode
体積単位コード
@ M3
立方メートル
@ DL
デシリットル
@ INCH3
立方インチ
@ LITRE
リットル
@ YARD3
立方ヤード
@ BBL
バレル
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(角度)クラス
EUnitCode
角度単位コード
@ RAD
ラジアン
@ DEG
角度(度)
@ DEGS
角度(秒)
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(距離)クラス
Definition: TnbValueUnit.h:878
EUnitCode
距離単位コード
Definition: TnbValueUnit.h:892
@ FEET
フィート
Definition: TnbValueUnit.h:895
@ AU
天文単位
Definition: TnbValueUnit.h:904
@ M
メートル
Definition: TnbValueUnit.h:893
@ PC
パーセク
Definition: TnbValueUnit.h:906
@ ANG
オングストローム
Definition: TnbValueUnit.h:903
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
Definition: TnbValueUnit.h:919
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
Definition: TnbValueUnit.h:885
単位管理(ダミー)テンプレートクラス
EUnitCode
電圧単位コード
@ NON
単位なし
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(周波数)クラス
EUnitCode
周波数単位コード
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(圧力)クラス
EUnitCode
圧力単位コード
@ PA
パスカル
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(割合)クラス
EUnitCode
割合単位コード
@ PERCENT
パーセント
@ DEC
小数点
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(温度)クラス
EUnitCode
温度単位コード
@ C
摂氏(セルシウス)温度 ℃
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(時間^2)クラス
EUnitCode
時間^2単位コード
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(時間)クラス
EUnitCode
時間単位コード
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(電圧)クラス
EUnitCode
電圧単位コード
@ V
V (ボルト)
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位管理(重量)クラス
EUnitCode
重量単位コード
@ CT
カラット
static const TUnitParam * GetParam(EUnitCode code)
[取得] コードパラメータ取得
static LPCTSTR GetKindString(void)
[取得] 単位種文字列取得
単位コード管理クラス
Definition: TnbValueUnit.h:227
bool operator==(const CCode &c) const
[確認] 比較
Definition: TnbValueUnit.h:259
int ToInt(void) const
[取得] intで取得
Definition: TnbValueUnit.h:277
CCode(EPfUnitCode code)
コンストラクタ
Definition: TnbValueUnit.h:242
U::EUnitCode EUnitCode
入れ子型名再定義
Definition: TnbValueUnit.h:230
CCode(void)
コンストラクタ
Definition: TnbValueUnit.h:232
void SetInt(int i)
[設定] intで設定
Definition: TnbValueUnit.h:282
bool operator!=(const CCode &c) const
[確認] 比較
Definition: TnbValueUnit.h:266
CCode(EUnitCode code)
コンストラクタ
Definition: TnbValueUnit.h:237
bool HasPfCode(void) const
[確認] 接頭単位コード保持?
Definition: TnbValueUnit.h:272
単位付値管理テンプレートクラス
Definition: TnbValueUnit.h:215
CValueUnitT & operator/=(const CRealNumber &v)
[計算] 割算代入.
Definition: TnbValueUnit.h:647
CValueUnitT(const CRealNumber &v)
コンストラクタ.
Definition: TnbValueUnit.h:336
friend CValueUnitT operator-(const CRealNumber &v, const CValueUnitT &u)
[計算] 減算.
Definition: TnbValueUnit.h:591
void Set(const CRealNumber &v)
[代入] 値設定 指定の値を設定します。単位は変化しません。
Definition: TnbValueUnit.h:357
CValueUnitT & operator*=(const CRealNumber &v)
[計算] 掛算代入.
Definition: TnbValueUnit.h:603
CValueUnitT & operator-=(const CRealNumber &v)
[計算] 減算代入.
Definition: TnbValueUnit.h:568
CValueUnitT operator+(const CRealNumber &v) const
[計算] 加算.
Definition: TnbValueUnit.h:522
CStr GetUnitJapanString(void) const
[取得] 単位意味文字列取得.
Definition: TnbValueUnit.h:426
CValueUnitT & operator-=(const CValueUnitT &u)
[計算] 単位付値減算代入.
Definition: TnbValueUnit.h:545
CCode GetUnitCode(void) const
[取得] 単位コード取得.
Definition: TnbValueUnit.h:406
static CStr GetUnitMarkString(CCode code)
[取得] 単位マーク文字列取得.
Definition: TnbValueUnit.h:745
CValueUnitT operator-(const CValueUnitT &u) const
[計算] 単位付値減算.
Definition: TnbValueUnit.h:557
CRealNumber GetValue(CCode code) const
[取得] 値取得(単位指定).
Definition: TnbValueUnit.h:475
CRealNumber operator/(const CValueUnitT &u) const
[計算] 単位付値割算.
Definition: TnbValueUnit.h:637
bool operator>=(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:716
CRealNumber GetValue(void) const
[取得] 値取得.
Definition: TnbValueUnit.h:454
bool operator>(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:707
bool operator==(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:671
bool operator!=(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:680
friend CValueUnitT operator*(const CRealNumber &v, const CValueUnitT &u)
[計算] 掛算.
Definition: TnbValueUnit.h:626
static CStr GetUnitJapanString(CCode code)
[取得] 単位意味文字列取得.
Definition: TnbValueUnit.h:765
CValueUnitT operator+(const CValueUnitT &u) const
[計算] 単位付値加算.
Definition: TnbValueUnit.h:500
static DWORD GetUnitKindCode(void)
[取得] 単位種コード取得
Definition: TnbValueUnit.h:735
CStr GetUnitMarkString(void) const
[取得] 単位マーク文字列取得.
Definition: TnbValueUnit.h:416
static CStr GetUnitKindString(void)
[取得] 単位種文字列取得
Definition: TnbValueUnit.h:726
bool operator<=(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:698
CValueUnitT & ToUnit(CCode code)
[変換] 単位変更.
Definition: TnbValueUnit.h:437
void Set(const CRealNumber &v, CCode code)
[代入] 値、単位設定 指定の値、単位を設定します。
Definition: TnbValueUnit.h:368
CValueUnitT & operator+=(const CValueUnitT &u)
[計算] 単位付値加算代入.
Definition: TnbValueUnit.h:488
CValueUnitT & operator+=(const CRealNumber &v)
[計算] 加算代入.
Definition: TnbValueUnit.h:511
CStr ToString(LPCTSTR lpszFormat=NULL) const
[取得] 文字列で取得
Definition: TnbValueUnit.h:381
CValueUnitT(const CRealNumber &v, CCode code)
コンストラクタ.
Definition: TnbValueUnit.h:347
friend CValueUnitT operator+(const CRealNumber &v, const CValueUnitT &u)
[計算] 加算.
Definition: TnbValueUnit.h:534
CValueUnitT operator/(const CRealNumber &v) const
[計算] 割算.
Definition: TnbValueUnit.h:658
CValueUnitT operator-(const CRealNumber &v) const
[計算] 減算.
Definition: TnbValueUnit.h:579
bool operator<(const CValueUnitT &t) const
[確認] 比較
Definition: TnbValueUnit.h:689
CValueUnitT(void)
コンストラクタ.
Definition: TnbValueUnit.h:326
CStr ToString(CCode code, LPCTSTR lpszFormat=NULL) const
[取得] 文字列で取得(単位指定あり)
Definition: TnbValueUnit.h:394
CValueUnitT operator*(const CRealNumber &v) const
[計算] 掛算.
Definition: TnbValueUnit.h:614
CRealNumber operator*(const CValueTime &t, const CValueFrequency &f)
[計算] 掛算 (値 = 時間 × 周波数)
CValueUnitT< CUnitTemperature > CValueTemperature
温度管理クラス
CValueDistance CalcSlantingDistance(const CValueDistance &x, const CValueDistance &y)
[計算] 斜め距離計算 (√(水平距離^2 + 垂直距離^2))
Definition: TnbValueUnit.h:987
CValueDistance CalcEllipseDistance_t3(const CValueDistance &x, const CValueDistance &y)
[計算] 楕円周囲長計算 (type3)
CRealNumber tan(const CValueDegree &d)
[計算] tan (値 = tan(角度))
CValueArea CalcCircleArea(const CValueDistance &r)
[計算] 円面積計算 (π × 半径 × 半径)
CValueDistance CalcEllipseDistance_t2(const CValueDistance &x, const CValueDistance &y)
[計算] 楕円周囲長計算 (type2)
CValueUnitT< CUnitCubic > CValueCubic
体積管理クラス
CValueUnitT< CUnitDistance > CValueDistance
距離管理クラス
Definition: TnbValueUnit.h:979
CStr GetUnitKindString(const T &t)
[取得] 単位種文字列取得
Definition: TnbValueUnit.h:836
CValueArea CalcEllipseArea(const CValueDistance &x, const CValueDistance &y)
[計算] 楕円面積計算 (π × 水平半径 × 垂直半径)
CRealNumber sin(const CValueDegree &d)
[計算] sin (値 = sin(角度))
CValueUnitT< CUnitTime > CValueTime
時間管理クラス
CStr ToStringWithUnitMark(const T &t, LPCTSTR lpszFormat=NULL)
[作成] 文字列作成
Definition: TnbValueUnit.h:818
CRealNumber cos(const CValueDegree &d)
[計算] cos (値 = cos(角度))
CValueDistance CalcCircleDistance(const CValueDistance &r)
[計算] 円周囲長計算 (2 × π × 半径)
CValueUnitT< CUnitWeight > CValueWeight
重量管理クラス
CStr ToStringWithJapanUnit(const T &t, LPCTSTR lpszFormat=NULL)
[作成] 文字列作成
Definition: TnbValueUnit.h:799
CValueDegree CalcDegreeDifference(const CValueDegree &d1, const CValueDegree &d2)
[計算] 角度の開き計算.
CRealNumber cosh(const CValueDegree &d)
[計算] cosh (値 = cosh(角度))
CValueUnitT< CUnitDegree > CValueDegree
角度管理クラス
CValueUnitT< CUnitRatio > CValueRatio
割合管理クラス
CValueFrequency operator/(const CRealNumber &v, const CValueTime &t)
[計算] 割算 (周波数 = 値 ÷ 時間)
CRealNumber sinh(const CValueDegree &d)
[計算] sinh (値 = sinh(角度))
CValueTime sqrt(const CValueTime2 &t2)
[計算] 平方根 (時間 = √(時間^2))
CValueUnitT< CUnitTime2 > CValueTime2
時間^2管理クラス
CValueDegree MakeDegree(BYTE dd, BYTE mm, double ss)
[計算] 角度(度,分,秒)計算.
CValueUnitT< CUnitFrequency > CValueFrequency
周波数管理クラス
CValueUnitT< CUnitPressure > CValuePressure
圧力管理クラス
CValueDistance CalcRightTriangleHeight(const CValueDistance &di, const CValueDegree &de)
[計算] 直角三角形の高さ計算
CValueDegree CalcDegreeAverage(const CValueDegree &d1, const CValueDegree &d2, double r1=1.0, double r2=1.0)
[計算] 角度の平均計算.
CValueDistance CalcEllipseDistance(const CValueDistance &x, const CValueDistance &y)
[計算] 楕円周囲長計算 (π × √( 2 (水平半径^2 + 垂直半径^2))
CValueUnitT< CUnitArea > CValueArea
面積管理クラス
CValueUnitT< CUnitAmpere > CValueAmpere
電流管理クラス
CValueUnitT< CUnitDummy > CValueNonUnit
単位なし管理クラス
CValueArea CalcTriangleArea(const CValueDistance &x, const CValueDistance &y)
[計算] 三角面積計算 (底辺 × 高さ ÷ 2)
CRealNumber tanh(const CValueDegree &d)
[計算] tanh (値 = tanh(角度))
CValueUnitT< CUnitVolt > CValueVolt
電圧管理クラス
DWORD GetUnitKindCode(const T &t)
[取得] 単位種コード取得
Definition: TnbValueUnit.h:852
void Swap(T &t1, T &t2)
[変換] スワッパー.
Definition: TnbDef.h:963
TNB Library
Definition: TnbDoxyTitle.txt:2
単位情報テーブル型
Definition: TnbValueUnit.h:90
LPCTSTR lpszMarkString
単位記号文字列
Definition: TnbValueUnit.h:91
double doCoefficient
変換係数
Definition: TnbValueUnit.h:93
LPCTSTR lpszJapanString
単位日本語文字列
Definition: TnbValueUnit.h:92
double doRevise
誤差係数
Definition: TnbValueUnit.h:94