Class: Sevgi::Geometry::Parallelogram
- Inherits:
-
ParallelogramBase
- Object
- Sevgi::Geometry::Parallelogram
- Defined in:
- lib/sevgi/geometry/elements/parallelogram.rb
Overview
Closed four-sided element built from horizontal and vertical segments.
Class Method Summary collapse
-
.[](horizontal, vertical, position: Origin) ⇒ Sevgi::Geometry::Parallelogram
Builds a parallelogram from adjacent horizontal and vertical segments.
-
.new_by_height(horizontal:, tallness:, position: Origin) ⇒ Sevgi::Geometry::Parallelogram
Builds a parallelogram from a horizontal segment and tallness constraint.
-
.new_by_width(vertical:, wideness:, position: Origin) ⇒ Sevgi::Geometry::Parallelogram
Builds a parallelogram from a vertical segment and wideness constraint.
Class Method Details
.[](horizontal, vertical, position: Origin) ⇒ Sevgi::Geometry::Parallelogram
Builds a parallelogram from adjacent horizontal and vertical segments.
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.
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.
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 |