-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdistance.go
75 lines (56 loc) · 1.51 KB
/
distance.go
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
package geogopher
import "math"
type Distance struct {
meters float64
}
func NewDistanceFromMillimeters(mm float64) Distance {
return Distance{meters: mm / 1000}
}
func NewDistanceFromCentimeters(cm float64) Distance {
return Distance{meters: cm / 100}
}
func NewDistanceFromMeters(m float64) Distance {
return Distance{meters: m}
}
func NewDistanceFromKilometers(km float64) Distance {
return Distance{meters: km * 1000}
}
func NewDistanceFromYards(yards float64) Distance {
return Distance{meters: yards / 1.0936}
}
func NewDistanceFromFeet(feet float64) Distance {
return Distance{meters: feet / 3.2808}
}
func NewDistanceFromMiles(miles float64) Distance {
return Distance{meters: miles * 1609.34}
}
func NewDistanceFromNauticalMiles(nmi float64) Distance {
return Distance{meters: nmi * 1852}
}
func AlmostEqual(a Distance, b Distance) bool {
return math.Abs(a.Meters()-b.Meters()) <= 0.01
}
func (d Distance) Millimeters() float64 {
return d.meters * MillimeterToMeterRatio
}
func (d Distance) Centimeters() float64 {
return d.meters * CentimeterToMeterRatio
}
func (d Distance) Meters() float64 {
return d.meters
}
func (d Distance) Kilometers() float64 {
return d.meters / MeterToKilometerRatio
}
func (d Distance) Yards() float64 {
return d.meters * MeterToYardRatio
}
func (d Distance) Miles() float64 {
return d.meters / MeterToMileRatio
}
func (d Distance) Feet() float64 {
return d.meters * MeterToFootRatio
}
func (d Distance) NauticalMiles() float64 {
return d.meters / MeterToNauticalMileRatio
}