class Draught::Corner::JoinAngles

Attributes

incoming_line[R]
outgoing_line[R]

Public Class Methods

new(incoming_line, outgoing_line) click to toggle source
# File lib/draught/corner.rb, line 92
def initialize(incoming_line, outgoing_line)
  @incoming_line = incoming_line
  @outgoing_line = outgoing_line
end

Public Instance Methods

arc_sweep() click to toggle source
# File lib/draught/corner.rb, line 97
def arc_sweep
  anticlockwise? ? abs_arc_sweep : abs_arc_sweep * -1
end
tangent_distance(radius) click to toggle source
# File lib/draught/corner.rb, line 101
def tangent_distance(radius)
  radius / Math.tan(abs_corner_angle / 2.0)
end

Private Instance Methods

abs_arc_sweep() click to toggle source
# File lib/draught/corner.rb, line 138
def abs_arc_sweep
  @abs_arc_sweep ||= Math::PI - abs_corner_angle
end
abs_corner_angle() click to toggle source
# File lib/draught/corner.rb, line 107
def abs_corner_angle
  @abs_corner_angle ||= begin
    half_corner_angle = Math.asin(corner_top_line.length/incoming_corner_line.length)
    half_corner_angle * 2.0
  end
end
aligned_zeroed_lines() click to toggle source
# File lib/draught/corner.rb, line 154
def aligned_zeroed_lines
  @aligned_zeroed_lines ||= begin
    joined_lines = PathBuilder.connect(incoming_line, outgoing_line)
    zeroed_joined_lines = joined_lines.translate(Vector.translation_to_zero(joined_lines.first))
    zeroed_joined_lines.transform(Transformations.rotate(incoming_line.radians * -1))
  end
end
anticlockwise?() click to toggle source
# File lib/draught/corner.rb, line 142
def anticlockwise?
  !clockwise?
end
clockwise?() click to toggle source
# File lib/draught/corner.rb, line 146
def clockwise?
  if aligned_zeroed_lines[0].x > aligned_zeroed_lines[1].x
    aligned_zeroed_lines[0].y < aligned_zeroed_lines[2].y
  else
    aligned_zeroed_lines[0].y > aligned_zeroed_lines[2].y
  end
end
corner_top_line() click to toggle source
# File lib/draught/corner.rb, line 114
def corner_top_line
  @corner_top_line ||= begin
    corner_top_line = Line.build({
      start_point: incoming_corner_line.start_point, end_point: outgoing_corner_line.end_point
    })
    corner_top_line.extend(to: corner_top_line.length / 2.0)
  end
end
incoming_corner_line() click to toggle source
# File lib/draught/corner.rb, line 123
def incoming_corner_line
  @incoming_corner_line ||= zeroed_unit_line_segment(incoming_line, :last)
end
outgoing_corner_line() click to toggle source
# File lib/draught/corner.rb, line 127
def outgoing_corner_line
  @outgoing_corner_line ||= zeroed_unit_line_segment(outgoing_line, :first)
end
zeroed_unit_line_segment(segment, zero_to_point) click to toggle source
# File lib/draught/corner.rb, line 131
def zeroed_unit_line_segment(segment, zero_to_point)
  unit_line_segment = segment.extend(to: 1)
  unit_line_segment.translate(
    Vector.translation_to_zero(unit_line_segment.public_send(zero_to_point))
  )
end