class KeyhitPain::Classes::Triangle

Public Class Methods

new(angle = 0, side = 0) click to toggle source

angle must be hash side must be hash triangle sides must have key a:, b:, c: side a: is hypotenuse

# File lib/keyhit_pain/classes.rb, line 60
def initialize(angle = 0, side = 0)
  @angle = angle
  @side = side
end

Public Instance Methods

angle_value_60() click to toggle source
# File lib/keyhit_pain/classes.rb, line 73
def angle_value_60
  @angle.value?(60)
end
angle_value_60_differ_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 101
def angle_value_60_differ_sides
  angle_value_60 && differ_sides
end
angle_value_60_same_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 97
def angle_value_60_same_sides
  angle_value_60 && same_sides
end
angle_value_90() click to toggle source
# File lib/keyhit_pain/classes.rb, line 69
def angle_value_90
  @angle.value?(90)
end
angle_value_90_angle_value_60_differ_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 93
def angle_value_90_angle_value_60_differ_sides
  angle_value_90 && angle_value_60 && differ_sides
end
angle_value_90_differ_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 89
def angle_value_90_differ_sides
  angle_value_90 && differ_sides
end
angle_value_90_same_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 85
def angle_value_90_same_sides
  angle_value_90 && same_sides
end
cathetus() click to toggle source
# File lib/keyhit_pain/classes.rb, line 139
def cathetus
  hypotenuse = @side.values.max
  cathetus = @side.values.min
  Math.sqrt(hypotenuse**2 - cathetus**2).round(4)
end
datatype_error() click to toggle source
# File lib/keyhit_pain/classes.rb, line 65
def datatype_error
  raise 'Variable @angle must be a Hash!!!' unless @angle.is_a?(Hash)
end
differ_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 81
def differ_sides
  @side[:b] != @side[:c]
end
height() click to toggle source
# File lib/keyhit_pain/classes.rb, line 149
def height
  small_kathetus = @side[:a].to_f / 2.to_f
  Math.sqrt(@side[:a]**2.to_f - small_kathetus**2).round(4)
end
hypotenuse() click to toggle source
# File lib/keyhit_pain/classes.rb, line 135
def hypotenuse
  Math.sqrt(@side.values.max**2 + @side.values.min**2).round(4)
end
perimeter() click to toggle source
# File lib/keyhit_pain/classes.rb, line 145
def perimeter
  @side.values.inject { |sum, n| sum + n }.to_f.round(4)
end
radius_circle_inside_triangle() click to toggle source
# File lib/keyhit_pain/classes.rb, line 131
def radius_circle_inside_triangle
  (square / (perimeter / 2)).round(4)
end
same_sides() click to toggle source
# File lib/keyhit_pain/classes.rb, line 77
def same_sides
  @side[:b] == @side[:c]
end
square() click to toggle source
# File lib/keyhit_pain/classes.rb, line 122
def square
  case type_definer
  when 'Triangle_90_differ_cathetus'
    (@side[:b] * @side[:c] / 2).round(4)
  when 'Right triangle'
    (0.5 * @side[:a] * height).round(4)
  end
end
type_definer() click to toggle source
# File lib/keyhit_pain/classes.rb, line 105
def type_definer
  datatype_error
  if angle_value_90_same_sides
    'angle_90_same_cathetus'
  elsif angle_value_90_differ_sides
    'Triangle_90_differ_cathetus'
  elsif angle_value_90_angle_value_60_differ_sides
    'Triangle_90_differ_cathetus'
  elsif angle_value_60_same_sides
    'Right triangle'
  elsif angle_value_60_differ_sides
    'Various side triangle 60'
  else
    'Various side triangle'
  end
end