Skip to content

Commit fd52a6e

Browse files
committed
Merge pull request #118 from AgileoAutomation/feature/add-RadianUnits
Add prefixes to radian
2 parents e3df9ab + 896ef50 commit fd52a6e

File tree

6 files changed

+209
-16
lines changed

6 files changed

+209
-16
lines changed

UnitsNet.Tests/CustomCode/AngleTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace UnitsNet.Tests.CustomCode
2525
{
2626
public class AngleTests : AngleTestsBase
2727
{
28+
2829
protected override double DegreesInOneDegree
2930
{
3031
get { return 1; }
@@ -48,12 +49,38 @@ protected override double RadiansInOneDegree
4849
get { return Math.PI/2/90; }
4950
}
5051

52+
protected override double NanoradiansInOneDegree
53+
{
54+
get { return (Math.PI / 2 / 90) * 1E9; }
55+
}
56+
57+
protected override double MicroradiansInOneDegree
58+
{
59+
get { return (Math.PI / 2 / 90) * 1E6; }
60+
}
61+
62+
protected override double MilliradiansInOneDegree
63+
{
64+
get { return (Math.PI / 2 / 90) * 1E3; }
65+
}
66+
67+
protected override double CentiradiansInOneDegree
68+
{
69+
get { return (Math.PI / 2 / 90) * 1E2; }
70+
}
71+
72+
protected override double DeciradiansInOneDegree
73+
{
74+
get { return (Math.PI / 2 / 90) * 1E1; }
75+
}
76+
5177
protected override double ArcsecondsInOneDegree
5278
{
5379
get
5480
{
5581
return 3600.0;
5682
}
5783
}
84+
5885
}
5986
}

UnitsNet.Tests/GeneratedCode/AngleTestsBase.g.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,25 @@ public abstract partial class AngleTestsBase
3838
{
3939
protected abstract double ArcminutesInOneDegree { get; }
4040
protected abstract double ArcsecondsInOneDegree { get; }
41+
protected abstract double CentiradiansInOneDegree { get; }
42+
protected abstract double DeciradiansInOneDegree { get; }
4143
protected abstract double DegreesInOneDegree { get; }
4244
protected abstract double GradiansInOneDegree { get; }
45+
protected abstract double MicroradiansInOneDegree { get; }
46+
protected abstract double MilliradiansInOneDegree { get; }
47+
protected abstract double NanoradiansInOneDegree { get; }
4348
protected abstract double RadiansInOneDegree { get; }
4449

4550
// ReSharper disable VirtualMemberNeverOverriden.Global
4651
protected virtual double ArcminutesTolerance { get { return 1e-5; } }
4752
protected virtual double ArcsecondsTolerance { get { return 1e-5; } }
53+
protected virtual double CentiradiansTolerance { get { return 1e-5; } }
54+
protected virtual double DeciradiansTolerance { get { return 1e-5; } }
4855
protected virtual double DegreesTolerance { get { return 1e-5; } }
4956
protected virtual double GradiansTolerance { get { return 1e-5; } }
57+
protected virtual double MicroradiansTolerance { get { return 1e-5; } }
58+
protected virtual double MilliradiansTolerance { get { return 1e-5; } }
59+
protected virtual double NanoradiansTolerance { get { return 1e-5; } }
5060
protected virtual double RadiansTolerance { get { return 1e-5; } }
5161
// ReSharper restore VirtualMemberNeverOverriden.Global
5262

@@ -56,8 +66,13 @@ public void DegreeToAngleUnits()
5666
Angle degree = Angle.FromDegrees(1);
5767
Assert.AreEqual(ArcminutesInOneDegree, degree.Arcminutes, ArcminutesTolerance);
5868
Assert.AreEqual(ArcsecondsInOneDegree, degree.Arcseconds, ArcsecondsTolerance);
69+
Assert.AreEqual(CentiradiansInOneDegree, degree.Centiradians, CentiradiansTolerance);
70+
Assert.AreEqual(DeciradiansInOneDegree, degree.Deciradians, DeciradiansTolerance);
5971
Assert.AreEqual(DegreesInOneDegree, degree.Degrees, DegreesTolerance);
6072
Assert.AreEqual(GradiansInOneDegree, degree.Gradians, GradiansTolerance);
73+
Assert.AreEqual(MicroradiansInOneDegree, degree.Microradians, MicroradiansTolerance);
74+
Assert.AreEqual(MilliradiansInOneDegree, degree.Milliradians, MilliradiansTolerance);
75+
Assert.AreEqual(NanoradiansInOneDegree, degree.Nanoradians, NanoradiansTolerance);
6176
Assert.AreEqual(RadiansInOneDegree, degree.Radians, RadiansTolerance);
6277
}
6378

@@ -66,8 +81,13 @@ public void FromValueAndUnit()
6681
{
6782
Assert.AreEqual(1, Angle.From(1, AngleUnit.Arcminute).Arcminutes, ArcminutesTolerance);
6883
Assert.AreEqual(1, Angle.From(1, AngleUnit.Arcsecond).Arcseconds, ArcsecondsTolerance);
84+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Centiradian).Centiradians, CentiradiansTolerance);
85+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Deciradian).Deciradians, DeciradiansTolerance);
6986
Assert.AreEqual(1, Angle.From(1, AngleUnit.Degree).Degrees, DegreesTolerance);
7087
Assert.AreEqual(1, Angle.From(1, AngleUnit.Gradian).Gradians, GradiansTolerance);
88+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Microradian).Microradians, MicroradiansTolerance);
89+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Milliradian).Milliradians, MilliradiansTolerance);
90+
Assert.AreEqual(1, Angle.From(1, AngleUnit.Nanoradian).Nanoradians, NanoradiansTolerance);
7191
Assert.AreEqual(1, Angle.From(1, AngleUnit.Radian).Radians, RadiansTolerance);
7292
}
7393

@@ -77,8 +97,13 @@ public void As()
7797
var degree = Angle.FromDegrees(1);
7898
Assert.AreEqual(ArcminutesInOneDegree, degree.As(AngleUnit.Arcminute), ArcminutesTolerance);
7999
Assert.AreEqual(ArcsecondsInOneDegree, degree.As(AngleUnit.Arcsecond), ArcsecondsTolerance);
100+
Assert.AreEqual(CentiradiansInOneDegree, degree.As(AngleUnit.Centiradian), CentiradiansTolerance);
101+
Assert.AreEqual(DeciradiansInOneDegree, degree.As(AngleUnit.Deciradian), DeciradiansTolerance);
80102
Assert.AreEqual(DegreesInOneDegree, degree.As(AngleUnit.Degree), DegreesTolerance);
81103
Assert.AreEqual(GradiansInOneDegree, degree.As(AngleUnit.Gradian), GradiansTolerance);
104+
Assert.AreEqual(MicroradiansInOneDegree, degree.As(AngleUnit.Microradian), MicroradiansTolerance);
105+
Assert.AreEqual(MilliradiansInOneDegree, degree.As(AngleUnit.Milliradian), MilliradiansTolerance);
106+
Assert.AreEqual(NanoradiansInOneDegree, degree.As(AngleUnit.Nanoradian), NanoradiansTolerance);
82107
Assert.AreEqual(RadiansInOneDegree, degree.As(AngleUnit.Radian), RadiansTolerance);
83108
}
84109

@@ -88,8 +113,13 @@ public void ConversionRoundTrip()
88113
Angle degree = Angle.FromDegrees(1);
89114
Assert.AreEqual(1, Angle.FromArcminutes(degree.Arcminutes).Degrees, ArcminutesTolerance);
90115
Assert.AreEqual(1, Angle.FromArcseconds(degree.Arcseconds).Degrees, ArcsecondsTolerance);
116+
Assert.AreEqual(1, Angle.FromCentiradians(degree.Centiradians).Degrees, CentiradiansTolerance);
117+
Assert.AreEqual(1, Angle.FromDeciradians(degree.Deciradians).Degrees, DeciradiansTolerance);
91118
Assert.AreEqual(1, Angle.FromDegrees(degree.Degrees).Degrees, DegreesTolerance);
92119
Assert.AreEqual(1, Angle.FromGradians(degree.Gradians).Degrees, GradiansTolerance);
120+
Assert.AreEqual(1, Angle.FromMicroradians(degree.Microradians).Degrees, MicroradiansTolerance);
121+
Assert.AreEqual(1, Angle.FromMilliradians(degree.Milliradians).Degrees, MilliradiansTolerance);
122+
Assert.AreEqual(1, Angle.FromNanoradians(degree.Nanoradians).Degrees, NanoradiansTolerance);
93123
Assert.AreEqual(1, Angle.FromRadians(degree.Radians).Degrees, RadiansTolerance);
94124
}
95125

UnitsNet/GeneratedCode/Enums/AngleUnit.g.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@ public enum AngleUnit
2727
Undefined = 0,
2828
Arcminute,
2929
Arcsecond,
30+
Centiradian,
31+
Deciradian,
3032
Degree,
3133
Gradian,
34+
Microradian,
35+
Milliradian,
36+
Nanoradian,
3237
Radian,
3338
}
3439
}

UnitsNet/GeneratedCode/UnitClasses/Angle.g.cs

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,22 @@ public double Arcseconds
7070
get { return _degrees*3600; }
7171
}
7272

73+
/// <summary>
74+
/// Get Angle in Centiradians.
75+
/// </summary>
76+
public double Centiradians
77+
{
78+
get { return (_degrees/180*Math.PI) / 1e-2d; }
79+
}
80+
81+
/// <summary>
82+
/// Get Angle in Deciradians.
83+
/// </summary>
84+
public double Deciradians
85+
{
86+
get { return (_degrees/180*Math.PI) / 1e-1d; }
87+
}
88+
7389
/// <summary>
7490
/// Get Angle in Degrees.
7591
/// </summary>
@@ -86,6 +102,30 @@ public double Gradians
86102
get { return _degrees/0.9; }
87103
}
88104

105+
/// <summary>
106+
/// Get Angle in Microradians.
107+
/// </summary>
108+
public double Microradians
109+
{
110+
get { return (_degrees/180*Math.PI) / 1e-6d; }
111+
}
112+
113+
/// <summary>
114+
/// Get Angle in Milliradians.
115+
/// </summary>
116+
public double Milliradians
117+
{
118+
get { return (_degrees/180*Math.PI) / 1e-3d; }
119+
}
120+
121+
/// <summary>
122+
/// Get Angle in Nanoradians.
123+
/// </summary>
124+
public double Nanoradians
125+
{
126+
get { return (_degrees/180*Math.PI) / 1e-9d; }
127+
}
128+
89129
/// <summary>
90130
/// Get Angle in Radians.
91131
/// </summary>
@@ -119,6 +159,22 @@ public static Angle FromArcseconds(double arcseconds)
119159
return new Angle(arcseconds/3600);
120160
}
121161

162+
/// <summary>
163+
/// Get Angle from Centiradians.
164+
/// </summary>
165+
public static Angle FromCentiradians(double centiradians)
166+
{
167+
return new Angle((centiradians*180/Math.PI) * 1e-2d);
168+
}
169+
170+
/// <summary>
171+
/// Get Angle from Deciradians.
172+
/// </summary>
173+
public static Angle FromDeciradians(double deciradians)
174+
{
175+
return new Angle((deciradians*180/Math.PI) * 1e-1d);
176+
}
177+
122178
/// <summary>
123179
/// Get Angle from Degrees.
124180
/// </summary>
@@ -135,6 +191,30 @@ public static Angle FromGradians(double gradians)
135191
return new Angle(gradians*0.9);
136192
}
137193

194+
/// <summary>
195+
/// Get Angle from Microradians.
196+
/// </summary>
197+
public static Angle FromMicroradians(double microradians)
198+
{
199+
return new Angle((microradians*180/Math.PI) * 1e-6d);
200+
}
201+
202+
/// <summary>
203+
/// Get Angle from Milliradians.
204+
/// </summary>
205+
public static Angle FromMilliradians(double milliradians)
206+
{
207+
return new Angle((milliradians*180/Math.PI) * 1e-3d);
208+
}
209+
210+
/// <summary>
211+
/// Get Angle from Nanoradians.
212+
/// </summary>
213+
public static Angle FromNanoradians(double nanoradians)
214+
{
215+
return new Angle((nanoradians*180/Math.PI) * 1e-9d);
216+
}
217+
138218
/// <summary>
139219
/// Get Angle from Radians.
140220
/// </summary>
@@ -158,10 +238,20 @@ public static Angle From(double value, AngleUnit fromUnit)
158238
return FromArcminutes(value);
159239
case AngleUnit.Arcsecond:
160240
return FromArcseconds(value);
241+
case AngleUnit.Centiradian:
242+
return FromCentiradians(value);
243+
case AngleUnit.Deciradian:
244+
return FromDeciradians(value);
161245
case AngleUnit.Degree:
162246
return FromDegrees(value);
163247
case AngleUnit.Gradian:
164248
return FromGradians(value);
249+
case AngleUnit.Microradian:
250+
return FromMicroradians(value);
251+
case AngleUnit.Milliradian:
252+
return FromMilliradians(value);
253+
case AngleUnit.Nanoradian:
254+
return FromNanoradians(value);
165255
case AngleUnit.Radian:
166256
return FromRadians(value);
167257

@@ -301,10 +391,20 @@ public double As(AngleUnit unit)
301391
return Arcminutes;
302392
case AngleUnit.Arcsecond:
303393
return Arcseconds;
394+
case AngleUnit.Centiradian:
395+
return Centiradians;
396+
case AngleUnit.Deciradian:
397+
return Deciradians;
304398
case AngleUnit.Degree:
305399
return Degrees;
306400
case AngleUnit.Gradian:
307401
return Gradians;
402+
case AngleUnit.Microradian:
403+
return Microradians;
404+
case AngleUnit.Milliradian:
405+
return Milliradians;
406+
case AngleUnit.Nanoradian:
407+
return Nanoradians;
308408
case AngleUnit.Radian:
309409
return Radians;
310410

UnitsNet/GeneratedCode/UnitSystem.Default.g.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ private static readonly ReadOnlyCollection<UnitLocalization> DefaultLocalization
105105
{
106106
new AbbreviationsForCulture("en-US", "″", "arcsec", "asec", "sec"),
107107
}),
108+
new CulturesForEnumValue((int) AngleUnit.Centiradian,
109+
new[]
110+
{
111+
new AbbreviationsForCulture("en-US", "crad"),
112+
new AbbreviationsForCulture("ru-RU", "cрад"),
113+
}),
114+
new CulturesForEnumValue((int) AngleUnit.Deciradian,
115+
new[]
116+
{
117+
new AbbreviationsForCulture("en-US", "drad"),
118+
new AbbreviationsForCulture("ru-RU", "dрад"),
119+
}),
108120
new CulturesForEnumValue((int) AngleUnit.Degree,
109121
new[]
110122
{
@@ -117,6 +129,24 @@ private static readonly ReadOnlyCollection<UnitLocalization> DefaultLocalization
117129
new AbbreviationsForCulture("en-US", "g"),
118130
new AbbreviationsForCulture("ru-RU", "g"),
119131
}),
132+
new CulturesForEnumValue((int) AngleUnit.Microradian,
133+
new[]
134+
{
135+
new AbbreviationsForCulture("en-US", "μrad"),
136+
new AbbreviationsForCulture("ru-RU", "μрад"),
137+
}),
138+
new CulturesForEnumValue((int) AngleUnit.Milliradian,
139+
new[]
140+
{
141+
new AbbreviationsForCulture("en-US", "mrad"),
142+
new AbbreviationsForCulture("ru-RU", "mрад"),
143+
}),
144+
new CulturesForEnumValue((int) AngleUnit.Nanoradian,
145+
new[]
146+
{
147+
new AbbreviationsForCulture("en-US", "nrad"),
148+
new AbbreviationsForCulture("ru-RU", "nрад"),
149+
}),
120150
new CulturesForEnumValue((int) AngleUnit.Radian,
121151
new[]
122152
{

UnitsNet/Scripts/UnitDefinitions/Angle.json

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@
33
"BaseUnit": "Degree",
44
"XmlDoc": "In geometry, an angle is the figure formed by two rays, called the sides of the angle, sharing a common endpoint, called the vertex of the angle.",
55
"Units": [
6-
{
7-
"SingularName": "Radian",
8-
"PluralName": "Radians",
9-
"FromUnitToBaseFunc": "x*180/Math.PI",
10-
"FromBaseToUnitFunc": "x/180*Math.PI",
11-
"Localization": [
12-
{
13-
"Culture": "en-US",
14-
"Abbreviations": ["rad"]
15-
},
16-
{
17-
"Culture": "ru-RU",
18-
"Abbreviations": ["рад"]
19-
}
20-
]
21-
},
6+
{
7+
"SingularName": "Radian",
8+
"PluralName": "Radians",
9+
"FromUnitToBaseFunc": "x*180/Math.PI",
10+
"FromBaseToUnitFunc": "x/180*Math.PI",
11+
"Prefixes": [ "Nano", "Micro", "Milli", "Centi", "Deci" ],
12+
"Localization": [
13+
{
14+
"Culture": "en-US",
15+
"Abbreviations": [ "rad" ]
16+
},
17+
{
18+
"Culture": "ru-RU",
19+
"Abbreviations": [ "рад" ]
20+
}
21+
]
22+
},
2223
{
2324
"SingularName": "Degree",
2425
"PluralName": "Degrees",

0 commit comments

Comments
 (0)