1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/**
* Copyright (C) 2019, 2021, 2022, 2024, 2025 Adrien Hopkins
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package sevenUnits.unit;
import sevenUnits.utils.NameSymbol;
/**
* A static utility class that contains units in the British Imperial system.
*
* @author Adrien Hopkins
* @since 2019-10-21
*/
// this class is just constants, most of which are obvious from the variable name
// so no need to check for missing values
@SuppressWarnings("javadoc")
public final class BritishImperial {
/**
* Imperial units that measure area
*
* @author Adrien Hopkins
* @since 2019-11-08
*/
public static final class Area {
public static final LinearUnit SQUARE_FOOT = Length.FOOT.toExponent(2);
public static final LinearUnit SQUARE_YARD = Length.YARD.toExponent(2);
public static final LinearUnit SQUARE_MILE = Length.MILE.toExponent(2);
public static final LinearUnit PERCH = Length.ROD.times(Length.ROD);
public static final LinearUnit ROOD = Length.ROD.times(Length.FURLONG);
public static final LinearUnit ACRE = Length.FURLONG.times(Length.CHAIN);
}
/**
* Imperial units that measure length
*
* @author Adrien Hopkins
* @since 2019-10-28
*/
public static final class Length {
/**
* According to the International Yard and Pound of 1959, a yard is
* defined as exactly 0.9144 metres.
*/
public static final LinearUnit YARD = Metric.METRE.times(0.9144);
public static final LinearUnit FOOT = YARD.dividedBy(3);
public static final LinearUnit INCH = FOOT.dividedBy(12);
public static final LinearUnit THOU = INCH.dividedBy(1000);
/** A chain, equal to 22 yards. */
public static final LinearUnit CHAIN = YARD.times(22);
/** A furlong, equal to 10 chains or 220 yards. */
public static final LinearUnit FURLONG = CHAIN.times(10);
/** A mile, equal to 8 furlongs or 1760 yards. */
public static final LinearUnit MILE = FURLONG.times(8);
/** A league, equal to 3 miles. */
public static final LinearUnit LEAGUE = MILE.times(3);
/** A nautical mile, around 1 arcminute around the Earth's circumference. */
public static final LinearUnit NAUTICAL_MILE = Metric.METRE.times(1852);
public static final LinearUnit CABLE = NAUTICAL_MILE.dividedBy(10);
public static final LinearUnit FATHOM = CABLE.dividedBy(100);
public static final LinearUnit ROD = YARD.times(5.5);
public static final LinearUnit LINK = ROD.dividedBy(25);
}
/**
* British Imperial units that measure mass.
*
* @author Adrien Hopkins
* @since 2019-11-08
*/
public static final class Mass {
public static final LinearUnit POUND = Metric.GRAM.times(453.59237);
public static final LinearUnit OUNCE = POUND.dividedBy(16);
public static final LinearUnit DRACHM = POUND.dividedBy(256);
public static final LinearUnit GRAIN = POUND.dividedBy(7000);
public static final LinearUnit STONE = POUND.times(14);
public static final LinearUnit QUARTER = STONE.times(2);
public static final LinearUnit HUNDREDWEIGHT = QUARTER.times(4);
public static final LinearUnit LONG_TON = HUNDREDWEIGHT.times(20);
public static final LinearUnit SLUG = Metric.KILOGRAM.times(14.59390294);
}
/**
* British Imperial units that measure volume
*
* @author Adrien Hopkins
* @since 2019-11-08
*/
public static final class Volume {
public static final LinearUnit FLUID_OUNCE = Metric.LITRE
.withPrefix(Metric.MILLI).times(28.4130625);
public static final LinearUnit GILL = FLUID_OUNCE.times(5);
public static final LinearUnit PINT = FLUID_OUNCE.times(20);
public static final LinearUnit QUART = PINT.times(2);
public static final LinearUnit GALLON = QUART.times(4);
public static final LinearUnit PECK = GALLON.times(2);
public static final LinearUnit BUSHEL = PECK.times(4);
public static final LinearUnit CUBIC_INCH = Length.INCH.toExponent(3);
public static final LinearUnit CUBIC_FOOT = Length.FOOT.toExponent(3);
public static final LinearUnit CUBIC_YARD = Length.YARD.toExponent(3);
public static final LinearUnit ACRE_FOOT = Area.ACRE.times(Length.FOOT);
}
public static final LinearUnit OUNCE_FORCE = Mass.OUNCE
.times(Metric.Constants.EARTH_GRAVITY);
public static final LinearUnit POUND_FORCE = Mass.POUND
.times(Metric.Constants.EARTH_GRAVITY);
public static final LinearUnit BRITISH_THERMAL_UNIT = Metric.JOULE
.times(1055.06);
public static final LinearUnit CALORIE = Metric.JOULE.times(4.184);
public static final LinearUnit KILOCALORIE = Metric.JOULE.times(4184);
public static final Unit FAHRENHEIT = Unit
.fromConversionFunctions(Metric.KELVIN.getBase(),
tempK -> tempK * 1.8 - 459.67, tempF -> (tempF + 459.67) / 1.8)
.withName(NameSymbol.of("degree Fahrenheit", "\u00B0F"));
}
|