aurora-geometry 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +7 -0
  4. data/LICENSE +21 -0
  5. data/README.markdown +105 -0
  6. data/Rakefile +24 -0
  7. data/aurora-geometry.gemspec +23 -0
  8. data/lib/geometry.rb +22 -0
  9. data/lib/geometry/arc.rb +94 -0
  10. data/lib/geometry/circle.rb +122 -0
  11. data/lib/geometry/cluster_factory.rb +15 -0
  12. data/lib/geometry/edge.rb +140 -0
  13. data/lib/geometry/line.rb +154 -0
  14. data/lib/geometry/obround.rb +238 -0
  15. data/lib/geometry/path.rb +67 -0
  16. data/lib/geometry/point.rb +163 -0
  17. data/lib/geometry/point_zero.rb +107 -0
  18. data/lib/geometry/polygon.rb +368 -0
  19. data/lib/geometry/polyline.rb +318 -0
  20. data/lib/geometry/rectangle.rb +378 -0
  21. data/lib/geometry/regular_polygon.rb +136 -0
  22. data/lib/geometry/rotation.rb +190 -0
  23. data/lib/geometry/size.rb +75 -0
  24. data/lib/geometry/size_zero.rb +70 -0
  25. data/lib/geometry/square.rb +113 -0
  26. data/lib/geometry/text.rb +24 -0
  27. data/lib/geometry/transformation.rb +171 -0
  28. data/lib/geometry/transformation/composition.rb +39 -0
  29. data/lib/geometry/triangle.rb +78 -0
  30. data/lib/geometry/vector.rb +34 -0
  31. data/test/geometry.rb +5 -0
  32. data/test/geometry/arc.rb +25 -0
  33. data/test/geometry/circle.rb +112 -0
  34. data/test/geometry/edge.rb +132 -0
  35. data/test/geometry/line.rb +132 -0
  36. data/test/geometry/obround.rb +25 -0
  37. data/test/geometry/path.rb +66 -0
  38. data/test/geometry/point.rb +258 -0
  39. data/test/geometry/point_zero.rb +177 -0
  40. data/test/geometry/polygon.rb +214 -0
  41. data/test/geometry/polyline.rb +266 -0
  42. data/test/geometry/rectangle.rb +154 -0
  43. data/test/geometry/regular_polygon.rb +120 -0
  44. data/test/geometry/rotation.rb +108 -0
  45. data/test/geometry/size.rb +97 -0
  46. data/test/geometry/size_zero.rb +153 -0
  47. data/test/geometry/square.rb +66 -0
  48. data/test/geometry/transformation.rb +169 -0
  49. data/test/geometry/transformation/composition.rb +49 -0
  50. data/test/geometry/triangle.rb +32 -0
  51. data/test/geometry/vector.rb +41 -0
  52. metadata +115 -0
@@ -0,0 +1,49 @@
1
+ require 'minitest/autorun'
2
+ require 'geometry/transformation/composition'
3
+
4
+ describe Geometry::Transformation::Composition do
5
+ Composition = Geometry::Transformation::Composition
6
+ Transformation = Geometry::Transformation
7
+
8
+ subject { Composition.new }
9
+
10
+ describe "when constructed" do
11
+ it "must accept multiple transformations" do
12
+ composition = Composition.new(Transformation.new, Transformation.new)
13
+ composition.size.must_equal 2
14
+ end
15
+
16
+ it "must reject anything that isn't a Transformation" do
17
+ -> { Composition.new :foo }.must_raise TypeError
18
+ end
19
+ end
20
+
21
+ describe "attributes" do
22
+ describe "has_rotation?" do
23
+ it "must properly be true" do
24
+ Composition.new(Transformation.new angle:90).has_rotation?.must_equal true
25
+ end
26
+
27
+ it "must properly be false" do
28
+ subject.has_rotation?.must_equal false
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "when composing" do
34
+ it "must append a Transformation" do
35
+ (Composition.new(Transformation.new) + Transformation.new).size.must_equal 2
36
+ end
37
+
38
+ it "must merge with a Composition" do
39
+ (Composition.new(Transformation.new) + Composition.new(Transformation.new)).size.must_equal 2
40
+ end
41
+ end
42
+
43
+ describe "when transforming a Point" do
44
+ it "must handle composed translations" do
45
+ composition = Composition.new(Transformation.new origin:[1,2]) + Composition.new(Transformation.new [3,4])
46
+ composition.transform(Point[5,6]).must_equal Point[9, 12]
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ require 'minitest/autorun'
2
+ require 'geometry/triangle'
3
+
4
+ describe Geometry::Triangle do
5
+ Triangle = Geometry::Triangle
6
+
7
+ describe "when constructed with 3 points" do
8
+ let(:triangle) { Triangle.new [0,0], [0,1], [1,0] }
9
+
10
+ it "must create a scalene Triangle" do
11
+ triangle.must_be_instance_of Geometry::ScaleneTriangle
12
+ triangle.must_be_kind_of Triangle
13
+ end
14
+
15
+ it "must have a points accessor" do
16
+ triangle.points.must_equal [Point[0,0], Point[0,1], Point[1,0]]
17
+ end
18
+ end
19
+
20
+ describe "when constructed with a point and a leg length" do
21
+ let(:triangle) { Triangle.new [0,0], 1 }
22
+
23
+ it "must create a right Triangle" do
24
+ triangle.must_be_instance_of Geometry::RightTriangle
25
+ triangle.must_be_kind_of(Triangle)
26
+ end
27
+
28
+ it "must have a points accessor" do
29
+ triangle.points.must_equal [Point[0,0], Point[0,1], Point[1,0]]
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ require 'minitest/autorun'
2
+ require 'geometry/vector'
3
+
4
+ describe Vector do
5
+ describe "when monkeypatching Vector" do
6
+ let(:left) { Vector[1,2] }
7
+ let(:right) { Vector[3,4] }
8
+
9
+ it "must have +@" do
10
+ (+left).must_equal Vector[1,2]
11
+ end
12
+
13
+ it "must have unary negation" do
14
+ (-left).must_equal Vector[-1,-2]
15
+ end
16
+
17
+ it "must cross product" do
18
+ left.cross(right).must_equal -2
19
+ Vector[1,2,3].cross(Vector[3,4,5]).must_equal Vector[-2, 4, -2]
20
+ (Vector[1,2,3] ** Vector[3,4,5]).must_equal Vector[-2, 4, -2]
21
+ end
22
+
23
+ it "must have a constant representing the X axis" do
24
+ Vector::X.must_equal Vector[1,0,0]
25
+ end
26
+
27
+ it "must have a constant representing the Y axis" do
28
+ Vector::Y.must_equal Vector[0,1,0]
29
+ end
30
+
31
+ it "must have a constant representing the Z axis" do
32
+ Vector::Z.must_equal Vector[0,0,1]
33
+ end
34
+
35
+ it "must not create global axis constants" do
36
+ -> { X }.must_raise NameError
37
+ -> { Y }.must_raise NameError
38
+ -> { Z }.must_raise NameError
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aurora-geometry
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Brandon Fosdick
8
+ - Meseker Yohannes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-10 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Geometric primitives and algorithms for Ruby
15
+ email:
16
+ - meseker.yohannes@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - LICENSE
24
+ - README.markdown
25
+ - Rakefile
26
+ - aurora-geometry.gemspec
27
+ - lib/geometry.rb
28
+ - lib/geometry/arc.rb
29
+ - lib/geometry/circle.rb
30
+ - lib/geometry/cluster_factory.rb
31
+ - lib/geometry/edge.rb
32
+ - lib/geometry/line.rb
33
+ - lib/geometry/obround.rb
34
+ - lib/geometry/path.rb
35
+ - lib/geometry/point.rb
36
+ - lib/geometry/point_zero.rb
37
+ - lib/geometry/polygon.rb
38
+ - lib/geometry/polyline.rb
39
+ - lib/geometry/rectangle.rb
40
+ - lib/geometry/regular_polygon.rb
41
+ - lib/geometry/rotation.rb
42
+ - lib/geometry/size.rb
43
+ - lib/geometry/size_zero.rb
44
+ - lib/geometry/square.rb
45
+ - lib/geometry/text.rb
46
+ - lib/geometry/transformation.rb
47
+ - lib/geometry/transformation/composition.rb
48
+ - lib/geometry/triangle.rb
49
+ - lib/geometry/vector.rb
50
+ - test/geometry.rb
51
+ - test/geometry/arc.rb
52
+ - test/geometry/circle.rb
53
+ - test/geometry/edge.rb
54
+ - test/geometry/line.rb
55
+ - test/geometry/obround.rb
56
+ - test/geometry/path.rb
57
+ - test/geometry/point.rb
58
+ - test/geometry/point_zero.rb
59
+ - test/geometry/polygon.rb
60
+ - test/geometry/polyline.rb
61
+ - test/geometry/rectangle.rb
62
+ - test/geometry/regular_polygon.rb
63
+ - test/geometry/rotation.rb
64
+ - test/geometry/size.rb
65
+ - test/geometry/size_zero.rb
66
+ - test/geometry/square.rb
67
+ - test/geometry/transformation.rb
68
+ - test/geometry/transformation/composition.rb
69
+ - test/geometry/triangle.rb
70
+ - test/geometry/vector.rb
71
+ homepage: http://github.com/meseker/geometry
72
+ licenses: []
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project: aurora-geometry
90
+ rubygems_version: 2.0.3
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Geometric primitives and algoritms
94
+ test_files:
95
+ - test/geometry.rb
96
+ - test/geometry/arc.rb
97
+ - test/geometry/circle.rb
98
+ - test/geometry/edge.rb
99
+ - test/geometry/line.rb
100
+ - test/geometry/obround.rb
101
+ - test/geometry/path.rb
102
+ - test/geometry/point.rb
103
+ - test/geometry/point_zero.rb
104
+ - test/geometry/polygon.rb
105
+ - test/geometry/polyline.rb
106
+ - test/geometry/rectangle.rb
107
+ - test/geometry/regular_polygon.rb
108
+ - test/geometry/rotation.rb
109
+ - test/geometry/size.rb
110
+ - test/geometry/size_zero.rb
111
+ - test/geometry/square.rb
112
+ - test/geometry/transformation.rb
113
+ - test/geometry/transformation/composition.rb
114
+ - test/geometry/triangle.rb
115
+ - test/geometry/vector.rb