rays 0.1.8 → 0.1.9

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
  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