class Geodesics::Strategies::Lambert
Constants
- CENTRAL_ANGLE
- EQUATORIAL_RADIUS
- FLATTENING
- INVERSE_FLATTENING
Public Class Methods
new( equatorial_radius: EQUATORIAL_RADIUS, flattening: FLATTENING, central_angle: CENTRAL_ANGLE )
click to toggle source
# File lib/geodesics/strategies/lambert.rb, line 13 def initialize( equatorial_radius: EQUATORIAL_RADIUS, flattening: FLATTENING, central_angle: CENTRAL_ANGLE ) @equatorial_radius = equatorial_radius @flattening = flattening @central_angle = central_angle end
Public Instance Methods
distance(point1, point2)
click to toggle source
# File lib/geodesics/strategies/lambert.rb, line 23 def distance(point1, point2) sigma = @central_angle.call(point1, point2) beta1 = parametric_latitude(point1.latitude) beta2 = parametric_latitude(point2.latitude) p = (beta1 + beta2) / 2 q = (beta2 - beta1) / 2 x = (sigma - sin(sigma)) * sin(p)**2 * cos(q)**2 / cos(sigma / 2)**2 y = (sigma + sin(sigma)) * cos(p)**2 * sin(q)**2 / sin(sigma / 2)**2 @equatorial_radius * (sigma - @flattening * (x + y) / 2) end
Private Instance Methods
cos(radian)
click to toggle source
# File lib/geodesics/strategies/lambert.rb, line 45 def cos(radian) v = Math.cos(radian) v < 1e-10 ? 1e-10 : v end
parametric_latitude(latitude)
click to toggle source
# File lib/geodesics/strategies/lambert.rb, line 36 def parametric_latitude(latitude) Math.atan((1 - @flattening) * Math.tan(latitude)) end
sin(radian)
click to toggle source
# File lib/geodesics/strategies/lambert.rb, line 40 def sin(radian) v = Math.sin(radian) v < 1e-10 ? 1e-10 : v end