coords 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +51 -3
- data/lib/coords/cartesian3d.rb +3 -0
- data/lib/coords/polar.rb +28 -0
- data/lib/coords/version.rb +1 -1
- data/spec/lib/coords/polar_spec.rb +20 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5650aafea9e3293dfabd0891b4b918454189af5d
|
4
|
+
data.tar.gz: 86475eb12664e5cc73ddeeab6b6ee528e03256c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8be3f54bd57d0287adb8188ef35dfd0ba22c766f7a77498d0ec195975255c272b8ae29ffff92d1218811092138998abe66447da2b7a1f55f8db54496855f47c1
|
7
|
+
data.tar.gz: 29f0df2c3e01fcc3354ecfea6846cf517106b731aa81397a93e2e95239a9d247572872bd1a4fd326f2114e8ce73685baa4a24535c622caeba5b0bd39a38c4521
|
data/README.md
CHANGED
@@ -19,11 +19,59 @@ Or install it yourself as:
|
|
19
19
|
$ gem install coords
|
20
20
|
|
21
21
|
## Usage
|
22
|
+
|
23
|
+
### Utilities
|
24
|
+
```ruby
|
25
|
+
# convert degrees to radians
|
26
|
+
Coords.radians(180)
|
27
|
+
=> 3.141592653589793
|
28
|
+
|
29
|
+
# convert radians to degrees
|
30
|
+
Coords.radians(Math::PI)
|
31
|
+
=> 180.0
|
32
|
+
```
|
33
|
+
|
34
|
+
### Cartesian (2D)
|
22
35
|
```ruby
|
23
|
-
|
24
|
-
|
25
|
-
|
36
|
+
# create a new point
|
37
|
+
p = Cartesian2d.new(1, 2)
|
38
|
+
|
39
|
+
# access point coordinates
|
40
|
+
p.x
|
41
|
+
=> 1
|
42
|
+
p.y
|
43
|
+
=> 2
|
44
|
+
|
45
|
+
# find distances between points
|
46
|
+
p2 = Cartesian2d.new(3, 3)
|
47
|
+
p.distance_squared(p2)
|
48
|
+
=> 5
|
49
|
+
p.distance(p2)
|
50
|
+
=> 2.23606797749979
|
51
|
+
|
52
|
+
# convert to polar coordinate system
|
53
|
+
p.to_polar
|
54
|
+
=> #<Coords::Polar @radius=2.2360679775, @theta=1.107148717794>
|
55
|
+
|
56
|
+
# translate coordinates (add values to them)
|
57
|
+
p.translate(1, 1)
|
58
|
+
=> #<Coords::Cartesian2d @x=2, @y=3>
|
59
|
+
|
60
|
+
# rotate point around origin
|
61
|
+
p.rotate(Coords.radians(180))
|
62
|
+
=> #<Coords::Cartesian2d @x=-1.0, @y=-2.0>
|
63
|
+
|
64
|
+
# reflect point against origin, line, x-axis or y-axis
|
65
|
+
p.reflect('origin')
|
66
|
+
=> #<Coords::Cartesian2d @x=-1, @y=-2>
|
67
|
+
p.reflect('line')
|
68
|
+
=> #<Coords::Cartesian2d @x=2, @y=1>
|
69
|
+
p.reflect('x')
|
70
|
+
=> #<Coords::Cartesian2d @x=1, @y=-2>
|
71
|
+
p.reflect('y')
|
72
|
+
=> #<Coords::Cartesian2d @x=-1, @y=2>
|
26
73
|
```
|
74
|
+
|
27
75
|
## Contributing
|
28
76
|
|
29
77
|
1. Fork it ( https://github.com/ceud/coords/fork )
|
data/lib/coords/cartesian3d.rb
CHANGED
@@ -48,16 +48,19 @@ module Coords
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def rotate!(rZ = 0, rX = 0, rY = 0)
|
51
|
+
# rotate clockwise around z axis
|
51
52
|
d = Math.hypot(y, x)
|
52
53
|
theta = Math.atan2(y, x) + rZ
|
53
54
|
@x = d * Math.cos(theta)
|
54
55
|
@y = d * Math.sin(theta)
|
55
56
|
|
57
|
+
# rotate clockwise around x axis
|
56
58
|
d = Math.hypot(y, z)
|
57
59
|
theta = Math.atan2(z, y) + rX
|
58
60
|
@y = d * Math.cos(theta)
|
59
61
|
@z = d * Math.sin(theta)
|
60
62
|
|
63
|
+
# rotate clockwise around y axis
|
61
64
|
d = Math.hypot(x, z)
|
62
65
|
theta = Math.atan2(x, z) + rY
|
63
66
|
@z = d * Math.cos(theta)
|
data/lib/coords/polar.rb
CHANGED
@@ -42,5 +42,33 @@ module Coords
|
|
42
42
|
radius.round(12) == point.radius.round(12) && theta.round(12) == point.theta.round(12)
|
43
43
|
end
|
44
44
|
|
45
|
+
def translate(radius2, theta2)
|
46
|
+
translated_point = Polar.new(radius, theta)
|
47
|
+
translated_point.translate!(radius2, theta2)
|
48
|
+
translated_point
|
49
|
+
end
|
50
|
+
|
51
|
+
def translate!(radius2, theta2)
|
52
|
+
c1 = self.to_cartesian
|
53
|
+
c2 = Polar.new(radius2, theta2).to_cartesian
|
54
|
+
c3 = c1.translate(c2.x, c2.y)
|
55
|
+
p = c3.to_polar
|
56
|
+
|
57
|
+
@radius = p.radius
|
58
|
+
@theta = p.theta
|
59
|
+
end
|
60
|
+
|
61
|
+
def rotate(radians)
|
62
|
+
rotated_point = Polar.new(radius, theta)
|
63
|
+
rotated_point.rotate!(radians)
|
64
|
+
rotated_point
|
65
|
+
end
|
66
|
+
|
67
|
+
def rotate!(radians)
|
68
|
+
@theta += radians
|
69
|
+
@theta -= (2 * Math::PI) while theta > (2 * Math::PI)
|
70
|
+
@theta += (2 * Math::PI) while theta < 0
|
71
|
+
end
|
72
|
+
|
45
73
|
end
|
46
74
|
end
|
data/lib/coords/version.rb
CHANGED
@@ -50,4 +50,24 @@ describe Coords::Polar do
|
|
50
50
|
expect(subject != point2).to be false
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
describe '#translate' do
|
55
|
+
it 'translates values to new point' do
|
56
|
+
point2 = subject.translate(2, 1)
|
57
|
+
expect(subject.radius).to eq(1)
|
58
|
+
expect(subject.theta).to eq(2)
|
59
|
+
expect(point2.radius).to eq(2.676043576528)
|
60
|
+
expect(point2.theta).to eq(1.319872910435)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#rotate' do
|
65
|
+
it 'rotates values to new point' do
|
66
|
+
point2 = subject.rotate(1)
|
67
|
+
expect(subject.radius).to eq(1)
|
68
|
+
expect(subject.theta).to eq(2)
|
69
|
+
expect(point2.radius).to eq(1)
|
70
|
+
expect(point2.theta).to eq(3)
|
71
|
+
end
|
72
|
+
end
|
53
73
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coords
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Allan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|