barretina 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -3
- data/Gemfile.lock +7 -7
- data/README.md +31 -1
- data/bin/barretina +19 -0
- data/bin/bcm +2 -0
- data/lib/barretina/canvas.rb +3 -0
- data/lib/barretina/vector_space/line.rb +36 -0
- data/lib/barretina/vector_space/vector.rb +50 -42
- data/lib/barretina/vector_space.rb +6 -2
- data/lib/barretina/vector_space_2d/line_2d.rb +12 -0
- data/lib/barretina/vector_space_2d/polygon.rb +36 -0
- data/lib/barretina/vector_space_2d/vector_2d.rb +71 -0
- data/lib/barretina/vector_space_2d.rb +11 -0
- data/lib/barretina/version.rb +1 -1
- data/lib/barretina.rb +8 -1
- metadata +8 -2
- data/lib/barretina/vector_space/extenders.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffc7c0e9a4bd67952488271345c86b2ac78177de604ca0c66df617c2243c8be4
|
4
|
+
data.tar.gz: 578af134723316525a9c79de0094c8395d43671e67ea17cbe19c74a1d2b5d492
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 869f990d92768bf90b2cdbafddc91afba9bac0220bce72e8967c6413e44e329b54e6f26f05a78202a4861f990d37c83540decd03666a4032be840033e78ad4e5
|
7
|
+
data.tar.gz: 1769112e3d0abe5967e7a11d425481d3156d44d5d515f98c3a89e9158be7513e9b7a58498f335ff2d4f42906b039f6164cff569f32e034272d354d5e24120204
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
barretina (0.1.
|
4
|
+
barretina (0.1.2)
|
5
5
|
irb (~> 1.15)
|
6
6
|
ruby2d (~> 0.12.1)
|
7
7
|
|
@@ -9,22 +9,23 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
date (3.4.1)
|
12
|
-
erb (5.0.
|
13
|
-
io-console (0.8.
|
12
|
+
erb (5.0.2)
|
13
|
+
io-console (0.8.1)
|
14
14
|
irb (1.15.2)
|
15
15
|
pp (>= 0.6.0)
|
16
16
|
rdoc (>= 4.0.0)
|
17
17
|
reline (>= 0.4.2)
|
18
|
+
minitest (5.25.5)
|
18
19
|
pp (0.6.2)
|
19
20
|
prettyprint
|
20
21
|
prettyprint (0.2.0)
|
21
22
|
psych (5.2.6)
|
22
23
|
date
|
23
24
|
stringio
|
24
|
-
rdoc (6.14.
|
25
|
+
rdoc (6.14.2)
|
25
26
|
erb
|
26
27
|
psych (>= 4.0.0)
|
27
|
-
reline (0.6.
|
28
|
+
reline (0.6.2)
|
28
29
|
io-console (~> 0.5)
|
29
30
|
ruby2d (0.12.1)
|
30
31
|
stringio (3.1.7)
|
@@ -35,8 +36,7 @@ PLATFORMS
|
|
35
36
|
|
36
37
|
DEPENDENCIES
|
37
38
|
barretina!
|
38
|
-
|
39
|
-
ruby2d (~> 0.12.1)
|
39
|
+
minitest (~> 5.25)
|
40
40
|
|
41
41
|
BUNDLED WITH
|
42
42
|
2.6.9
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Barretina
|
1
|
+
Barretina v0.2.0
|
2
2
|
=========
|
3
3
|
**WORK IN PROGRESS**
|
4
4
|
|
@@ -18,6 +18,13 @@ I write in a diary every big commit, and I summarize the evolution of the projec
|
|
18
18
|
|
19
19
|
[If you feel some interest, take a look to it now: it's free!](diary.md)
|
20
20
|
|
21
|
+
## Index of contents
|
22
|
+
|
23
|
+
- [BCM: Barretina Console Mode](#bcm-barretina-console-mode)
|
24
|
+
- [Run BCM](#run-bcm)
|
25
|
+
- [Tests](#tests)
|
26
|
+
- [Run tests](#run-tests)
|
27
|
+
|
21
28
|
## BCM: Barretina Console Mode
|
22
29
|
|
23
30
|
BCM is a way to run all Barretina's code without the graphic interface. I created with the intention to test while I work on this project.
|
@@ -38,3 +45,26 @@ bcm:002:0> q = VectorSpace::Vector.new 2, -3
|
|
38
45
|
bcm:003:0> p + q
|
39
46
|
-> #<Vector (3, 2)>
|
40
47
|
```
|
48
|
+
|
49
|
+
## Tests
|
50
|
+
|
51
|
+
I use [Minitest](https://github.com/minitest/minitest) to create some unit tests.
|
52
|
+
|
53
|
+
### Run tests
|
54
|
+
|
55
|
+
At the moment, you can run the tests manually as a Ruby file. Eg:
|
56
|
+
|
57
|
+
```
|
58
|
+
$ ruby test/barretina/vector_space/test_vector.rb
|
59
|
+
Run options: --seed 5323
|
60
|
+
|
61
|
+
# Running:
|
62
|
+
|
63
|
+
.........
|
64
|
+
|
65
|
+
Finished in 0.003157s, 2851.0290 runs/s, 19006.8599 assertions/s.
|
66
|
+
|
67
|
+
9 runs, 60 assertions, 0 failures, 0 errors, 0 skips
|
68
|
+
```
|
69
|
+
|
70
|
+
Eventually, I will reorganize in a Rake file.
|
data/bin/barretina
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'barretina'
|
6
|
+
require 'barretina/canvas'
|
7
|
+
|
8
|
+
set(
|
9
|
+
title: Barretina::TITLE,
|
10
|
+
background: '#AAAAAA',
|
11
|
+
diagnostics: true,
|
12
|
+
width: 1000,
|
13
|
+
height: 600,
|
14
|
+
# viewport_width: 500,
|
15
|
+
# viewport_height: 300,
|
16
|
+
resizable: true
|
17
|
+
)
|
18
|
+
|
19
|
+
show
|
data/bin/bcm
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Barretina
|
4
|
+
module VectorSpace
|
5
|
+
class Line
|
6
|
+
attr_accessor :p, :q
|
7
|
+
|
8
|
+
def initialize p, q
|
9
|
+
@p = p
|
10
|
+
@q = q
|
11
|
+
end
|
12
|
+
|
13
|
+
def length
|
14
|
+
v = @q - @p
|
15
|
+
Math.sqrt( v.coordenates.map{ |n| n**2 }.sum )
|
16
|
+
end
|
17
|
+
|
18
|
+
def == line
|
19
|
+
@p == line.p && @q == line.q
|
20
|
+
end
|
21
|
+
|
22
|
+
def != line
|
23
|
+
@p != line.p || @q != line.q
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
"#{@p}-#{@q}"
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def inspect
|
32
|
+
"#<Line #{self}>"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,57 +1,65 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def dimension
|
12
|
-
coordenates.count
|
13
|
-
end
|
3
|
+
module Barretina
|
4
|
+
module VectorSpace
|
5
|
+
class Vector
|
6
|
+
def self.[](*args)
|
7
|
+
Vector.new *args
|
8
|
+
end
|
14
9
|
|
15
|
-
|
16
|
-
add(vector, &:sum)
|
17
|
-
end
|
10
|
+
attr_accessor :coordenates
|
18
11
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def * scalar
|
24
|
-
Vector.new *coordenates.map { |c| c * scalar }
|
25
|
-
rescue => e
|
26
|
-
raise "Scalar value must be a Numeric instance (recomended Integer or Float), not a #{scalar.class}" unless scalar.is_a? Numeric
|
27
|
-
raise e
|
28
|
-
end
|
12
|
+
def initialize *args
|
13
|
+
@coordenates = args
|
14
|
+
end
|
29
15
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
raise "Impossible compare a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
|
34
|
-
raise e
|
35
|
-
end
|
16
|
+
def dimension
|
17
|
+
coordenates.count
|
18
|
+
end
|
36
19
|
|
37
|
-
|
38
|
-
|
39
|
-
|
20
|
+
def + vector
|
21
|
+
add(vector, &:sum)
|
22
|
+
end
|
40
23
|
|
41
|
-
|
42
|
-
|
43
|
-
|
24
|
+
def - vector
|
25
|
+
add(vector) { |array| array.inject(:-) }
|
26
|
+
end
|
44
27
|
|
45
|
-
|
46
|
-
|
47
|
-
|
28
|
+
def * scalar
|
29
|
+
Vector.new *coordenates.map { |c| c * scalar }
|
30
|
+
rescue => e
|
31
|
+
raise "Scalar value must be a Numeric instance (recomended Integer or Float), not a #{scalar.class}" unless scalar.is_a? Numeric
|
32
|
+
raise e
|
48
33
|
end
|
49
34
|
|
50
|
-
def
|
51
|
-
|
35
|
+
def == vector
|
36
|
+
coordenates == vector.coordenates
|
52
37
|
rescue => e
|
53
|
-
raise "Impossible
|
38
|
+
raise "Impossible compare a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
|
54
39
|
raise e
|
55
40
|
end
|
41
|
+
|
42
|
+
def != vector
|
43
|
+
!(self==vector)
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
"(#{coordenates.join(', ')})"
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def inspect
|
52
|
+
"#<Vector #{self}>"
|
53
|
+
end
|
54
|
+
|
55
|
+
def add vector, &block
|
56
|
+
Vector.new *[coordenates, vector.coordenates].transpose.map(&block)
|
57
|
+
rescue IndexError => e
|
58
|
+
raise IndexError, "Impossible add or substract vectors with different dimesions"
|
59
|
+
rescue => e
|
60
|
+
raise "Impossible add or substract a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
|
61
|
+
raise e
|
62
|
+
end
|
63
|
+
end
|
56
64
|
end
|
57
65
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Barretina
|
4
|
+
module VectorSpace2D
|
5
|
+
class Polygon
|
6
|
+
attr_reader :lines, :vertices
|
7
|
+
|
8
|
+
def initialize *vertices
|
9
|
+
@vertices = vertices
|
10
|
+
generate_lines
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_vertex vector
|
14
|
+
@vertices << vector
|
15
|
+
generate_lines
|
16
|
+
end
|
17
|
+
|
18
|
+
def insert_vertex vector, index
|
19
|
+
@vertices.insert index, vector
|
20
|
+
generate_lines
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def generate_lines
|
25
|
+
@lines = []
|
26
|
+
@vertices.each_with_index do |v, i|
|
27
|
+
@lines << Line2D.new(v, @vertices[i-1])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def inspect
|
32
|
+
"#<Polygon #{@vertices.join(' ')}>"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Barretina
|
2
|
+
module VectorSpace2D
|
3
|
+
class Vector2D < VectorSpace::Vector
|
4
|
+
class << self
|
5
|
+
def [](x, y)
|
6
|
+
Vector2D.new x, y
|
7
|
+
end
|
8
|
+
|
9
|
+
def zero
|
10
|
+
Vector2D.new 0, 0
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize x, y
|
15
|
+
@coordenates = [x, y]
|
16
|
+
end
|
17
|
+
|
18
|
+
def coordenates= coor
|
19
|
+
@coordenates = coor[0..1]
|
20
|
+
end
|
21
|
+
|
22
|
+
def x
|
23
|
+
@coordenates[0]
|
24
|
+
end
|
25
|
+
|
26
|
+
def y
|
27
|
+
@coordenates[1]
|
28
|
+
end
|
29
|
+
|
30
|
+
def x= x
|
31
|
+
@coordenates[0] = x
|
32
|
+
end
|
33
|
+
|
34
|
+
def y= y
|
35
|
+
@coordenates[1] = y
|
36
|
+
end
|
37
|
+
|
38
|
+
def + vector
|
39
|
+
Vector2D.new( x + vector.x, y + vector.y )
|
40
|
+
end
|
41
|
+
|
42
|
+
def - vector
|
43
|
+
Vector2D.new( x - vector.x, y - vector.y )
|
44
|
+
end
|
45
|
+
|
46
|
+
def * scalar
|
47
|
+
Vector2D.new( x * scalar, y * scalar)
|
48
|
+
end
|
49
|
+
|
50
|
+
def == vector
|
51
|
+
x == vector.x && y == vector.y
|
52
|
+
end
|
53
|
+
|
54
|
+
def != vector
|
55
|
+
x != vector.x || y != vector.y
|
56
|
+
end
|
57
|
+
|
58
|
+
def add! vector
|
59
|
+
@coordenates = [ x + vector.x, y + vector.y ]
|
60
|
+
end
|
61
|
+
|
62
|
+
def substract! vector
|
63
|
+
@coordenates = [ x - vector.x, y - vector.y ]
|
64
|
+
end
|
65
|
+
|
66
|
+
def scalar! scalar
|
67
|
+
@coordenates = [ x * scalar, y * scalar ]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'vector_space'
|
4
|
+
require_relative 'vector_space_2d/vector_2d'
|
5
|
+
require_relative 'vector_space_2d/line_2d'
|
6
|
+
require_relative 'vector_space_2d/polygon'
|
7
|
+
|
8
|
+
module Barretina
|
9
|
+
module VectorSpace2D
|
10
|
+
end
|
11
|
+
end
|
data/lib/barretina/version.rb
CHANGED
data/lib/barretina.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barretina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricard Ferrero
|
@@ -54,11 +54,17 @@ files:
|
|
54
54
|
- Gemfile.lock
|
55
55
|
- LICENSE
|
56
56
|
- README.md
|
57
|
+
- bin/barretina
|
57
58
|
- bin/bcm
|
58
59
|
- lib/barretina.rb
|
60
|
+
- lib/barretina/canvas.rb
|
59
61
|
- lib/barretina/vector_space.rb
|
60
|
-
- lib/barretina/vector_space/
|
62
|
+
- lib/barretina/vector_space/line.rb
|
61
63
|
- lib/barretina/vector_space/vector.rb
|
64
|
+
- lib/barretina/vector_space_2d.rb
|
65
|
+
- lib/barretina/vector_space_2d/line_2d.rb
|
66
|
+
- lib/barretina/vector_space_2d/polygon.rb
|
67
|
+
- lib/barretina/vector_space_2d/vector_2d.rb
|
62
68
|
- lib/barretina/version.rb
|
63
69
|
homepage: https://github.com/ricard-ferrero/barretina
|
64
70
|
licenses:
|