class Cartesius::Angle
Constants
- FULL
Public Class Methods
by_degrees(degrees)
click to toggle source
# File lib/cartesius/angle.rb, line 19 def self.by_degrees(degrees) new(degrees) end
by_lines(line1:, line2:)
click to toggle source
# File lib/cartesius/angle.rb, line 27 def self.by_lines(line1:, line2:) raise ArgumentError.new('Lines must not be parallel!') if line1.parallel?(line2) if line1.perpendicular?(line2) [right, right] else acute = by_radiants(Math.atan(line1.slope - line2.slope / 1 + line1.slope * line2.slope).abs) [acute, new(FLAT - acute.degrees)] end end
by_radiants(radiants)
click to toggle source
# File lib/cartesius/angle.rb, line 23 def self.by_radiants(radiants) by_degrees(radiants * FLAT / Math::PI) end
flat()
click to toggle source
# File lib/cartesius/angle.rb, line 45 def self.flat by_degrees(FLAT) end
full()
click to toggle source
# File lib/cartesius/angle.rb, line 49 def self.full by_degrees(FULL) end
null()
click to toggle source
# File lib/cartesius/angle.rb, line 37 def self.null by_degrees(NULL) end
right()
click to toggle source
# File lib/cartesius/angle.rb, line 41 def self.right by_degrees(RIGHT) end
Private Class Methods
new(angle)
click to toggle source
# File lib/cartesius/angle.rb, line 12 def initialize(angle) validation(angle) @angle = angle end
Public Instance Methods
acute?()
click to toggle source
# File lib/cartesius/angle.rb, line 65 def acute? CloseNeighbourhood.new(45, 45 - Tolerance::TOLERANCE).include?(degrees) end
congruent?(other)
click to toggle source
# File lib/cartesius/angle.rb, line 85 def congruent?(other) other.instance_of?(self.class) && OpenNeighbourhood.new(NULL, Tolerance::TOLERANCE).include?((other.degrees - degrees).abs) end
Also aliased as: eql?
degrees()
click to toggle source
# File lib/cartesius/angle.rb, line 53 def degrees @angle end
flat?()
click to toggle source
# File lib/cartesius/angle.rb, line 77 def flat? OpenNeighbourhood.new(FLAT, Tolerance::TOLERANCE).include?(degrees) end
full?()
click to toggle source
# File lib/cartesius/angle.rb, line 81 def full? OpenNeighbourhood.new(FULL, Tolerance::TOLERANCE).include?(degrees) end
null?()
click to toggle source
# File lib/cartesius/angle.rb, line 61 def null? OpenNeighbourhood.new(NULL, Tolerance::TOLERANCE).include?(degrees) end
obtuse?()
click to toggle source
# File lib/cartesius/angle.rb, line 73 def obtuse? CloseNeighbourhood.new(135, 45 - Tolerance::TOLERANCE).include?(degrees) end
radiants(precision = 3)
click to toggle source
# File lib/cartesius/angle.rb, line 57 def radiants(precision = 3) (@angle * Math::PI / FLAT).round(precision) end
right?()
click to toggle source
# File lib/cartesius/angle.rb, line 69 def right? OpenNeighbourhood.new(RIGHT, Tolerance::TOLERANCE).include?(degrees) end
Private Instance Methods
hash()
click to toggle source
# File lib/cartesius/angle.rb, line 100 def hash @angle.hash end
validation(angle)
click to toggle source
# File lib/cartesius/angle.rb, line 94 def validation(angle) if angle < NULL || angle > FULL raise ArgumentError.new('Invalid angle!') end end