geomotion 0.7.0 → 0.10.0
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.
- data/Gemfile.lock +1 -1
- data/Geomotion.gemspec +2 -2
- data/README.md +13 -4
- data/lib/geomotion/cg_point.rb +12 -0
- data/lib/geomotion/cg_size.rb +16 -0
- data/lib/geomotion/version.rb +1 -1
- data/spec/cg_point_spec.rb +20 -1
- data/spec/cg_size_spec.rb +28 -0
- metadata +5 -3
data/Gemfile.lock
CHANGED
data/Geomotion.gemspec
CHANGED
@@ -4,8 +4,8 @@ require File.expand_path('../lib/geomotion/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "geomotion"
|
6
6
|
s.version = Geomotion::VERSION
|
7
|
-
s.authors = ["Clay Allsopp"]
|
8
|
-
s.email = ["clay.allsopp@gmail.com"]
|
7
|
+
s.authors = ["Clay Allsopp", "Colin T.A. Gray"]
|
8
|
+
s.email = ["clay.allsopp@gmail.com", "colinta@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/clayallsopp/geomotion"
|
10
10
|
s.summary = "A RubyMotion Geometry Wrapper"
|
11
11
|
s.description = "A RubyMotion Geometry Wrapper"
|
data/README.md
CHANGED
@@ -138,7 +138,7 @@ will return a frame that is in the same coordinate system of the receiver, and
|
|
138
138
|
this behavior cannot be changed.
|
139
139
|
|
140
140
|
```ruby
|
141
|
-
frame = CGRect.
|
141
|
+
frame = CGRect.make(x: 10, y: 10, width:10, height: 10)
|
142
142
|
frame.beside
|
143
143
|
# => [[20, 10], [10, 10]]
|
144
144
|
|
@@ -173,7 +173,7 @@ numbers. If you specify absolute coordinates, the values might be negative, but
|
|
173
173
|
they will also be sorted (x == min, min < mid, mid < max, x + width == max).
|
174
174
|
|
175
175
|
```ruby
|
176
|
-
frame = CGRect.
|
176
|
+
frame = CGRect.make(x: 10, y: 10, width:10, height: 10)
|
177
177
|
frame.top_left # => [0, 0]
|
178
178
|
frame.top_center # => [5, 0]
|
179
179
|
frame.bottom_right # => [10, 10]
|
@@ -184,7 +184,7 @@ frame.top_center(true) # => [15, 10]
|
|
184
184
|
frame.bottom_right(true) # => [20, 20]
|
185
185
|
|
186
186
|
# negative widths and heights are "corrected" when using absolute coordinates
|
187
|
-
frame = CGRect.
|
187
|
+
frame = CGRect.make(x: 20, y: 20, width:-10, height: -10)
|
188
188
|
frame.top_center(true) # => [15, 10]
|
189
189
|
frame.bottom_right(true) # => [20, 20]
|
190
190
|
```
|
@@ -243,9 +243,18 @@ point + CGSize.make(width: 50, height: 20)
|
|
243
243
|
point.rect_of_size CGSize.make(width: 50, height: 20)
|
244
244
|
=> CGRect(10, 100, 50, 20)
|
245
245
|
|
246
|
-
#
|
246
|
+
# Compare with CGRect
|
247
247
|
point.inside? CGRect.make(x: 0, y: 0, width: 20, height: 110)
|
248
248
|
=> true
|
249
|
+
|
250
|
+
# Distance to point
|
251
|
+
point.distance_to(CGPoint.make(x: 13, y:104))
|
252
|
+
=> 5
|
253
|
+
|
254
|
+
# Angle between target and receiver
|
255
|
+
# (up 10, over 10)
|
256
|
+
point.angle_to(CGPoint.make(x: 20, y:110))
|
257
|
+
=> 0.785398163397 (pi/4)
|
249
258
|
```
|
250
259
|
|
251
260
|
## Install
|
data/lib/geomotion/cg_point.rb
CHANGED
@@ -37,6 +37,18 @@ class CGPoint
|
|
37
37
|
CGRectContainsPoint(rect, self)
|
38
38
|
end
|
39
39
|
|
40
|
+
def distance_to(point)
|
41
|
+
dx = self.x - point.x
|
42
|
+
dy = self.y - point.y
|
43
|
+
return Math.sqrt(dx**2 + dy**2)
|
44
|
+
end
|
45
|
+
|
46
|
+
def angle_to(point)
|
47
|
+
dx = point.x - self.x
|
48
|
+
dy = point.y - self.y
|
49
|
+
return Math.atan2(dy, dx)
|
50
|
+
end
|
51
|
+
|
40
52
|
# operator
|
41
53
|
def +(other)
|
42
54
|
case other
|
data/lib/geomotion/cg_size.rb
CHANGED
@@ -13,6 +13,22 @@ class CGSize
|
|
13
13
|
CGSizeZero.dup
|
14
14
|
end
|
15
15
|
|
16
|
+
def wider(dist)
|
17
|
+
CGSize.new(self.width + dist, self.height)
|
18
|
+
end
|
19
|
+
|
20
|
+
def thinner(dist)
|
21
|
+
CGSize.new(self.width - dist, self.height)
|
22
|
+
end
|
23
|
+
|
24
|
+
def taller(dist)
|
25
|
+
CGSize.new(self.width, self.height + dist)
|
26
|
+
end
|
27
|
+
|
28
|
+
def shorter(dist)
|
29
|
+
CGSize.new(self.width, self.height - dist)
|
30
|
+
end
|
31
|
+
|
16
32
|
# size = CGSize.make width: 100, height: 100
|
17
33
|
# point = CPPoint.make x:0, y:10
|
18
34
|
# size.rect_at_point(point) # => CGRect([0, 10], [100, 100])
|
data/lib/geomotion/version.rb
CHANGED
data/spec/cg_point_spec.rb
CHANGED
@@ -48,13 +48,32 @@ describe "CGPoint" do
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
describe "
|
51
|
+
describe "chaining up().down().left().right()" do
|
52
52
|
it "should work" do
|
53
53
|
point = CGPointMake(1, 1).up(2).down(1).left(2).right(1)
|
54
54
|
CGPointEqualToPoint(point, CGPointMake(0, 0)).should == true
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
describe "#distance_to" do
|
59
|
+
it "should work" do
|
60
|
+
point = CGPoint.make(x: 10, y: 100)
|
61
|
+
point.distance_to(CGPoint.make(x: 13, y:104)).should == 5
|
62
|
+
point.distance_to(CGPoint.make(x: 14, y:103)).should == 5
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#angle_to" do
|
67
|
+
it "should work" do
|
68
|
+
point = CGPoint.make(x: 0, y: 0)
|
69
|
+
point.angle_to(CGPoint.make(x: 10, y:0)).should == 0
|
70
|
+
(0.785 - point.angle_to(CGPoint.make(x: 10, y:10))).abs.should < 0.01 # ~= Math::PI/4
|
71
|
+
(1.57 - point.angle_to(CGPoint.make(x: 0, y:10))).abs.should < 0.01 # ~= Math::PI/2
|
72
|
+
(3.14 - point.angle_to(CGPoint.make(x: -10, y:0))).abs.should < 0.01 # ~= Math::PI
|
73
|
+
(-1.57 - point.angle_to(CGPoint.make(x: 0, y:-10))).abs.should < 0.01 # ~= -Math::PI/2
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
58
77
|
describe "#+" do
|
59
78
|
it "should work with CGSize" do
|
60
79
|
size = CGSizeMake(20, 30)
|
data/spec/cg_size_spec.rb
CHANGED
@@ -13,6 +13,34 @@ describe "CGSize" do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
describe "#wider" do
|
17
|
+
it "works" do
|
18
|
+
size = CGSize.new(0, 0).wider(20)
|
19
|
+
size.width.should == 20
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#thinner" do
|
24
|
+
it "works" do
|
25
|
+
size = CGSize.new(0, 0).thinner(20)
|
26
|
+
size.width.should == -20
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#taller" do
|
31
|
+
it "works" do
|
32
|
+
size = CGSize.new(0, 0).taller(20)
|
33
|
+
size.height.should == 20
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#shorter" do
|
38
|
+
it "works" do
|
39
|
+
size = CGSize.new(0, 0).shorter(20)
|
40
|
+
size.height.should == -20
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
16
44
|
describe "#rect_at_point" do
|
17
45
|
it "should work" do
|
18
46
|
point = CGPointMake(20, 30)
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geomotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Clay Allsopp
|
9
|
+
- Colin T.A. Gray
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
+
date: 2013-03-21 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rake
|
@@ -30,6 +31,7 @@ dependencies:
|
|
30
31
|
description: A RubyMotion Geometry Wrapper
|
31
32
|
email:
|
32
33
|
- clay.allsopp@gmail.com
|
34
|
+
- colinta@gmail.com
|
33
35
|
executables: []
|
34
36
|
extensions: []
|
35
37
|
extra_rdoc_files: []
|
@@ -69,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
71
|
version: '0'
|
70
72
|
requirements: []
|
71
73
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.8.
|
74
|
+
rubygems_version: 1.8.25
|
73
75
|
signing_key:
|
74
76
|
specification_version: 3
|
75
77
|
summary: A RubyMotion Geometry Wrapper
|