Class: Sevgi::Geometry::Segment
- Inherits:
-
Data
- Object
- Data
- Sevgi::Geometry::Segment
- Includes:
- Comparable
- Defined in:
- lib/sevgi/geometry/segment.rb
Instance Attribute Summary collapse
-
#angle ⇒ Object
readonly
Returns the value of attribute angle.
-
#length ⇒ Object
readonly
Returns the value of attribute length.
Class Method Summary collapse
- .call(starting, ending) ⇒ Object
- .eq?(this, that, precision: nil) ⇒ Boolean
- .horizontal(length) ⇒ Object
- .horizontal!(length) ⇒ Object
- .vertical(length) ⇒ Object
- .vertical!(length) ⇒ Object
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #approx(precision = nil) ⇒ Object
- #com ⇒ Object
- #ending(starting) ⇒ Object
- #eq?(other, precision: nil) ⇒ Boolean
- #eql?(other) ⇒ Boolean
- #hash ⇒ Object
- #infinite? ⇒ Boolean
-
#initialize(length:, angle:) ⇒ Segment
constructor
A new instance of Segment.
- #line(point = Origin) ⇒ Object
- #lx ⇒ Object
- #ly ⇒ Object
- #nan? ⇒ Boolean
- #reverse ⇒ Object
- #sup ⇒ Object
- #x ⇒ Object
- #y ⇒ Object
Constructor Details
#initialize(length:, angle:) ⇒ Segment
Returns a new instance of Segment.
23 |
# File 'lib/sevgi/geometry/segment.rb', line 23 def initialize(length:, angle:) = super(length: length.to_f, angle: angle.to_f) |
Instance Attribute Details
#angle ⇒ Object (readonly)
Returns the value of attribute angle
5 6 7 |
# File 'lib/sevgi/geometry/segment.rb', line 5 def angle @angle end |
#length ⇒ Object (readonly)
Returns the value of attribute length
5 6 7 |
# File 'lib/sevgi/geometry/segment.rb', line 5 def length @length end |
Class Method Details
.call(starting, ending) ⇒ Object
8 9 10 11 |
# File 'lib/sevgi/geometry/segment.rb', line 8 def self.call(starting, ending) starting, ending = Tuples[Point, starting, ending] self[Point.length(starting, ending), Point.angle(starting, ending)] end |
.eq?(this, that, precision: nil) ⇒ Boolean
13 14 15 16 |
# File 'lib/sevgi/geometry/segment.rb', line 13 def self.eq?(this, that, precision: nil) this, that = Tuples[self, this, that] F.eq?(this.length, that.length, precision:) && F.eq?(this.angle, that.angle, precision:) end |
.horizontal(length) ⇒ Object
19 |
# File 'lib/sevgi/geometry/segment.rb', line 19 def self.horizontal(length) = self[length, 0.0] |
.horizontal!(length) ⇒ Object
18 |
# File 'lib/sevgi/geometry/segment.rb', line 18 def self.horizontal!(length) = self[length, 180.0] |
.vertical(length) ⇒ Object
21 |
# File 'lib/sevgi/geometry/segment.rb', line 21 def self.vertical(length) = self[length, 90.0] |
.vertical!(length) ⇒ Object
20 |
# File 'lib/sevgi/geometry/segment.rb', line 20 def self.vertical!(length) = self[length, -90.0] |
Instance Method Details
#<=>(other) ⇒ Object
25 |
# File 'lib/sevgi/geometry/segment.rb', line 25 def <=>(other) = (other = Tuple[Segment, other]).nan? || nan? ? nil : length <=> other.length |
#approx(precision = nil) ⇒ Object
27 |
# File 'lib/sevgi/geometry/segment.rb', line 27 def approx(precision = nil) = with(length: F.approx(length, precision), angle: F.approx(angle, precision)) |
#com ⇒ Object
29 |
# File 'lib/sevgi/geometry/segment.rb', line 29 def com = angle - 90.0 |
#ending(starting) ⇒ Object
31 |
# File 'lib/sevgi/geometry/segment.rb', line 31 def ending(starting) = Tuple[Point, starting].translate(x, y) |
#eq?(other, precision: nil) ⇒ Boolean
33 |
# File 'lib/sevgi/geometry/segment.rb', line 33 def eq?(other, precision: nil) = self.class.eq?(self, other, precision:) |
#eql?(other) ⇒ Boolean
35 |
# File 'lib/sevgi/geometry/segment.rb', line 35 def eql?(other) = self.class == other.class && deconstruct == other.deconstruct |
#hash ⇒ Object
37 |
# File 'lib/sevgi/geometry/segment.rb', line 37 def hash = [self.class, *deconstruct].hash |
#infinite? ⇒ Boolean
39 |
# File 'lib/sevgi/geometry/segment.rb', line 39 def infinite? = deconstruct.any?(&:infinite?) |
#line(point = Origin) ⇒ Object
41 |
# File 'lib/sevgi/geometry/segment.rb', line 41 def line(point = Origin) = Line[length, angle, position: Tuple[Point, point]] |
#lx ⇒ Object
43 |
# File 'lib/sevgi/geometry/segment.rb', line 43 def lx = x.abs |
#ly ⇒ Object
45 |
# File 'lib/sevgi/geometry/segment.rb', line 45 def ly = y.abs |
#nan? ⇒ Boolean
47 |
# File 'lib/sevgi/geometry/segment.rb', line 47 def nan? = deconstruct.any?(&:nan?) |
#reverse ⇒ Object
49 |
# File 'lib/sevgi/geometry/segment.rb', line 49 def reverse = with(angle: angle + 180.0) |
#sup ⇒ Object
51 |
# File 'lib/sevgi/geometry/segment.rb', line 51 def sup = angle - 180.0 |
#x ⇒ Object
53 |
# File 'lib/sevgi/geometry/segment.rb', line 53 def x = length * F.cos(angle) |
#y ⇒ Object
55 |
# File 'lib/sevgi/geometry/segment.rb', line 55 def y = length * F.sin(angle) |