rays 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f2deaef2e58ab1e422ce210d1f41f96e7560c1a
4
- data.tar.gz: d6d88f2c02d8220016a4091d349aa94d9a185334
3
+ metadata.gz: 7ebe243b01fc7a01ec4ff0a6cec05648f8cca592
4
+ data.tar.gz: 0865209e13e9aaaf678d215df4afe9b3262d094d
5
5
  SHA512:
6
- metadata.gz: e6c083d3c3a6c0243e891f6e20156bf1269eeb27dcbf2c9ecd98d4582c997d31de2acbd7fd0ddf898bc3778ebe3d609c176c0dad11c887b5c01b310cf342816b
7
- data.tar.gz: 2e71710878a684da44a4da37dbc9c283e8fbdd6e6dfcd7312ae7d9af4237044f09775f271495b664da2aaad842f5480beb38c899f65aa0a352479b1d6ea02ac2
6
+ metadata.gz: ef1548261bc1ef3d7710f47422ea7a8f6dda287fe452f619545b4bd7cda47837ada92b090eae6dedec51d758b70628d38f1e65adc381230cfa1d463c53fa648e
7
+ data.tar.gz: bae292886978f083b34fd2506960865591787ccebc3fb0c2f9bb0d6b6ef17cacdfe2219dbf84dcce5cbc585014775f06377c70009ad7930c31043f5f4f97d42b
@@ -132,17 +132,24 @@ static
132
132
  VALUE rect(VALUE self)
133
133
  {
134
134
  CHECK;
135
- check_arg_count(__FILE__, __LINE__, "Painter#rect", argc, 1, 4);
135
+ check_arg_count(__FILE__, __LINE__, "Painter#rect", argc, 1, 2, 3, 4, 5, 6);
136
136
 
137
- if (argc == 1)
138
- THIS->rect(to<Rays::Bounds&>(argv[0]));
137
+ if (argc <= 3)
138
+ {
139
+ Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
140
+ coord rw = argc >= 2 ? to<coord>(argv[1]) : 0;
141
+ coord rh = argc >= 3 ? to<coord>(argv[2]) : rw;
142
+ THIS->rect(b, rw, rh);
143
+ }
139
144
  else
140
145
  {
141
- coord x = to<coord>(argv[0]);
142
- coord y = to<coord>(argv[1]);
143
- coord w = to<coord>(argv[2]);
144
- coord h = to<coord>(argv[3]);
145
- THIS->rect(x, y, w, h);
146
+ coord x = to<coord>(argv[0]);
147
+ coord y = to<coord>(argv[1]);
148
+ coord w = to<coord>(argv[2]);
149
+ coord h = to<coord>(argv[3]);
150
+ coord rw = argc >= 5 ? to<coord>(argv[4]) : 0;
151
+ coord rh = argc >= 6 ? to<coord>(argv[5]) : rw;
152
+ THIS->rect(x, y, w, h, rw, rh);
146
153
  }
147
154
 
148
155
  return self;
@@ -184,23 +191,23 @@ VALUE arc(VALUE self)
184
191
  if (argv[0].is_kind_of(Rays::bounds_class()))
185
192
  {
186
193
  const Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
187
- float from = (argc >= 2) ? to<float>(argv[1]) : 0;
188
- float to_ = (argc >= 3) ? to<float>(argv[2]) : 360;
189
- coord min_ = (argc >= 4) ? to<coord>(argv[3]) : 0;
190
- uint nseg = (argc >= 5) ? to<uint> (argv[4]) : 0;
191
- THIS->arc(b, from, to_, min_, nseg);
194
+ float begin = (argc >= 2) ? to<float>(argv[1]) : 0;
195
+ float end = (argc >= 3) ? to<float>(argv[2]) : 360;
196
+ coord min_ = (argc >= 4) ? to<coord>(argv[3]) : 0;
197
+ uint nseg = (argc >= 5) ? to<uint> (argv[4]) : 0;
198
+ THIS->arc(b, begin, end, min_, nseg);
192
199
  }
193
200
  else
194
201
  {
195
- coord x = to<coord>(argv[0]);
196
- coord y = to<coord>(argv[1]);
197
- coord w = to<coord>(argv[2]);
198
- coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
199
- float from = (argc >= 5) ? to<float>(argv[4]) : 0;
200
- float to_ = (argc >= 6) ? to<float>(argv[5]) : 360;
201
- coord min_ = (argc >= 7) ? to<coord>(argv[6]) : 0;
202
- uint nseg = (argc >= 8) ? to<uint> (argv[7]) : 0;
203
- THIS->arc(x, y, w, h, from, to_, min_, nseg);
202
+ coord x = to<coord>(argv[0]);
203
+ coord y = to<coord>(argv[1]);
204
+ coord w = to<coord>(argv[2]);
205
+ coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
206
+ float begin = (argc >= 5) ? to<float>(argv[4]) : 0;
207
+ float end = (argc >= 6) ? to<float>(argv[5]) : 360;
208
+ coord min_ = (argc >= 7) ? to<coord>(argv[6]) : 0;
209
+ uint nseg = (argc >= 8) ? to<uint> (argv[7]) : 0;
210
+ THIS->arc(x, y, w, h, begin, end, min_, nseg);
204
211
  }
205
212
 
206
213
  return self;
@@ -95,6 +95,28 @@ VALUE move_by(VALUE self)
95
95
  return self;
96
96
  }
97
97
 
98
+ static
99
+ VALUE length(VALUE self)
100
+ {
101
+ CHECK;
102
+ return value(THIS->length());
103
+ }
104
+
105
+ static
106
+ VALUE normalize(VALUE self)
107
+ {
108
+ CHECK;
109
+ THIS->normalize();
110
+ return self;
111
+ }
112
+
113
+ static
114
+ VALUE normal(VALUE self)
115
+ {
116
+ CHECK;
117
+ return value(THIS->normal());
118
+ }
119
+
98
120
  static
99
121
  VALUE set_x(VALUE self, VALUE x)
100
122
  {
@@ -223,6 +245,9 @@ Init_point ()
223
245
  rb_define_private_method(cPoint, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
224
246
  cPoint.define_method("move_to!", move_to);
225
247
  cPoint.define_method("move_by!", move_by);
248
+ rb_define_method(cPoint, "length", RUBY_METHOD_FUNC(length), 0);
249
+ rb_define_method(cPoint, "normalize", RUBY_METHOD_FUNC(normalize), 0);
250
+ rb_define_method(cPoint, "normal", RUBY_METHOD_FUNC(normal), 0);
226
251
  rb_define_method(cPoint, "x=", RUBY_METHOD_FUNC(set_x), 1);
227
252
  rb_define_method(cPoint, "x", RUBY_METHOD_FUNC(get_x), 0);
228
253
  rb_define_method(cPoint, "y=", RUBY_METHOD_FUNC(set_y), 1);
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
@@ -141,17 +141,24 @@ static
141
141
  RUCY_DEFN(rect)
142
142
  {
143
143
  CHECK;
144
- check_arg_count(__FILE__, __LINE__, "Painter#rect", argc, 1, 4);
144
+ check_arg_count(__FILE__, __LINE__, "Painter#rect", argc, 1, 2, 3, 4, 5, 6);
145
145
 
146
- if (argc == 1)
147
- THIS->rect(to<Rays::Bounds&>(argv[0]));
146
+ if (argc <= 3)
147
+ {
148
+ Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
149
+ coord rw = argc >= 2 ? to<coord>(argv[1]) : 0;
150
+ coord rh = argc >= 3 ? to<coord>(argv[2]) : rw;
151
+ THIS->rect(b, rw, rh);
152
+ }
148
153
  else
149
154
  {
150
- coord x = to<coord>(argv[0]);
151
- coord y = to<coord>(argv[1]);
152
- coord w = to<coord>(argv[2]);
153
- coord h = to<coord>(argv[3]);
154
- THIS->rect(x, y, w, h);
155
+ coord x = to<coord>(argv[0]);
156
+ coord y = to<coord>(argv[1]);
157
+ coord w = to<coord>(argv[2]);
158
+ coord h = to<coord>(argv[3]);
159
+ coord rw = argc >= 5 ? to<coord>(argv[4]) : 0;
160
+ coord rh = argc >= 6 ? to<coord>(argv[5]) : rw;
161
+ THIS->rect(x, y, w, h, rw, rh);
155
162
  }
156
163
 
157
164
  return self;
@@ -195,23 +202,23 @@ RUCY_DEFN(arc)
195
202
  if (argv[0].is_kind_of(Rays::bounds_class()))
196
203
  {
197
204
  const Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
198
- float from = (argc >= 2) ? to<float>(argv[1]) : 0;
199
- float to_ = (argc >= 3) ? to<float>(argv[2]) : 360;
200
- coord min_ = (argc >= 4) ? to<coord>(argv[3]) : 0;
201
- uint nseg = (argc >= 5) ? to<uint> (argv[4]) : 0;
202
- THIS->arc(b, from, to_, min_, nseg);
205
+ float begin = (argc >= 2) ? to<float>(argv[1]) : 0;
206
+ float end = (argc >= 3) ? to<float>(argv[2]) : 360;
207
+ coord min_ = (argc >= 4) ? to<coord>(argv[3]) : 0;
208
+ uint nseg = (argc >= 5) ? to<uint> (argv[4]) : 0;
209
+ THIS->arc(b, begin, end, min_, nseg);
203
210
  }
204
211
  else
205
212
  {
206
- coord x = to<coord>(argv[0]);
207
- coord y = to<coord>(argv[1]);
208
- coord w = to<coord>(argv[2]);
209
- coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
210
- float from = (argc >= 5) ? to<float>(argv[4]) : 0;
211
- float to_ = (argc >= 6) ? to<float>(argv[5]) : 360;
212
- coord min_ = (argc >= 7) ? to<coord>(argv[6]) : 0;
213
- uint nseg = (argc >= 8) ? to<uint> (argv[7]) : 0;
214
- THIS->arc(x, y, w, h, from, to_, min_, nseg);
213
+ coord x = to<coord>(argv[0]);
214
+ coord y = to<coord>(argv[1]);
215
+ coord w = to<coord>(argv[2]);
216
+ coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
217
+ float begin = (argc >= 5) ? to<float>(argv[4]) : 0;
218
+ float end = (argc >= 6) ? to<float>(argv[5]) : 360;
219
+ coord min_ = (argc >= 7) ? to<coord>(argv[6]) : 0;
220
+ uint nseg = (argc >= 8) ? to<uint> (argv[7]) : 0;
221
+ THIS->arc(x, y, w, h, begin, end, min_, nseg);
215
222
  }
216
223
 
217
224
  return self;
@@ -100,6 +100,31 @@ RUCY_DEFN(move_by)
100
100
  }
101
101
  RUCY_END
102
102
 
103
+ static
104
+ RUCY_DEF0(length)
105
+ {
106
+ CHECK;
107
+ return value(THIS->length());
108
+ }
109
+ RUCY_END
110
+
111
+ static
112
+ RUCY_DEF0(normalize)
113
+ {
114
+ CHECK;
115
+ THIS->normalize();
116
+ return self;
117
+ }
118
+ RUCY_END
119
+
120
+ static
121
+ RUCY_DEF0(normal)
122
+ {
123
+ CHECK;
124
+ return value(THIS->normal());
125
+ }
126
+ RUCY_END
127
+
103
128
  static
104
129
  RUCY_DEF1(set_x, x)
105
130
  {
@@ -241,6 +266,9 @@ Init_point ()
241
266
  cPoint.define_private_method("initialize_copy", initialize_copy);
242
267
  cPoint.define_method("move_to!", move_to);
243
268
  cPoint.define_method("move_by!", move_by);
269
+ cPoint.define_method("length", length);
270
+ cPoint.define_method("normalize", normalize);
271
+ cPoint.define_method("normal", normal);
244
272
  cPoint.define_method("x=", set_x);
245
273
  cPoint.define_method("x", get_x);
246
274
  cPoint.define_method("y=", set_y);
@@ -24,6 +24,7 @@ namespace Rays
24
24
  union
25
25
  {
26
26
  struct {float red, green, blue, alpha;};
27
+ struct {float r, g, b, a;};
27
28
  float array[4];
28
29
  };
29
30
 
@@ -39,6 +39,13 @@ namespace Rays
39
39
 
40
40
  public:
41
41
 
42
+ enum
43
+ {
44
+
45
+ ELLIPSE_NSEGMENT = 32
46
+
47
+ };
48
+
42
49
  Painter ();
43
50
 
44
51
  ~Painter ();
@@ -76,9 +83,21 @@ namespace Rays
76
83
 
77
84
  void polygon (const Coord3* points, size_t size);
78
85
 
79
- void rect (coord x, coord y, coord width, coord height);
86
+ void rect (
87
+ coord x, coord y, coord width, coord height,
88
+ coord round = 0);
89
+
90
+ void rect (
91
+ coord x, coord y, coord width, coord height,
92
+ coord round_width, coord round_height);
80
93
 
81
- void rect (const Bounds& bounds);
94
+ void rect (
95
+ const Bounds& bounds,
96
+ coord round = 0);
97
+
98
+ void rect (
99
+ const Bounds& bounds,
100
+ coord round_width, coord round_height);
82
101
 
83
102
  void ellipse (
84
103
  coord x, coord y, coord width, coord height = 0,
@@ -242,7 +261,7 @@ namespace Rays
242
261
 
243
262
  void rotate (float angle, coord x = 0, coord y = 0, coord z = 1);
244
263
 
245
- void rotate (float angle, const Point& center);
264
+ void rotate (float angle, const Point& axis);
246
265
 
247
266
  void set_matrix (float value = 1);
248
267
 
@@ -68,6 +68,12 @@ namespace Rays
68
68
 
69
69
  Point& move_by (const Point& point);
70
70
 
71
+ coord length () const;
72
+
73
+ void normalize ();
74
+
75
+ Point normal () const;
76
+
71
77
  String inspect () const;
72
78
 
73
79
  Point operator - () const;
@@ -11,8 +11,16 @@ module Rays
11
11
 
12
12
  include Comparable
13
13
 
14
- def self.parse (str)
15
- Color.new str
14
+ def self.color (*args)
15
+ c = case arg0 = args[0]
16
+ when Color then arg0
17
+ when Symbol then COLORS[arg0]
18
+ when /^\s*#[\da-fA-F]+\s*$/ then Color.new arg0
19
+ when String then COLORS[arg0.intern]
20
+ else Color.new *args
21
+ end
22
+ raise ArgumentError, "invalid argument '#{args}.'" unless c
23
+ c
16
24
  end
17
25
 
18
26
  def initialize (*args)
@@ -73,13 +81,31 @@ module Rays
73
81
  "#<Rays::Color r=#{red}, g=#{green}, b=#{blue}, a=#{alpha}>"
74
82
  end
75
83
 
84
+ COLORS = {
85
+ black: [0, 0, 0],
86
+ red: [1, 0, 0],
87
+ green: [0, 1, 0],
88
+ blue: [0, 0, 1],
89
+ yellow: [1, 1, 0],
90
+ cyan: [0, 1, 1],
91
+ magenta: [1, 0, 1],
92
+ white: [1, 1, 1],
93
+ gray: [0.5, 0.5, 0.5],
94
+ no: [0, 0],
95
+ none: [0, 0],
96
+ nil: [0, 0],
97
+ }.inject({}) {|h, (k, v)| h[k] = Color.new *v; h}
98
+
76
99
  private
77
100
 
101
+ RE_RGBA = /^\s*##{'([\da-fA-F]{1})' * 4}?\s*$/
102
+ RE_RRGGBBAA = /^\s*##{'([\da-fA-F]{2})' * 4}?\s*$/
103
+
78
104
  def parse (str)
79
105
  case str
80
- when /^\s*##{'([\da-fA-F]{1})' * 4}?\s*$/
106
+ when RE_RGBA
81
107
  [$1, $2, $3, $4 || 'f' ].map {|s| s.to_i(16) / 15.0}
82
- when /^\s*##{'([\da-fA-F]{2})' * 4}?\s*$/
108
+ when RE_RRGGBBAA
83
109
  [$1, $2, $3, $4 || 'ff'].map {|s| s.to_i(16) / 255.0}
84
110
  else raise ArgumentError, "can not parse '#{str}'."
85
111
  end
@@ -99,18 +99,18 @@ module Rays
99
99
 
100
100
  private
101
101
 
102
- NONES = [:no, :none]
102
+ NONES = [:no, :none, nil]
103
103
 
104
104
  def send_set (setter, getter, no, args, mode = nil)
105
105
  args = args[0] if args[0].kind_of? Array
106
106
  raise ArgumentError if args.empty?
107
107
 
108
108
  arg0 = args[0]
109
- if args.size == 1 && (!arg0 || NONES.include?(arg0))
109
+ if args.size == 1 && NONES.include?(arg0)
110
110
  no ? send(no) : send(setter, nil)
111
111
  else
112
112
  case mode
113
- when :color then args = to_color(args)
113
+ when :color then args = Color.color *args
114
114
  end
115
115
  send setter, *args
116
116
  end
@@ -135,26 +135,6 @@ module Rays
135
135
  org
136
136
  end
137
137
 
138
- COLORS = {
139
- black: [0, 0, 0],
140
- red: [1, 0, 0],
141
- green: [0, 1, 0],
142
- blue: [0, 0, 1],
143
- yellow: [1, 1, 0],
144
- cyan: [0, 1, 1],
145
- magenta: [1, 0, 1],
146
- white: [1, 1, 1],
147
- gray: [0.5, 0.5, 0.5],
148
- }.inject({}) {|hash, (name, array)| hash[name] = Color.new *array; hash}
149
-
150
- def to_color (args)
151
- case arg0 = args[0]
152
- when Symbol then [COLORS[arg0]]
153
- when String then [(arg0 =~ /^\s*#[\da-fA-F]+\s*$/) ? Color.new(arg0) : COLORS[arg0.intern]]
154
- else args
155
- end
156
- end
157
-
158
138
  end# Painter
159
139
 
160
140
 
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  #include "rays/painter.h"
4
2
 
5
3
 
@@ -37,7 +35,7 @@ namespace Rays
37
35
  };// ColorType
38
36
 
39
37
 
40
- static const float PI = 3.141592653589793238462643383279f;
38
+ static const float PI = M_PI;
41
39
 
42
40
  static const float PI_2 = PI * 2;
43
41
 
@@ -486,7 +484,15 @@ namespace Rays
486
484
  }
487
485
 
488
486
  void
489
- Painter::rect (coord x, coord y, coord width, coord height)
487
+ Painter::rect (coord x, coord y, coord width, coord height, coord round)
488
+ {
489
+ rect(x, y, width, height, round, round);
490
+ }
491
+
492
+ void
493
+ Painter::rect (
494
+ coord x, coord y, coord width, coord height,
495
+ coord round_width, coord round_height)
490
496
  {
491
497
  static const GLenum MODES[] = {GL_TRIANGLE_FAN, GL_LINE_LOOP};
492
498
  static const uint INDICES[] =
@@ -523,12 +529,20 @@ namespace Rays
523
529
  }
524
530
 
525
531
  void
526
- Painter::rect (const Bounds& bounds)
532
+ Painter::rect (const Bounds& bounds, coord round)
527
533
  {
528
- rect(bounds.x, bounds.y, bounds.width, bounds.height);
534
+ rect(
535
+ bounds.x, bounds.y, bounds.width, bounds.height,
536
+ round);
529
537
  }
530
538
 
531
- static const uint ELLIPSE_NSEGMENT = 32;
539
+ void
540
+ Painter::rect (const Bounds& bounds, coord round_width, coord round_height)
541
+ {
542
+ rect(
543
+ bounds.x, bounds.y, bounds.width, bounds.height,
544
+ round_width, round_height);
545
+ }
532
546
 
533
547
  static void
534
548
  draw_ellipse (
@@ -546,7 +560,7 @@ namespace Rays
546
560
  invalid_state_error(__FILE__, __LINE__, "self->painting should be true.");
547
561
 
548
562
  if (height == 0) height = width;
549
- if (nsegment <= 0) nsegment = ELLIPSE_NSEGMENT;
563
+ if (nsegment <= 0) nsegment = Painter::ELLIPSE_NSEGMENT;
550
564
 
551
565
  coord radius_x = width / 2;
552
566
  coord radius_y = height / 2;
@@ -584,7 +598,7 @@ namespace Rays
584
598
  Coord2* vertex = vertices.get();
585
599
  assert(vertex);
586
600
 
587
- for (int seg = 0; seg < (int) nsegment; ++seg, ++vertex)
601
+ for (uint seg = 0; seg < nsegment; ++seg, ++vertex)
588
602
  {
589
603
  float pos = (float) seg / (float) nsegment;
590
604
  float radian = (from + (to - from) * pos) * PI_2;
@@ -619,7 +633,9 @@ namespace Rays
619
633
  Painter::ellipse (
620
634
  const Point& center, coord radius, coord radius_min, uint nsegment)
621
635
  {
622
- ellipse(center.x, center.y, radius * 2, radius * 2, radius_min, nsegment);
636
+ ellipse(
637
+ center.x - radius, center.y - radius, radius * 2, radius * 2,
638
+ radius_min, nsegment);
623
639
  }
624
640
 
625
641
  void
@@ -1193,9 +1209,9 @@ namespace Rays
1193
1209
  }
1194
1210
 
1195
1211
  void
1196
- Painter::rotate (float angle, const Point& center)
1212
+ Painter::rotate (float angle, const Point& axis)
1197
1213
  {
1198
- rotate(angle, center.x, center.y, center.z);
1214
+ rotate(angle, axis.x, axis.y, axis.z);
1199
1215
  }
1200
1216
 
1201
1217
  void
@@ -1,6 +1,7 @@
1
1
  #include "rays/point.h"
2
2
 
3
3
 
4
+ #include <math.h>
4
5
  #include <xot/string.h>
5
6
  #include "rays/exception.h"
6
7
 
@@ -114,6 +115,30 @@ namespace Rays
114
115
  return *this;
115
116
  }
116
117
 
118
+ coord
119
+ Point::length () const
120
+ {
121
+ return sqrt(x * x + y * y + z * z);
122
+ }
123
+
124
+ void
125
+ Point::normalize ()
126
+ {
127
+ coord len = length();
128
+ if (len == 0)
129
+ invalid_state_error(__FILE__, __LINE__);
130
+
131
+ *this /= len;
132
+ }
133
+
134
+ Point
135
+ Point::normal () const
136
+ {
137
+ Point t = *this;
138
+ t.normalize();
139
+ return t;
140
+ }
141
+
117
142
  String
118
143
  Point::inspect () const
119
144
  {
@@ -14,8 +14,8 @@ class TestColor < Test::Unit::TestCase
14
14
  color *[r, g, b, a].map {|n| n / div.to_f}
15
15
  end
16
16
 
17
- def parse (*args)
18
- Rays::Color.parse *args
17
+ def to_color (*args)
18
+ Rays::Color.color *args
19
19
  end
20
20
 
21
21
  def test_initialize ()
@@ -28,22 +28,22 @@ class TestColor < Test::Unit::TestCase
28
28
  assert_raise(ArgumentError) {color(1, 2, 3, 4, 5)}
29
29
  end
30
30
 
31
- def test_parse ()
32
- assert_equal color(0, 0, 0, 1), parse('#000')
33
- assert_equal color(0, 0, 0, 1), parse('#000000')
34
- assert_equal color(0, 0, 0, 0), parse('#0000')
35
- assert_equal color(0, 0, 0, 0), parse('#00000000')
36
- assert_equal color8(0x01, 0x23, 0x45, 0x67), parse('#01234567')
37
- assert_equal color8(0x89, 0xab, 0xcd, 0xef), parse('#89abcdef')
38
- assert_equal color8(0x0, 0x2, 0x4, 0x6, 15), parse('#0246')
39
- assert_equal color8(0x9, 0xb, 0xd, 0xf, 15), parse('#9bdf')
40
- assert_equal color(0, 0, 0, 1), parse(' #000 ')
41
- assert_raise(ArgumentError) {parse '#'}
42
- assert_raise(ArgumentError) {parse '000'}
43
- assert_raise(ArgumentError) {parse '#0'}
44
- assert_raise(ArgumentError) {parse '#00'}
45
- assert_raise(ArgumentError) {parse '#00000'}
46
- assert_raise(ArgumentError) {parse '#0000000'}
31
+ def test_color ()
32
+ assert_equal color(0, 0, 0, 1), to_color('#000')
33
+ assert_equal color(0, 0, 0, 1), to_color('#000000')
34
+ assert_equal color(0, 0, 0, 0), to_color('#0000')
35
+ assert_equal color(0, 0, 0, 0), to_color('#00000000')
36
+ assert_equal color8(0x01, 0x23, 0x45, 0x67), to_color('#01234567')
37
+ assert_equal color8(0x89, 0xab, 0xcd, 0xef), to_color('#89abcdef')
38
+ assert_equal color8(0x0, 0x2, 0x4, 0x6, 15), to_color('#0246')
39
+ assert_equal color8(0x9, 0xb, 0xd, 0xf, 15), to_color('#9bdf')
40
+ assert_equal color(0, 0, 0, 1), to_color(' #000 ')
41
+ assert_raise(ArgumentError) {to_color '#'}
42
+ assert_raise(ArgumentError) {to_color '000'}
43
+ assert_raise(ArgumentError) {to_color '#0'}
44
+ assert_raise(ArgumentError) {to_color '#00'}
45
+ assert_raise(ArgumentError) {to_color '#00000'}
46
+ assert_raise(ArgumentError) {to_color '#0000000'}
47
47
  end
48
48
 
49
49
  def test_get_rgb ()
@@ -78,6 +78,25 @@ class TestPoint < Test::Unit::TestCase
78
78
  assert_equal point(5, 7, 9), o1
79
79
  end
80
80
 
81
+ def test_length ()
82
+ assert_in_delta 0, point(0).length
83
+ assert_in_delta 1, point(1, 0, 0).length
84
+ assert_in_delta Math.sqrt(2), point(1, 1, 0).length
85
+ end
86
+
87
+ def test_normalize ()
88
+ assert_in_delta 1, point( 1, 0, 0) .normalize.length
89
+ assert_in_delta 1, point( 1, 1, 0) .normalize.length
90
+ assert_in_delta 1, point( 1, 1, 1) .normalize.length
91
+ assert_in_delta 1, point(-1, -1, -1) .normalize.length
92
+ assert_in_delta 1, point( 10, 200, 3000).normalize.length
93
+ assert_raise(Rucy::NativeError) {point(0).normalize}
94
+ end
95
+
96
+ def test_normal ()
97
+ assert_equal point(1, 2, 3).normalize, point(1, 2, 3).normal
98
+ end
99
+
81
100
  def test_to_a ()
82
101
  o = point 1, 2, 3
83
102
  assert_equal [1, 2], o.to_a
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rays
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - snori
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-24 00:00:00.000000000 Z
11
+ date: 2014-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake