Method: PerfectShape::Math.normalize_degrees

Defined in:
lib/perfect_shape/math.rb

.normalize_degrees(angle) ⇒ Object

Normalizes the specified angle into the range -180 to 180.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/perfect_shape/math.rb', line 41

def normalize_degrees(angle)
  angle = BigDecimal(angle.to_s)
  if angle > 180.0
    if angle <= (180.0 + 360.0)
      angle = angle - BigDecimal('360.0')
    else
      angle = Math.ieee_remainder(angle, 360.0)
      # IEEEremainder can return -180 here for some input values...
      angle = BigDecimal('180.0') if angle == -180.0
    end
  elsif angle <= -180.0
    if angle > (-180.0 - 360.0)
      angle = angle + BigDecimal('360.0')
    else
      angle = Math.ieee_remainder(angle, 360.0)
      # IEEEremainder can return -180 here for some input values...
      angle = BigDecimal('180.0') if angle == -180.0
    end
  end
  angle
end