Class: Sevgi::Geometry::Segment

Inherits:
Data
  • Object
show all
Includes:
Comparable
Defined in:
lib/sevgi/geometry/segment.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#angleObject (readonly)

Returns the value of attribute angle

Returns:

  • (Object)

    the current value of angle



5
6
7
# File 'lib/sevgi/geometry/segment.rb', line 5

def angle
  @angle
end

#lengthObject (readonly)

Returns the value of attribute length

Returns:

  • (Object)

    the current value of 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

Returns:

  • (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))

#comObject



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

Returns:

  • (Boolean)


33
# File 'lib/sevgi/geometry/segment.rb', line 33

def eq?(other, precision: nil) = self.class.eq?(self, other, precision:)

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


35
# File 'lib/sevgi/geometry/segment.rb', line 35

def eql?(other) = self.class == other.class && deconstruct == other.deconstruct

#hashObject



37
# File 'lib/sevgi/geometry/segment.rb', line 37

def hash = [self.class, *deconstruct].hash

#infinite?Boolean

Returns:

  • (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]]

#lxObject



43
# File 'lib/sevgi/geometry/segment.rb', line 43

def lx = x.abs

#lyObject



45
# File 'lib/sevgi/geometry/segment.rb', line 45

def ly = y.abs

#nan?Boolean

Returns:

  • (Boolean)


47
# File 'lib/sevgi/geometry/segment.rb', line 47

def nan? = deconstruct.any?(&:nan?)

#reverseObject



49
# File 'lib/sevgi/geometry/segment.rb', line 49

def reverse = with(angle: angle + 180.0)

#supObject



51
# File 'lib/sevgi/geometry/segment.rb', line 51

def sup = angle - 180.0

#xObject



53
# File 'lib/sevgi/geometry/segment.rb', line 53

def x = length * F.cos(angle)

#yObject



55
# File 'lib/sevgi/geometry/segment.rb', line 55

def y = length * F.sin(angle)