1/*
2 * SPDX-FileCopyrightText: 2008-2009 Petri Damstén <damu@iki.fi>
3 * SPDX-FileCopyrightText: 2014 John Layt <jlayt@kde.org>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8#include "unit_p.h"
9#include "velocity_p.h"
10
11#include <KLocalizedString>
12
13#include <math.h>
14
15namespace KUnitConversion
16{
17class BeaufortUnitPrivate : public UnitPrivate
18{
19public:
20 BeaufortUnitPrivate(CategoryId categoryId,
21 UnitId id,
22 qreal multiplier,
23 const QString &symbol,
24 const QString &description,
25 const QString &matchString,
26 const KLocalizedString &symbolString,
27 const KLocalizedString &realString,
28 const KLocalizedString &integerString)
29 : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
30 {
31 }
32
33 qreal toDefault(qreal value) const override
34 {
35 return 0.836 * pow(x: value, y: 3.0 / 2.0);
36 }
37
38 qreal fromDefault(qreal value) const override
39 {
40 return pow(x: value / 0.836, y: 2.0 / 3.0);
41 }
42};
43
44UnitCategory Velocity::makeCategory()
45{
46 auto c = UnitCategoryPrivate::makeCategory(id: VelocityCategory, i18n("Speed"), i18n("Speed"));
47 auto d = UnitCategoryPrivate::get(category: c);
48 KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (velocity)", "%1 %2");
49
50 d->addDefaultUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
51 id: MeterPerSecond,
52 multiplier: 1,
53 i18nc("velocity unit symbol", "m/s"),
54 i18nc("unit description in lists", "meters per second"),
55 i18nc("unit synonyms for matching user input", "meter per second;meters per second;m/s;ms"),
56 symbolString,
57 ki18nc("amount in units (real)", "%1 meters per second"),
58 ki18ncp("amount in units (integer)", "%1 meter per second", "%1 meters per second")));
59
60 d->addCommonUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
61 id: KilometerPerHour,
62 multiplier: 0.277778,
63 i18nc("velocity unit symbol", "km/h"),
64 i18nc("unit description in lists", "kilometers per hour"),
65 i18nc("unit synonyms for matching user input", "kilometer per hour;kilometers per hour;km/h;kmh;kph"),
66 symbolString,
67 ki18nc("amount in units (real)", "%1 kilometers per hour"),
68 ki18ncp("amount in units (integer)", "%1 kilometer per hour", "%1 kilometers per hour")));
69
70 d->addCommonUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
71 id: MilePerHour,
72 multiplier: 0.44704,
73 i18nc("velocity unit symbol", "mph"),
74 i18nc("unit description in lists", "miles per hour"),
75 i18nc("unit synonyms for matching user input", "mile per hour;miles per hour;mph"),
76 symbolString,
77 ki18nc("amount in units (real)", "%1 miles per hour"),
78 ki18ncp("amount in units (integer)", "%1 mile per hour", "%1 miles per hour")));
79
80 d->addUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
81 id: FootPerSecond,
82 multiplier: 0.3048,
83 i18nc("velocity unit symbol", "ft/s"),
84 i18nc("unit description in lists", "feet per second"),
85 i18nc("unit synonyms for matching user input", "foot per second;feet per second;ft/s;ft/sec;fps"),
86 symbolString,
87 ki18nc("amount in units (real)", "%1 feet per second"),
88 ki18ncp("amount in units (integer)", "%1 foot per second", "%1 feet per second")));
89
90 d->addUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
91 id: InchPerSecond,
92 multiplier: 0.0254,
93 i18nc("velocity unit symbol", "in/s"),
94 i18nc("unit description in lists", "inches per second"),
95 i18nc("unit synonyms for matching user input", "inch per second;inches per second;in/s;in/sec;ips"),
96 symbolString,
97 ki18nc("amount in units (real)", "%1 inches per second"),
98 ki18ncp("amount in units (integer)", "%1 inch per second", "%1 inches per second")));
99
100 d->addCommonUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
101 id: Knot,
102 multiplier: 0.514444,
103 i18nc("velocity unit symbol", "kt"),
104 i18nc("unit description in lists", "knots"),
105 i18nc("unit synonyms for matching user input", "knot;knots;kt;nautical miles per hour"),
106 symbolString,
107 ki18nc("amount in units (real)", "%1 knots"),
108 ki18ncp("amount in units (integer)", "%1 knot", "%1 knots")));
109
110 // http://en.wikipedia.org/wiki/Speed_of_sound
111 d->addCommonUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
112 id: Mach,
113 multiplier: 343,
114 i18nc("velocity unit symbol", "Ma"),
115 i18nc("unit description in lists", "Mach"),
116 i18nc("unit synonyms for matching user input", "mach;machs;Ma;speed of sound"),
117 symbolString,
118 ki18nc("amount in units (real)", "Mach %1"),
119 ki18ncp("amount in units (integer)", "Mach %1", "Mach %1")));
120
121 d->addUnit(unit: UnitPrivate::makeUnit(categoryId: VelocityCategory,
122 id: SpeedOfLight,
123 multiplier: 2.99792458e+08,
124 i18nc("velocity unit symbol", "c"),
125 i18nc("unit description in lists", "speed of light"),
126 i18nc("unit synonyms for matching user input", "speed of light;c"),
127 symbolString,
128 ki18nc("amount in units (real)", "%1 speed of light"),
129 ki18ncp("amount in units (integer)", "%1 speed of light", "%1 speed of light")));
130
131 // http://en.wikipedia.org/wiki/Beaufort_scale
132 d->addUnit(unit: UnitPrivate::makeUnit(dd: new BeaufortUnitPrivate(VelocityCategory,
133 Beaufort,
134 1.0,
135 i18nc("velocity unit symbol", "bft"),
136 i18nc("unit description in lists", "Beaufort"),
137 i18nc("unit synonyms for matching user input", "Beaufort;Bft"),
138 symbolString,
139 ki18nc("amount in units (real)", "%1 on the Beaufort scale"),
140 ki18ncp("amount in units (integer)", "%1 on the Beaufort scale", "%1 on the Beaufort scale"))));
141
142 return c;
143}
144
145} // KUnitConversion namespace
146

source code of kunitconversion/src/velocity.cpp