barretina 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64f8031d289be9f2bff30c99bda0e544fd27f4bb8ff025bfb44e6509bbe9a996
4
- data.tar.gz: 9c53a15091e5d3b943a2da39f6ef4ab22eda8744434b68a79098177a93be632d
3
+ metadata.gz: 20d960486e39f7778941993915cdaf30acc903722410f66b0db78425ae2fbe48
4
+ data.tar.gz: 73d379fb2c9eca7a2718cf1d606dbddae363bf04b66688e8e3b804a91ae2db8a
5
5
  SHA512:
6
- metadata.gz: 7fea04d045bf2df3762176110880d17eb4c5110b0a66a2aaf06d587db601e8f1a4d6adf0fee2a67efb1b47f1a18e3c95eb6970f1840bd967189b65eaa51ea2de
7
- data.tar.gz: d88e8c6968a659cc6441fc540b70e772bd9d03fbd0d4672ac7ec226dc96fb56c7409ba4bc24d7224bc8b397f9b98a9e8b536d2df975eae03268b192cb705f849
6
+ metadata.gz: e05a861bbb738ff1260e90ab081ce8cb4460fa54976b5bece0a323410fc08efd01b10fc825507f60370cb34d3e9cc584c0cf4539f34f052da7f49e6c55680998
7
+ data.tar.gz: aca344fd246967a4e14851d0cec8ec0ac902828a0778842a381307bf10c15c33bb195462875177c4b5ace5a2ce3ab91b494fb5bfe206f956e4df6e4ef47633b4
data/Gemfile CHANGED
@@ -4,6 +4,4 @@ source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
6
 
7
- gem "ruby2d", "~> 0.12.1"
8
-
9
- gem "irb", "~> 1.15"
7
+ gem "minitest", "~> 5.25"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- barretina (0.1.0)
4
+ barretina (0.1.1)
5
5
  irb (~> 1.15)
6
6
  ruby2d (~> 0.12.1)
7
7
 
@@ -15,6 +15,7 @@ GEM
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)
@@ -35,8 +36,7 @@ PLATFORMS
35
36
 
36
37
  DEPENDENCIES
37
38
  barretina!
38
- irb (~> 1.15)
39
- ruby2d (~> 0.12.1)
39
+ minitest (~> 5.25)
40
40
 
41
41
  BUNDLED WITH
42
42
  2.6.9
data/README.md CHANGED
@@ -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
@@ -5,6 +5,8 @@ require 'bundler/setup'
5
5
  require 'barretina'
6
6
  require 'irb'
7
7
 
8
+ include Barretina::VectorSpace
9
+ include Barretina::VectorSpace2D
8
10
 
9
11
  puts "\e[1mBCM\e[0m - Barretina Console Mode"
10
12
 
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby2d'
@@ -0,0 +1,28 @@
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 to_s
19
+ "#{@p}-#{@q}"
20
+ end
21
+
22
+ private
23
+ def inspect
24
+ "#<Line #{self}>"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,57 +1,65 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module VectorSpace
4
- class Vector
5
- attr_accessor :coordenates
6
-
7
- def initialize *args
8
- @coordenates = args
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
- def + vector
16
- add(vector, &:sum)
17
- end
10
+ attr_accessor :coordenates
18
11
 
19
- def - vector
20
- add(vector) { |array| array.inject(:-) }
21
- end
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
- def == vector
31
- coordenates == vector.coordenates
32
- rescue => e
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
- def != vector
38
- !(self==vector)
39
- end
20
+ def + vector
21
+ add(vector, &:sum)
22
+ end
40
23
 
41
- def to_s
42
- "(#{coordenates.join(', ')})"
43
- end
24
+ def - vector
25
+ add(vector) { |array| array.inject(:-) }
26
+ end
44
27
 
45
- private
46
- def inspect
47
- "#<Vector #{self}>"
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 add vector, &block
51
- Vector.new *[coordenates, vector.coordenates].transpose.map(&block)
35
+ def == vector
36
+ coordenates == vector.coordenates
52
37
  rescue => e
53
- raise "Impossible add or substract a #{vector.class} to a SpaceVector::Vector" unless vector.is_a? Vector
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
@@ -1,5 +1,9 @@
1
- require_relative 'vector_space/extenders'
1
+ # frozen_string_literal: true
2
+
2
3
  require_relative 'vector_space/vector'
4
+ require_relative 'vector_space/line'
3
5
 
4
- module VectorSpace
6
+ module Barretina
7
+ module VectorSpace
8
+ end
5
9
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Barretina
4
+ module VectorSpace2D
5
+ class Line2D < VectorSpace::Line
6
+ def length
7
+ v = @q - @p
8
+ Math.sqrt( v.x**2 + v.y**2 )
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,30 @@
1
+ module Barretina
2
+ module VectorSpace2D
3
+ class Polygon
4
+ attr_reader :lines, :vertices
5
+
6
+ def initialize *vertices
7
+ @vertices = vertices
8
+ generate_lines
9
+ end
10
+
11
+ def add_vertex vector
12
+ @vertices << vector
13
+ generate_lines
14
+ end
15
+
16
+ def insert_vertex vector, index
17
+ @vertices.insert index, vector
18
+ generate_lines
19
+ end
20
+
21
+ private
22
+ def generate_lines
23
+ @lines = []
24
+ @vertices.each_with_index do |v, i|
25
+ @lines << Line2D.new(v, @vertices[i-1])
26
+ end
27
+ end
28
+ end
29
+ end
30
+ 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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Barretina
4
- VERSION = "0.1.0"
5
- end
4
+ VERSION = "0.1.2"
5
+ end
data/lib/barretina.rb CHANGED
@@ -1 +1,8 @@
1
- require 'barretina/vector_space'
1
+ # frozen_string_literal: true
2
+
3
+ require 'barretina/vector_space'
4
+ require 'barretina/vector_space_2d'
5
+
6
+ module Barretina
7
+ TITLE = "Barretina v#{VERSION}"
8
+ end
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.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricard Ferrero
@@ -38,6 +38,8 @@ dependencies:
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.15'
40
40
  description: |
41
+ WORK IN PROGRESS
42
+
41
43
  A 2D and 3D figure modeler. Or, in other words: my own Blender.
42
44
 
43
45
  It's a fun, chill and cozy project thah I enjoy doing,
@@ -52,11 +54,17 @@ files:
52
54
  - Gemfile.lock
53
55
  - LICENSE
54
56
  - README.md
57
+ - bin/barretina
55
58
  - bin/bcm
56
59
  - lib/barretina.rb
60
+ - lib/barretina/canvas.rb
57
61
  - lib/barretina/vector_space.rb
58
- - lib/barretina/vector_space/extenders.rb
62
+ - lib/barretina/vector_space/line.rb
59
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
60
68
  - lib/barretina/version.rb
61
69
  homepage: https://github.com/ricard-ferrero/barretina
62
70
  licenses:
@@ -82,5 +90,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
90
  requirements: []
83
91
  rubygems_version: 3.6.7
84
92
  specification_version: 4
85
- summary: A 2D and 3D figure modeler.
93
+ summary: A 2D and 3D figure modeler (WIP)
86
94
  test_files: []
@@ -1,11 +0,0 @@
1
- [Integer, Float].each do |numerical|
2
- numerical.class_eval do
3
- alias_method :__multiply__, :*
4
- private :__multiply__
5
-
6
- def * n
7
- return n * self if n.is_a? VectorSpace::Vector
8
- __multiply__ n
9
- end
10
- end
11
- end