Class: Triangle

Inherits:
Object
  • Object
show all
Defined in:
lib/classes.rb

Instance Method Summary collapse

Constructor Details

#initialize(angle = 0, side = 0) ⇒ Triangle

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


58
59
60
61
# File 'lib/classes.rb', line 58

def initialize(angle = 0, side = 0)
  @angle = angle
  @side = side
end

Instance Method Details

#angle_value_60Object


71
72
73
# File 'lib/classes.rb', line 71

def angle_value_60
  @angle.value?(60)
end

#angle_value_60_differ_sidesObject


99
100
101
# File 'lib/classes.rb', line 99

def angle_value_60_differ_sides
  angle_value_60 && differ_sides
end

#angle_value_60_same_sidesObject


95
96
97
# File 'lib/classes.rb', line 95

def angle_value_60_same_sides
  angle_value_60 && same_sides
end

#angle_value_90Object


67
68
69
# File 'lib/classes.rb', line 67

def angle_value_90
  @angle.value?(90)
end

#angle_value_90_angle_value_60_differ_sidesObject


91
92
93
# File 'lib/classes.rb', line 91

def angle_value_90_angle_value_60_differ_sides
  angle_value_90 && angle_value_60 && differ_sides
end

#angle_value_90_differ_sidesObject


87
88
89
# File 'lib/classes.rb', line 87

def angle_value_90_differ_sides
  angle_value_90 && differ_sides
end

#angle_value_90_same_sidesObject


83
84
85
# File 'lib/classes.rb', line 83

def angle_value_90_same_sides
  angle_value_90 && same_sides
end

#cathetusObject


137
138
139
140
141
# File 'lib/classes.rb', line 137

def cathetus
  hypotenuse = @side.values.max
  cathetus = @side.values.min
  Math.sqrt(hypotenuse**2 - cathetus**2).round(4)
end

#datatype_errorObject


63
64
65
# File 'lib/classes.rb', line 63

def datatype_error
  raise 'Variable @angle must be a Hash!!!' unless @angle.is_a?(Hash)
end

#differ_sidesObject


79
80
81
# File 'lib/classes.rb', line 79

def differ_sides
  @side[:b] != @side[:c]
end

#heightObject


147
148
149
150
# File 'lib/classes.rb', line 147

def height
  small_kathetus = @side[:a].to_f / 2.to_f
  Math.sqrt(@side[:a]**2.to_f - small_kathetus**2).round(4)
end

#hypotenuseObject


133
134
135
# File 'lib/classes.rb', line 133

def hypotenuse
  Math.sqrt(@side.values.max**2 + @side.values.min**2).round(4)
end

#perimeterObject


143
144
145
# File 'lib/classes.rb', line 143

def perimeter
  @side.values.inject { |sum, n| sum + n }.to_f.round(4)
end

#radius_circle_inside_triangleObject


129
130
131
# File 'lib/classes.rb', line 129

def radius_circle_inside_triangle
  (square / (perimeter / 2)).round(4)
end

#same_sidesObject


75
76
77
# File 'lib/classes.rb', line 75

def same_sides
  @side[:b] == @side[:c]
end

#squareObject


120
121
122
123
124
125
126
127
# File 'lib/classes.rb', line 120

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_definerObject


103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/classes.rb', line 103

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