xrvg 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/CHANGES +8 -0
  2. data/README +1 -1
  3. data/Rakefile +36 -6
  4. data/examples/arciterate1.rb +13 -0
  5. data/examples/arcrecurse1.rb +30 -0
  6. data/examples/arcrecurse2.rb +37 -0
  7. data/examples/circleiterate1.rb +9 -0
  8. data/examples/circleiterate2.rb +11 -0
  9. data/examples/circleiterate3.rb +13 -0
  10. data/examples/circlerecurse1.rb +27 -0
  11. data/examples/circlerecurse2.rb +27 -0
  12. data/examples/circlerecurseall.rb +29 -0
  13. data/examples/euclideangeo.rb +11 -0
  14. data/examples/evolution1.rb +8 -0
  15. data/examples/evolution2.rb +9 -0
  16. data/examples/evolution3.rb +10 -0
  17. data/examples/fuseaugeo.rb +16 -0
  18. data/examples/gradientgeo.rb +21 -0
  19. data/examples/interbeziergeo1.rb +14 -0
  20. data/examples/interbeziergeo2.rb +17 -0
  21. data/examples/interbeziergeo3.rb +17 -0
  22. data/examples/offsetgeo.rb +16 -0
  23. data/lib/bezier.rb +37 -3
  24. data/lib/bezierbuilders.rb +17 -1
  25. data/lib/beziermotifs.rb +11 -4
  26. data/lib/bezierspline.rb +23 -1
  27. data/lib/beziertools.rb +48 -14
  28. data/lib/color.rb +55 -8
  29. data/lib/fitting.rb +2 -2
  30. data/lib/geometry2D.rb +10 -3
  31. data/lib/geovariety.rb +128 -0
  32. data/lib/interbezier.rb +4 -4
  33. data/lib/interpolation.rb +30 -17
  34. data/lib/parametriclength.rb +3 -2
  35. data/lib/render.rb +1 -2
  36. data/lib/samplation.rb +121 -19
  37. data/lib/shape.rb +2 -2
  38. data/lib/spiral.rb +72 -0
  39. data/lib/utils.rb +97 -76
  40. data/lib/xrvg.rb +3 -3
  41. data/test/test_bezier.rb +17 -2
  42. data/test/test_bezierbuilders.rb +1 -1
  43. data/test/test_beziertools.rb +7 -0
  44. data/test/test_color.rb +12 -0
  45. data/test/test_geovariety.rb +105 -0
  46. data/test/test_interpolation.rb +2 -1
  47. data/test/test_render.rb +0 -4
  48. data/test/test_sample.rb +28 -0
  49. data/test/test_spiral.rb +22 -0
  50. data/test/test_utils.rb +65 -40
  51. metadata +26 -2
@@ -0,0 +1,105 @@
1
+ require 'test/unit'
2
+ require 'geovariety'
3
+
4
+
5
+ class GeoVarietor
6
+ include GeoVariety
7
+ end
8
+
9
+ class GeoVarietyTest < Test::Unit::TestCase
10
+
11
+ def test_abstract
12
+ assert_raise(NotImplementedError){GeoVarietor[].point(V2D::O)}
13
+ assert_raise(NotImplementedError){GeoVarietor[].line(0.0,1.0,0.5)}
14
+ end
15
+ end
16
+
17
+ class InterBezierTest2 < Test::Unit::TestCase
18
+
19
+ def test_point
20
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
21
+ center = V2D::O
22
+ bezier2 = Bezier.raw( center, center, center, center )
23
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
24
+ assert( V2D.vequal?( interbezier.sample( 0.5 ).point( 0.5 ), interbezier.point( V2D[0.5,0.5] ) ) )
25
+ end
26
+
27
+ def test_line
28
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
29
+ center = V2D::O
30
+ bezier2 = Bezier.raw( center, center, center, center )
31
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
32
+ raw = interbezier.sample( 0.5 ).subbezier( 0.3, 0.7 )
33
+ geo = interbezier.line( 0.3, 0.7, 0.5 )
34
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
35
+ assert( V2D.vequal?( p1, p2 ) )
36
+ end
37
+ end
38
+
39
+ def test_bezier
40
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
41
+ center = V2D::O
42
+ bezier2 = Bezier.raw( center, center, center, center )
43
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
44
+
45
+ geo = interbezier.bezier( (V2D[0.0,0.5]..V2D[1.0,0.5]), bezier1 )
46
+ raw = LinearBezier[ :support, [V2D::O, V2D::X * 0.5] ]
47
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
48
+ assert( V2D.vequal?( p1, p2 ) )
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ class OffsetVarietyTest < Test::Unit::TestCase
55
+
56
+ def test_point
57
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
58
+ assert( V2D.vequal?( V2D[0.5,0.0], offsetvariety.point( V2D[0.5,0.5] ) ) )
59
+ end
60
+
61
+ def test_line
62
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
63
+ geo = offsetvariety.line( 0.25, 0.75, 0.75 )
64
+ raw = LinearBezier[ :support, [V2D[0.25,0.5], V2D[0.75,0.5]] ]
65
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
66
+ assert( V2D.vequal?( p1, p2 ) )
67
+ end
68
+ end
69
+
70
+ def test_bezier
71
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
72
+ geo = offsetvariety.bezier( (V2D[0.25,0.75]..V2D[0.75,0.75]), LinearBezier.buildwithangle( 0.0 ) )
73
+ raw = LinearBezier[ :support, [V2D[0.25,0.5], V2D[0.75,0.5]] ]
74
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
75
+ assert( V2D.vequal?( p1, p2 ) )
76
+ end
77
+ end
78
+ end
79
+
80
+ class FuseauVarietyTest < Test::Unit::TestCase
81
+
82
+ def test_point
83
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
84
+ assert( V2D.vequal?( V2D[0.5,0.0], offsetvariety.point( V2D[0.5,0.5] ) ) )
85
+ end
86
+
87
+ def test_line
88
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
89
+ geo = offsetvariety.line( 0.25, 0.75, 0.5 )
90
+ raw = LinearBezier[ :support, [V2D[0.0,0.0], V2D[1.0,0.0]] ].subbezier( 0.25, 0.75 )
91
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
92
+ assert( V2D.vequal?( p1, p2 ) )
93
+ end
94
+ end
95
+
96
+ def test_bezier
97
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
98
+ geo = offsetvariety.bezier( (V2D[0.25,0.5]..V2D[0.75,0.5]), LinearBezier.buildwithangle( 0.0 ) )
99
+ raw = LinearBezier[ :support, [V2D[0.25,0.0], V2D[0.75,0.0]] ]
100
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
101
+ assert( V2D.vequal?( p1, p2 ) )
102
+ end
103
+ end
104
+ end
105
+
@@ -4,7 +4,7 @@ require 'interpolation'
4
4
  class InterpolatorTest < Test::Unit::TestCase
5
5
 
6
6
  def test_quadtree
7
- quad = QuadTree.new( [0.0,1.0, 0.2,0.0, 0.6,1.0, 0.8,0.0, 1.0,1.0] )
7
+ quad = BinaryTree.new( [0.0,1.0, 0.2,0.0, 0.6,1.0, 0.8,0.0, 1.0,1.0] )
8
8
  assert_equal( [0.2,0.0, 0.6,1.0], quad.range( 0.5 ) )
9
9
  assert_equal( [0.0,1.0, 0.2,0.0], quad.range( 0.0 ) )
10
10
  assert_equal( [0.8,0.0, 1.0,1.0], quad.range( 1.0 ) )
@@ -22,6 +22,7 @@ class InterpolatorTest < Test::Unit::TestCase
22
22
  end
23
23
  def test_interpolation
24
24
  assert_raise(NotImplementedError) {A[].samplelist}
25
+ assert_equal( :linear, A[].interpoltype )
25
26
  end
26
27
 
27
28
  end
data/test/test_render.rb CHANGED
@@ -4,7 +4,6 @@ require 'render'
4
4
  class SVGRenderTest < Test::Unit::TestCase
5
5
 
6
6
  def test_render
7
- require 'shape'
8
7
  if File.exist?( "svgrender.svg" )
9
8
  File.delete( "svgrender.svg" )
10
9
  end
@@ -15,7 +14,6 @@ class SVGRenderTest < Test::Unit::TestCase
15
14
  end
16
15
 
17
16
  def test_render2
18
- require 'shape'
19
17
  if File.exist?( "svgrender.svg" )
20
18
  File.delete( "svgrender.svg" )
21
19
  end
@@ -29,7 +27,6 @@ class SVGRenderTest < Test::Unit::TestCase
29
27
  end
30
28
 
31
29
  def test_render3
32
- require 'shape'
33
30
  if File.exist?( "svgrender.svg" )
34
31
  File.delete( "svgrender.svg" )
35
32
  end
@@ -40,7 +37,6 @@ class SVGRenderTest < Test::Unit::TestCase
40
37
  end
41
38
 
42
39
  def test_render4
43
- require 'shape'
44
40
  if File.exist?( "svgrender.svg" )
45
41
  File.delete( "svgrender.svg" )
46
42
  end
@@ -0,0 +1,28 @@
1
+ require 'test/unit'
2
+ require 'xrvg'
3
+ include XRVG
4
+
5
+ class STest < Test::Unit::TestCase
6
+
7
+ def test_sample
8
+ # assert_equal( [0.0, 0.571428571428571, 0.857142857142857, 1.0], (0.0..1.0).geofull(2.0).samples( 4 ) )
9
+ assert_equal( [0.0, 0.5, 0.75], [(0.0..0.75)].geofull(2.0).samples( 3 ) )
10
+ end
11
+
12
+ def test_sin
13
+ [[0.0,0.0], (0.0..1.0).sin().samples( 2 )].forzip do |exp, real|
14
+ assert( exp.fequal?( real ) )
15
+ end
16
+ end
17
+
18
+ def test_random
19
+ result = (0.0..1.0).random.samples( 10 )
20
+ assert_not_equal( result, result.sort )
21
+ result = (0.0..1.0).random(:sort,true).samples( 10 )
22
+ assert_equal( result, result.sort )
23
+ result = (0.0..1.0).random(:mindiff, 0.01).samples( 10 )
24
+ assert_not_equal( result, result.sort )
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ # require 'XRVG'
3
+ # include XRVG
4
+
5
+ class SpiralTest < Test::Unit::TestCase
6
+
7
+ def test_abstract
8
+ assert_raise(NotImplementedError) {GSpiral.new.compute_radius( 0.0,0.0,0.0,0.0)}
9
+ end
10
+
11
+ def test_all
12
+ spiral = SpiralLog[]
13
+ # assert_equal( V2D::O, spiral.point( 1.0 ) )
14
+ assert_equal( V2D::X, spiral.point( 0.0 ) )
15
+ spiral = SpiralLinear[]
16
+ assert_equal( V2D::X, spiral.point( 0.0 ) )
17
+
18
+ assert_raise(NotImplementedError) {GSpiral.new.maxangle( 0.0,0.0,0.0)}
19
+ end
20
+
21
+ end
22
+
data/test/test_utils.rb CHANGED
@@ -1,39 +1,7 @@
1
1
  require 'test/unit'
2
- require 'utils'
2
+ require 'xrvg'
3
+ include XRVG
3
4
 
4
- class IntegerTest < Test::Unit::TestCase
5
-
6
- def test_denum!
7
- assert_equal( [10.0, 20.0, 30.0], (10.0..30.0).samples( 3 ) )
8
- end
9
-
10
- def test_numsplit!
11
- assert_equal( [0.0, 5.0, 10.0], (0.0..10.0).samples( 3 ) )
12
- end
13
-
14
- def test_itergeo!
15
- # assert_equal( [1.0, 0.246596963941606, 0.0608100626252179], (1.0..0.0).geo(2.8).samples(3) )
16
- end
17
-
18
- def test_randsplit1!
19
- result = 3.randsplit!
20
- assert_equal( 1.0, result[0] + result[1] + result[2] )
21
- assert_equal( [], 3.randsplit!( 4.0 ) )
22
- end
23
-
24
- def test_randsplitsum!
25
- result = 3.randsplitsum!
26
- puts "test_randsplitsum! result #{result.join(" ")}"
27
- result.each_cons(2) {|min, max| assert( min <= max )}
28
- end
29
-
30
- def test_randsplitsum2!
31
- result = 3.randsplitsum!(0.3)
32
- puts "test_randsplitsum! minsize result #{result.join(" ")}"
33
- result.each_cons(2) {|min, max| assert( min <= max )}
34
- end
35
-
36
- end
37
5
 
38
6
  class StringTest < Test::Unit::TestCase
39
7
 
@@ -151,9 +119,20 @@ class ArrayTest < Test::Unit::TestCase
151
119
 
152
120
  def test_range
153
121
  assert_equal( (1.0..5.0), [5.0,3.0,1.0].range )
122
+ assert_equal( (1.0..2.0), [V2D[2.0,1.0], V2D[1.0,2.0]].range( :x ) )
123
+ end
124
+
125
+ def test_sample
126
+ assert_equal( [0.0, 0.5, 0.75], [(0.0..0.75)].geofull(2.0).samples( 3 ) )
154
127
  end
155
128
 
129
+ def test_choice
130
+ assert_equal( 0.0, [0.0,0.0,0.0].choice )
131
+ end
156
132
 
133
+ def test_shuffle
134
+ assert_not_equal( [0.0, 0.1, 0.2, 0.5, 1.0], [0.0,0.1, 0.2, 0.5,1.0].shuffle )
135
+ end
157
136
  end
158
137
 
159
138
  class FloatTest < Test::Unit::TestCase
@@ -163,14 +142,17 @@ class FloatTest < Test::Unit::TestCase
163
142
  end
164
143
 
165
144
  def test_complement
166
- assert_equal( 0.75, 0.25.complement )
145
+ assert_equal( 0.75, (0.0..1.0).complement( 0.25 ) )
146
+ end
147
+
148
+ def test_fequal
149
+ assert( 0.25.fequal?( 0.26,0.02) )
150
+ assert_equal( false, 0.25.fequal?( 0.26,0.01) )
167
151
  end
168
152
 
169
- def test_randsplit
170
- assert_equal( 2, 0.25.randsplit.length )
171
- puts "randsplit 0.25 #{0.25.randsplit}"
172
- r = 0.25.randsplit
173
- assert_equal( 0.25, r[0] + r[1] )
153
+ def test_sort_float_list
154
+ assert_equal( [0.25], Float.sort_float_list([0.26,0.25], 0.02 ) )
155
+ assert_equal( [0.25,0.26], Float.sort_float_list([0.26,0.25], 0.01 ) )
174
156
  end
175
157
 
176
158
  def test_float_include
@@ -195,6 +177,20 @@ class RangeTest < Test::Unit::TestCase
195
177
  assert_not_equal( [0.0, 1.0], (0.0..1.0).ssort.random.samples(2))
196
178
  end
197
179
 
180
+ def test_random
181
+ result = Range.O.random(:mindiff,0.0).samples( 3 )
182
+ # what kinf of test ?
183
+ assert_raise(RuntimeError) {Range.O.random(:mindiff,6.0).samples( 3 )}
184
+ assert_equal( [0.0,1.0,2.0], (0.0..2.0).random(:mindiff,0.5,:sort,true).samples( 3 ) )
185
+ assert_not_equal( [0.0, 1.0], (0.0..1.0).random.samples(2))
186
+ assert_equal( [0.0, 0.5, 1.0], (0.0..1.0).random(:mindiff,0.5,:sort,true).samples(3))
187
+ assert_raise(RuntimeError) {(0.0..1.0).random(:mindiff,0.6).samples(3)}
188
+ end
189
+
190
+ def test_shuffle
191
+ assert_not_equal( [0.0, 0.25, 0.5, 0.75, 1.0], (0.0..1.0).shuffle.samples(5))
192
+ assert_equal( [0.0, 0.25, 0.5, 0.75, 1.0], (0.0..1.0).ssort.shuffle.samples(5))
193
+ end
198
194
 
199
195
  def test_samplesblock
200
196
  result = []
@@ -209,6 +205,31 @@ class RangeTest < Test::Unit::TestCase
209
205
  assert_equal( [(0.0..0.5), (0.5..1.0)], (0.0..1.0).splits(2) )
210
206
  end
211
207
 
208
+ def test_modulo
209
+ assert_equal( -0.5, (-1.0..1.5).modulo( 2.0 ) )
210
+ end
211
+
212
+ def test_modulos
213
+ assert_equal( [(0.2..0.3)], (0.0..1.0).modulos( (0.2..0.3) ) )
214
+ assert_equal( [(0.3..0.2)], (0.0..1.0).modulos( (0.3..0.2) ) )
215
+ [(0.0..1.0).modulos( (1.1..0.2) ), [(0.1..0.0), (1.0..0.2)]].forzip do |res, exp|
216
+ assert( res.begin.fequal?( exp.begin ) )
217
+ assert( res.end.fequal?( exp.end ) )
218
+ end
219
+ [(0.0..1.0).modulos( (0.2..1.1) ), [(0.2..1.0), (0.0..0.1)]].forzip do |res, exp|
220
+ assert( res.begin.fequal?( exp.begin ) )
221
+ assert( res.end.fequal?( exp.end ) )
222
+ end
223
+ [(0.0..1.0).modulos( (0.2..2.1) ), [(0.2..1.0), (0.0..1.0), (0.0..0.1)]].forzip do |res, exp|
224
+ assert( res.begin.fequal?( exp.begin ) )
225
+ assert( res.end.fequal?( exp.end ) )
226
+ end
227
+ end
228
+
229
+ def test_size
230
+ assert_equal( 1.2, (2.0..0.8).size )
231
+ end
232
+
212
233
  def test_splitblock
213
234
  result = []
214
235
  (0.0..1.0).splits(2) do |subrange|
@@ -331,6 +352,10 @@ class SampleTest < Test::Unit::TestCase
331
352
  assert_equal( 1.0, (0.0..1.0).geo(100.0).sample( 1.0 ) )
332
353
  end
333
354
 
355
+ def test_geofull
356
+ assert_equal( [0.0,2.0/3.0,1.0], (0.0..1.0).geofull(2.0).samples( 3 ))
357
+ end
358
+
334
359
  def test_alternate
335
360
  assert_equal( [1.0,1.5], (1.0..0.0).alternate.samples( [0.0,0.5] ) )
336
361
  assert_equal( [0.0,-0.5], AlternateFilter[(0.0..1.0)].samples( [0.0,0.5] ) )
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: xrvg
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.5
7
- date: 2008-03-22 00:00:00 +01:00
6
+ version: 0.0.6
7
+ date: 2008-08-06 00:00:00 +02:00
8
8
  summary: Ruby vector graphics library
9
9
  require_paths:
10
10
  - lib
@@ -40,27 +40,48 @@ files:
40
40
  - lib/fitting.rb
41
41
  - lib/frame.rb
42
42
  - lib/geometry2D.rb
43
+ - lib/geovariety.rb
43
44
  - lib/interbezier.rb
44
45
  - lib/interpolation.rb
45
46
  - lib/parametriclength.rb
46
47
  - lib/render.rb
47
48
  - lib/samplation.rb
48
49
  - lib/shape.rb
50
+ - lib/spiral.rb
49
51
  - lib/style.rb
50
52
  - lib/trace.rb
51
53
  - lib/utils.rb
52
54
  - lib/xrvg.rb
55
+ - examples/arciterate1.rb
56
+ - examples/arcrecurse1.rb
57
+ - examples/arcrecurse2.rb
53
58
  - examples/bezierbasic.rb
54
59
  - examples/bezierbasicvector.rb
60
+ - examples/circleiterate1.rb
61
+ - examples/circleiterate2.rb
62
+ - examples/circleiterate3.rb
63
+ - examples/circlerecurse1.rb
64
+ - examples/circlerecurse2.rb
65
+ - examples/circlerecurseall.rb
66
+ - examples/euclideangeo.rb
67
+ - examples/evolution1.rb
68
+ - examples/evolution2.rb
69
+ - examples/evolution3.rb
55
70
  - examples/foreach.rb
71
+ - examples/fuseaugeo.rb
56
72
  - examples/geodash.rb
57
73
  - examples/geodash2.rb
74
+ - examples/gradientgeo.rb
58
75
  - examples/hellocrown.rb
59
76
  - examples/hellocrown2.rb
60
77
  - examples/hellocrownrecurse.rb
61
78
  - examples/helloworldcompact.rb
62
79
  - examples/helloworldexpanded.rb
80
+ - examples/interbeziergeo1.rb
81
+ - examples/interbeziergeo2.rb
82
+ - examples/interbeziergeo3.rb
63
83
  - examples/multibezierbasic.rb
84
+ - examples/offsetgeo.rb
64
85
  - examples/palette_circle.rb
65
86
  - examples/randomdash.rb
66
87
  - examples/range_examples.rb
@@ -79,11 +100,14 @@ test_files:
79
100
  - test/test_fitting.rb
80
101
  - test/test_frame.rb
81
102
  - test/test_geometry2D.rb
103
+ - test/test_geovariety.rb
82
104
  - test/test_interbezier.rb
83
105
  - test/test_interpolation.rb
84
106
  - test/test_parametric_length.rb
85
107
  - test/test_render.rb
108
+ - test/test_sample.rb
86
109
  - test/test_shape.rb
110
+ - test/test_spiral.rb
87
111
  - test/test_style.rb
88
112
  - test/test_trace.rb
89
113
  - test/test_utils.rb