Class: Cartesius::Triangle
- Inherits:
-
Object
- Object
- Cartesius::Triangle
- Defined in:
- lib/cartesius/triangle.rb
Instance Method Summary collapse
- #==(triangle) ⇒ Object
- #acute? ⇒ Boolean
- #angles ⇒ Object
- #area(precision = 2) ⇒ Object
- #congruent?(triangle) ⇒ Boolean
- #equilateral?(precision = 2) ⇒ Boolean
-
#initialize(a:, b:, c:) ⇒ Triangle
constructor
A new instance of Triangle.
- #isosceles?(precision = 2) ⇒ Boolean
- #obtuse? ⇒ Boolean
- #perimeter ⇒ Object
- #rectangle? ⇒ Boolean
- #scalene?(precision = 2) ⇒ Boolean
- #sides ⇒ Object
- #similar?(triangle) ⇒ Boolean
- #vertices ⇒ Object
Constructor Details
#initialize(a:, b:, c:) ⇒ Triangle
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/cartesius/triangle.rb', line 9 def initialize(a:, b:, c:) validation(a, b, c) @v_a = a @v_b = b @v_c = c @s_a = Segment.new(extreme1: @v_b, extreme2: @v_c) @s_b = Segment.new(extreme1: @v_a, extreme2: @v_c) @s_c = Segment.new(extreme1: @v_a, extreme2: @v_b) @a_a = Angle.by_radiants(carnot(@s_a, @s_b, @s_c)) @a_b = Angle.by_radiants(carnot(@s_b, @s_a, @s_c)) @a_c = Angle.by_radiants(carnot(@s_c, @s_a, @s_b)) end |
Instance Method Details
#==(triangle) ⇒ Object
66 67 68 69 |
# File 'lib/cartesius/triangle.rb', line 66 def == (triangle) triangle.instance_of?(self.class) and triangle.vertices.values.to_set == vertices.values.to_set end |
#acute? ⇒ Boolean
42 43 44 |
# File 'lib/cartesius/triangle.rb', line 42 def acute? not rectangle? and not obtuse? end |
#angles ⇒ Object
22 23 24 |
# File 'lib/cartesius/triangle.rb', line 22 def angles {a: @a_a, b: @a_b, c: @a_c} end |
#area(precision = 2) ⇒ Object
62 63 64 |
# File 'lib/cartesius/triangle.rb', line 62 def area(precision = 2) Rational(sides[:a].length * sides[:b].length * Math.sin(angles[:c].radiants), 2).round(precision) end |
#congruent?(triangle) ⇒ Boolean
71 72 73 74 |
# File 'lib/cartesius/triangle.rb', line 71 def congruent? (triangle) triangle.instance_of?(self.class) and sides_length(triangle) == sides_length(self) end |
#equilateral?(precision = 2) ⇒ Boolean
46 47 48 |
# File 'lib/cartesius/triangle.rb', line 46 def equilateral?(precision = 2) sides_congruent(precision) == 1 end |
#isosceles?(precision = 2) ⇒ Boolean
50 51 52 |
# File 'lib/cartesius/triangle.rb', line 50 def isosceles?(precision = 2) equilateral? or sides_congruent(precision) == 2 end |
#obtuse? ⇒ Boolean
38 39 40 |
# File 'lib/cartesius/triangle.rb', line 38 def obtuse? angles.values.any?(&:obtuse?) end |
#perimeter ⇒ Object
58 59 60 |
# File 'lib/cartesius/triangle.rb', line 58 def perimeter sides.values.inject(0) {|sum, side| sum + side.length} end |
#rectangle? ⇒ Boolean
34 35 36 |
# File 'lib/cartesius/triangle.rb', line 34 def rectangle? angles.values.any?(&:right?) end |
#scalene?(precision = 2) ⇒ Boolean
54 55 56 |
# File 'lib/cartesius/triangle.rb', line 54 def scalene?(precision = 2) sides_congruent(precision) == 3 end |
#sides ⇒ Object
26 27 28 |
# File 'lib/cartesius/triangle.rb', line 26 def sides {a: @s_a, b: @s_b, c: @s_c} end |
#similar?(triangle) ⇒ Boolean
76 77 78 79 |
# File 'lib/cartesius/triangle.rb', line 76 def similar?(triangle) triangle.instance_of?(self.class) and triangle.angles.values.to_set == angles.values.to_set end |
#vertices ⇒ Object
30 31 32 |
# File 'lib/cartesius/triangle.rb', line 30 def vertices {a: @v_a, b: @v_b, c: @v_c} end |