Class: Sevgi::Geometry::Parallelogram

Inherits:
ParallelogramBase
  • Object
show all
Defined in:
lib/sevgi/geometry/elements/parallelogram.rb

Overview

Closed four-sided element built from horizontal and vertical segments.

Class Method Summary collapse

Class Method Details

.[](horizontal, vertical, position: Origin) ⇒ Sevgi::Geometry::Parallelogram

Builds a parallelogram from adjacent horizontal and vertical segments.

Parameters:

Returns:

Raises:



18
19
20
21
22
# File 'lib/sevgi/geometry/elements/parallelogram.rb', line 18

def self.[](horizontal, vertical, position: Origin)
  horizontal, vertical = Tuples[Segment, horizontal, vertical]

  new_by_segments(horizontal, vertical.reverse, horizontal.reverse, vertical, position:)
end

.new_by_height(horizontal:, tallness:, position: Origin) ⇒ Sevgi::Geometry::Parallelogram

Builds a parallelogram from a horizontal segment and tallness constraint.

Parameters:

Returns:

Raises:



30
31
32
33
34
35
36
37
38
39
# File 'lib/sevgi/geometry/elements/parallelogram.rb', line 30

def self.new_by_height(horizontal:, tallness:, position: Origin)
  horizontal = Tuple[Segment, horizontal]
  tallness = Tuple[Polar, tallness]

  height = tallness.length - horizontal.y.abs
  angle = tallness.angle
  length = height / F.sin(angle)

  self[horizontal, Segment[length, angle], position:]
end

.new_by_width(vertical:, wideness:, position: Origin) ⇒ Sevgi::Geometry::Parallelogram

Builds a parallelogram from a vertical segment and wideness constraint.

Parameters:

Returns:

Raises:



47
48
49
50
51
52
53
54
55
56
# File 'lib/sevgi/geometry/elements/parallelogram.rb', line 47

def self.new_by_width(vertical:, wideness:, position: Origin)
  vertical = Tuple[Segment, vertical]
  wideness = Tuple[Polar, wideness]

  width = wideness.length - vertical.x.abs
  angle = wideness.angle
  length = width / F.cos(angle)

  self[Segment[length, angle], vertical, position:]
end