From 99ad2c89815b97fc5c6c98feab48939e3bb8335e Mon Sep 17 00:00:00 2001 From: Aditya Chowdhry Date: Sun, 28 Feb 2016 02:29:01 +0530 Subject: [PATCH 1/2] Added geometry: Distance b/w two points and congruence by SSS --- lib/unicode_math/geometry.rb | 47 ++++++++++++++++++++++++++++++ spec/unicode_math/geometry_spec.rb | 36 +++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 lib/unicode_math/geometry.rb create mode 100644 spec/unicode_math/geometry_spec.rb diff --git a/lib/unicode_math/geometry.rb b/lib/unicode_math/geometry.rb new file mode 100644 index 0000000..c6a7a8e --- /dev/null +++ b/lib/unicode_math/geometry.rb @@ -0,0 +1,47 @@ +# encoding: utf-8 + +module UnicodeMath + module Geometry + def self.included(base) + base.class_eval do + def calculate_distance(points1,points2) + Math.sqrt((points2[1]-points1[1])**2 + (points2[0]-points1[0])**2) + end + + define_method('↔') do |array| + calculate_distance(self,array) + end + + define_method('≅') do |array| + #SSS congruency + + dist1 = Array.new + dist2 = Array.new + if(self.size() == 1) + dist1 = 1 #Points are always congruent + else self.size() >= 2 + s = self.size() - 2 + (0..s).each do |i| + dist1.push(calculate_distance(self[i],self[i + 1])) + end + dist1.push(calculate_distance(self[s + 1],self[0])) + end + + if(array.size() == 1) + dist2 = 1 #Points are always congruent + else array.size() >= 2 + s = array.size() - 2 + (0..s).each do |i| + dist2.push(calculate_distance(array[i],array[i + 1])) + end + dist2.push(calculate_distance(array[s + 1],array[0])) + end + + (dist1 == dist2) + end + end + end + end +end + +Array.send(:include, UnicodeMath::Geometry) diff --git a/spec/unicode_math/geometry_spec.rb b/spec/unicode_math/geometry_spec.rb new file mode 100644 index 0000000..afc5540 --- /dev/null +++ b/spec/unicode_math/geometry_spec.rb @@ -0,0 +1,36 @@ +# encoding: utf-8 + +require 'spec_helper' + +describe UnicodeMath::Geometry do + before do + @triangle_points_1 = [[0,3],[3,0],[0,0]] + @triangle_points_2 = [[0,0],[0,5],[6,0]] + @line1 = [[0,0],[0,5]] + @line2 = [[2,0],[0,3]] + @point1 = [0,0] + @point2 = [0,3] + end + + it 'defines congruency in triangles' do + expect(@triangle_points_1.≅ @triangle_points_1).to eq(true) + end + + it 'defines congruency in triangles' do + expect(@triangle_points_1.≅ @triangle_points_2).to eq(false) + end + + + it 'defines congruent lines' do + expect(@line1.≅ @line1).to eq(true) + end + + it 'defines congruent lines' do + expect(@line1.≅ @line2).to eq(false) + end + + it 'defines distance between two points' do + expect(@point1.↔ @point2).to eq(3.0) + end + +end From 77bfaaec90db8d7aed1413c43c7b3ec8d6b33958 Mon Sep 17 00:00:00 2001 From: Aditya Chowdhry Date: Sun, 28 Feb 2016 12:48:08 +0530 Subject: [PATCH 2/2] Distance array required sort before comparing. --- lib/unicode_math/geometry.rb | 2 ++ spec/unicode_math/geometry_spec.rb | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/unicode_math/geometry.rb b/lib/unicode_math/geometry.rb index c6a7a8e..e7469d3 100644 --- a/lib/unicode_math/geometry.rb +++ b/lib/unicode_math/geometry.rb @@ -36,6 +36,8 @@ def calculate_distance(points1,points2) end dist2.push(calculate_distance(array[s + 1],array[0])) end + dist1 = dist1.sort + dist2 = dist2.sort (dist1 == dist2) end diff --git a/spec/unicode_math/geometry_spec.rb b/spec/unicode_math/geometry_spec.rb index afc5540..79fcd2a 100644 --- a/spec/unicode_math/geometry_spec.rb +++ b/spec/unicode_math/geometry_spec.rb @@ -5,7 +5,8 @@ describe UnicodeMath::Geometry do before do @triangle_points_1 = [[0,3],[3,0],[0,0]] - @triangle_points_2 = [[0,0],[0,5],[6,0]] + @triangle_points_2 = [[0,3],[0,0],[3,0]] + @triangle_points_3 = [[0,0],[0,5],[6,0]] @line1 = [[0,0],[0,5]] @line2 = [[2,0],[0,3]] @point1 = [0,0] @@ -13,11 +14,11 @@ end it 'defines congruency in triangles' do - expect(@triangle_points_1.≅ @triangle_points_1).to eq(true) + expect(@triangle_points_1.≅ @triangle_points_2).to eq(true) end it 'defines congruency in triangles' do - expect(@triangle_points_1.≅ @triangle_points_2).to eq(false) + expect(@triangle_points_1.≅ @triangle_points_3).to eq(false) end