aurora-geometry 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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