Class: Geometry::Spheroid::Base
- Inherits:
-
Object
- Object
- Geometry::Spheroid::Base
- Defined in:
- lib/geometry/spheroid/base.rb
Overview
end
Direct Known Subclasses
Instance Attribute Summary collapse
-
#equatorial_radius ⇒ Object
semi-major axis.
-
#polar_radius ⇒ Object
semi-minor axis.
-
#unit ⇒ Object
Returns the value of attribute unit.
Instance Method Summary collapse
- #flattening ⇒ Object
- #flattening_complement_squared ⇒ Object
- #geodetic_to_geocentric_latitude(lat, options = {}) ⇒ Object
-
#haversine_distance(point_1, point_2, options = {}) ⇒ Object
Invoke the haversine formula in the context of the spheroid represented by self.
-
#initialize(equatorial_radius, polar_radius, unit = :km) ⇒ Base
constructor
Unit is not functional but is simply memoized so that the basis for any calculations is clear.
- #inverse_flattening ⇒ Object
- #mean_radius ⇒ Object
- #radius_at_geodetic_latitude(lat, options = {}) ⇒ Object
- #volume ⇒ Object
Constructor Details
#initialize(equatorial_radius, polar_radius, unit = :km) ⇒ Base
Unit is not functional but is simply memoized so that the basis for any calculations is clear
32 33 34 35 36 |
# File 'lib/geometry/spheroid/base.rb', line 32 def initialize(equatorial_radius, polar_radius, unit = :km) @polar_radius = polar_radius @equatorial_radius = equatorial_radius @unit = unit end |
Instance Attribute Details
#equatorial_radius ⇒ Object
semi-major axis
27 28 29 |
# File 'lib/geometry/spheroid/base.rb', line 27 def equatorial_radius @equatorial_radius end |
#polar_radius ⇒ Object
semi-minor axis
26 27 28 |
# File 'lib/geometry/spheroid/base.rb', line 26 def polar_radius @polar_radius end |
#unit ⇒ Object
Returns the value of attribute unit.
28 29 30 |
# File 'lib/geometry/spheroid/base.rb', line 28 def unit @unit end |
Instance Method Details
#flattening ⇒ Object
43 44 45 46 |
# File 'lib/geometry/spheroid/base.rb', line 43 def flattening # http://en.wikipedia.org/wiki/Reference_ellipsoid @flattening ||= (@equatorial_radius - @polar_radius) / @equatorial_radius end |
#flattening_complement_squared ⇒ Object
52 53 54 55 |
# File 'lib/geometry/spheroid/base.rb', line 52 def flattening_complement_squared # http://www.mathworks.co.uk/help/aeroblks/geodetictogeocentriclatitude.html @flattening_complement_squared ||= (1.0 - flattening) * (1.0 - flattening) end |
#geodetic_to_geocentric_latitude(lat, options = {}) ⇒ Object
71 72 73 74 75 |
# File 'lib/geometry/spheroid/base.rb', line 71 def geodetic_to_geocentric_latitude(lat, = {}) lat = Geometry.deg_to_rad(lat) unless [:unit] == :radians Math.atan(Math.tan(lat) * flattening_complement_squared) end |
#haversine_distance(point_1, point_2, options = {}) ⇒ Object
Invoke the haversine formula in the context of the spheroid represented by self
78 79 80 |
# File 'lib/geometry/spheroid/base.rb', line 78 def haversine_distance(point_1, point_2, = {}) Geometry.haversine_distance(point_1, point_2, mean_radius, ) end |
#inverse_flattening ⇒ Object
48 49 50 |
# File 'lib/geometry/spheroid/base.rb', line 48 def inverse_flattening @inverse_flattening ||= 1.0 / flattening end |
#mean_radius ⇒ Object
38 39 40 41 |
# File 'lib/geometry/spheroid/base.rb', line 38 def mean_radius # http://en.wikipedia.org/wiki/Earth_radius @mean_radius ||= (@polar_radius + 2 * @equatorial_radius) / 3.0 end |
#radius_at_geodetic_latitude(lat, options = {}) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/geometry/spheroid/base.rb', line 62 def radius_at_geodetic_latitude(lat, = {}) lat = Geometry.deg_to_rad(lat) unless [:unit] == :radians numerator = (@equatorial_radius**2 * Math.cos(lat))**2 + (@polar_radius**2 * Math.sin(lat))**2 denominator = (@equatorial_radius * Math.cos(lat))**2 + (@polar_radius * Math.sin(lat))**2 Math.sqrt(numerator/denominator) end |
#volume ⇒ Object
57 58 59 |
# File 'lib/geometry/spheroid/base.rb', line 57 def volume @volume ||= (4.0 / 3.0) * (Math::PI * @polar_radius * @equatorial_radius ** 2) end |