diff --git a/lib/geometry/segment.rb b/lib/geometry/segment.rb index 2f7f004..fb14de2 100644 --- a/lib/geometry/segment.rb +++ b/lib/geometry/segment.rb @@ -4,8 +4,8 @@ class SegmentsOverlap < Exception; end class Segment < Struct.new(:point1, :point2) def self.new_by_arrays(point1_coordinates, point2_coordinates) - self.new(Point.new_by_array(point1_coordinates), - Point.new_by_array(point2_coordinates)) + new(Point.new_by_array(point1_coordinates), + Point.new_by_array(point2_coordinates)) end def leftmost_endpoint @@ -55,14 +55,15 @@ def intersection_point_with(segment) numerator = (segment.point1.y - point1.y) * (segment.point1.x - segment.point2.x) - (segment.point1.y - segment.point2.y) * (segment.point1.x - point1.x); - denominator = (point2.y - point1.y) * (segment.point1.x - segment.point2.x) - + denominator = (point2.y - point1.y) * + (segment.point1.x - segment.point2.x) - (segment.point1.y - segment.point2.y) * (point2.x - point1.x); if numerator.is_a?(Integer) && denominator.is_a?(Integer) numerator = numerator.to_f end - t = numerator / denominator; + t = numerator / denominator x = point1.x + t * (point2.x - point1.x) y = point1.y + t * (point2.y - point1.y) diff --git a/test/segment/intersection_point_with_test.rb b/test/segment/intersection_point_with_test.rb index 2cd0756..cb8d9bb 100644 --- a/test/segment/intersection_point_with_test.rb +++ b/test/segment/intersection_point_with_test.rb @@ -1,6 +1,6 @@ require 'minitest/autorun' require 'geometry' -require 'bigdecimal' +require "bigdecimal" class IntersectionPointWithTest < Minitest::Test include Geometry @@ -20,14 +20,18 @@ def test_segments_intersect_at_the_endpoint end def test_big_decimal_segments_intersect_at_the_endpoint - segment1 = Segment.new_by_arrays([BigDecimal.new('-109.775390625'), BigDecimal.new('42.734102391081')], - [BigDecimal.new('-91.23046875'), BigDecimal.new('42.734102391081')]) - - segment2 = Segment.new_by_arrays([BigDecimal.new('-91.23046875'), BigDecimal.new('42.734102391081')], - [BigDecimal.new('-91.23046875'), BigDecimal.new('34.147272023649')]) - - - assert_equal Point.new(BigDecimal.new('-91.23046875'), BigDecimal.new('42.734102391081')), + segment1 = Segment.new_by_arrays([BigDecimal.new("-109.775390625"), + BigDecimal.new("42.734102391081")], + [BigDecimal.new("-91.23046875"), + BigDecimal.new("42.734102391081")]) + + segment2 = Segment.new_by_arrays([BigDecimal.new("-91.23046875"), + BigDecimal.new("42.734102391081")], + [BigDecimal.new("-91.23046875"), + BigDecimal.new("34.147272023649")]) + + assert_equal Point.new(BigDecimal.new("-91.23046875"), + BigDecimal.new("42.734102391081")), segment1.intersection_point_with(segment2) end