propane 2.6.3-java → 2.6.4-java

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
  SHA256:
3
- metadata.gz: b5e175ffb6251f6ebd08d7da7c1f58325815d89cc841b673312917d1f236e408
4
- data.tar.gz: a6c5b01f29d2480816ff0a1e34c2b27fdef8df51159909e31feceda3d0f7ec0b
3
+ metadata.gz: d7f3de4bd8418392ef49868c1b9d4bd2e168244755252d6394fb189993839b2a
4
+ data.tar.gz: 9f80f038be43becd118acf8eddc35a5bec22d6e5a17cfcf63d2c6d0815db154d
5
5
  SHA512:
6
- metadata.gz: 785f838e0407abef9ab1c362677c41c02dab982e4f00360c84481511468149a198a68e010f12203c3b79a650ca1350bd548c8729003632f13029efdb538af4b7
7
- data.tar.gz: 1d29953379ad1a762c50e63345ac1431e96cd2db51346e6c0c56246ff3b9590bba4e9e8d13a94970b3541f0639b38005dc15e90f41bc3f631522b03de159b368
6
+ metadata.gz: 4bd4abb66d417dcc612ddf4a90bb99bf55a21ddd68bac3c548706254128bb077b667e6e89c4ef1c11e83041cf4b0019259539af402a371ddf9802b282f214272
7
+ data.tar.gz: 2d9ed609a98abf21129dbeb9cc1d1e69e707e1fbb86343daf02d2a4e345d4f3573b4d4aa5187074b89edb4f402b52be3b4c7afc958031899c8ebde17be0f3a5f
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ sudo: false
3
3
  dist: trusty
4
4
 
5
5
  rvm:
6
- - jruby-9.1.12.0
6
+ - jruby-9.1.16.0
7
7
  jdk:
8
8
  - oraclejdk8
9
9
  os:
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
- **v2.6.3** Bump recommended upgrade to jruby-9.1.15.0, possibly the last in 9.1 series?
1
+ **v2.6.4** Vec2D and Vec3D now support `copy` constructor where the original can be a duck-type. Further the only requirement is that the duck-type responds to `:x`, and `:y` by returning a `float` or `fixnum` thus Vec2D can be promoted to Vec3D (where `z = 0`), or more usually some other Vector or Point class can be used as the original. A VectorUtils library has been implemented, see examples for usage.
2
+
3
+ **v2.6.3** Bump recommended upgrade to jruby-9.1.16.0, possibly the last in 9.1 series?
2
4
 
3
5
  **v2.6.2** Features example sketches using the PixelFlow library by Thomas Diewald
4
6
 
data/README.md CHANGED
@@ -13,7 +13,7 @@ adjust above for your OS/distro setup.
13
13
  ## Requirements
14
14
 
15
15
  - jdk8+
16
- - jruby-9.1.15.0
16
+ - jruby-9.1.16.0
17
17
  - mvn-3.5.0+
18
18
  - core.jar processing-3.3.6 (_build only_)
19
19
 
@@ -28,7 +28,7 @@ rake javadoc
28
28
  ## Installation
29
29
  ```bash
30
30
  jgem install propane # from rubygems
31
- jgem install propane-2.6.0-java.gem # for local install
31
+ jgem install propane-2.6.4-java.gem # for local install
32
32
  ```
33
33
 
34
34
  ## Usage
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Propane
3
- VERSION = '2.6.3'.freeze
3
+ VERSION = '2.6.4'.freeze
4
4
  end
@@ -0,0 +1,69 @@
1
+ PHI ||= (1 + Math.sqrt(5)) / 2 # golden ratio
2
+ GA = PHI * 2 * Math::PI # golden angle
3
+
4
+ # Useful Vector Utiliies
5
+ module VectorUtil
6
+ def self.rotate_vec2d(vectors: [], angle: 0)
7
+ vectors.map { |vector| vector.rotate(angle) }
8
+ end
9
+
10
+ def self.vogel_layout(number:, node_size:)
11
+ (0..number).map do |i|
12
+ r = Math.sqrt(i)
13
+ theta = i * ((2 * Math::PI) / (PHI * PHI))
14
+ x = Math.cos(theta) * r * node_size
15
+ y = Math.sin(theta) * r * node_size
16
+ Vec2D.new(x, y)
17
+ end
18
+ end
19
+
20
+ def self.fibonacci_sphere(number:, radius:)
21
+ (0..number).map do |i|
22
+ lon = GA * i
23
+ lon /= 2 * Math::PI
24
+ lon -= lon.floor
25
+ lon *= 2 * Math::PI
26
+ lon -= 2 * Math::PI if lon > Math::PI
27
+ lat = Math.asin(-1 + 2 * i / number.to_f)
28
+ x = radius * Math.cos(lat) * Math.cos(lon)
29
+ y = radius * Math.cos(lat) * Math.sin(lon)
30
+ z = radius * Math.sin(lat)
31
+ Vec3D.new(x, y, z)
32
+ end
33
+ end
34
+
35
+ def self.spiral_layout(number:, radius:, resolution:, spacing:, inc:)
36
+ n = 0
37
+ angle = nil
38
+ (0..number).map do
39
+ angle = n * resolution
40
+ n += inc
41
+ radius -= angle * spacing
42
+ x = Math.cos(angle) * radius
43
+ y = Math.sin(angle) * radius
44
+ Vec2D.new(x, y)
45
+ end
46
+ end
47
+
48
+ def self.cartesian_to_polar(vec:)
49
+ res = Vec3D.new(vec.mag, 0, 0)
50
+ return Vec3D.new unless res.x > 0
51
+ res.y = -Math.atan2(vec.z, vec.x)
52
+ res.z = Math.asin(vec.y / res.x)
53
+ res
54
+ end
55
+
56
+ def self.to_cartesian(lat:, long:, radius:)
57
+ latitude = lat
58
+ longitude = long
59
+ x = radius * Math.cos(latitude) * Math.cos(longitude)
60
+ y = radius * Math.cos(latitude) * Math.sin(longitude)
61
+ z = radius * Math.sin(latitude)
62
+ Vec3D.new(x, y, z)
63
+ end
64
+
65
+ def self.polar_to_cartesian(vec:)
66
+ return Vec3D.new if vec.mag <= 0
67
+ Vec3D.new(Math.asin(vec.y / vec.mag), vec.mag, -Math.atan2(vec.z, vec.x))
68
+ end
69
+ end
data/pom.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'fileutils'
2
2
  project 'rp5extras', 'https://github.com/monkstone/propane' do
3
3
  model_version '4.0.0'
4
- id 'propane:propane', '2.6.3'
4
+ id 'propane:propane', '2.6.4'
5
5
  packaging 'jar'
6
6
  description 'rp5extras for propane'
7
7
  organization 'ruby-processing', 'https://ruby-processing.github.io'
@@ -32,7 +32,7 @@ project 'rp5extras', 'https://github.com/monkstone/propane' do
32
32
  'jogl.version' => '2.3.2'
33
33
  )
34
34
 
35
- pom 'org.jruby:jruby:9.1.15.0'
35
+ pom 'org.jruby:jruby:9.1.16.0'
36
36
  jar 'org.processing:core:3.3.6'
37
37
  jar 'org.processing:video:3.0.2'
38
38
  jar('org.jogamp.jogl:jogl-all:${jogl.version}')
data/pom.xml CHANGED
@@ -11,7 +11,7 @@ DO NOT MODIFIY - GENERATED CODE
11
11
  <modelVersion>4.0.0</modelVersion>
12
12
  <groupId>propane</groupId>
13
13
  <artifactId>propane</artifactId>
14
- <version>2.6.3</version>
14
+ <version>2.6.4</version>
15
15
  <name>rp5extras</name>
16
16
  <description>rp5extras for propane</description>
17
17
  <url>https://github.com/monkstone/propane</url>
@@ -58,7 +58,7 @@ DO NOT MODIFIY - GENERATED CODE
58
58
  <dependency>
59
59
  <groupId>org.jruby</groupId>
60
60
  <artifactId>jruby</artifactId>
61
- <version>9.1.15.0</version>
61
+ <version>9.1.16.0</version>
62
62
  <type>pom</type>
63
63
  </dependency>
64
64
  <dependency>
data/propane.gemspec CHANGED
@@ -10,9 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ['mamba2928@yahoo.co.uk']
11
11
  gem.licenses = %w(GPL-3.0 LGPL-2.0)
12
12
  gem.description = <<-EOS
13
- A batteries included version of processing in ruby, for MacOS and linux64. The
14
- current release features several PixelFlow glsl library examples, including a
15
- few shadertoy demos as sketches.
13
+ A batteries included version of processing in ruby, for MacOS and linux64.
16
14
  EOS
17
15
  gem.summary = %q{ruby wrapper for processing-3.3.6 on MacOS and linux64 bit only for opengl}
18
16
  gem.homepage = 'https://ruby-processing.github.io/propane/'
@@ -27,9 +25,10 @@ Gem::Specification.new do |gem|
27
25
  gem.files << 'lib/jogl-all-2.3.2-natives-macosx-universal.jar'
28
26
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
29
27
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
30
- gem.add_development_dependency 'rake', '~> 12'
28
+ gem.add_development_dependency 'rake', '~> 12.3'
31
29
  gem.add_development_dependency 'minitest', '~> 5.10'
32
30
  gem.add_runtime_dependency 'arcball', '~> 1.0', '>= 1.0.0'
33
31
  gem.require_paths = ['lib']
34
32
  gem.platform = 'java'
33
+ gem.requirements << 'java runtime >= 1.8.0_151+'
35
34
  end
@@ -1,20 +1,20 @@
1
1
  package monkstone.vecmath.vec2;
2
2
 
3
- /*
3
+ /*
4
4
  * Copyright (c) 2015-17 Martin Prout
5
- *
5
+ *
6
6
  * This library is free software; you can redistribute it and/or
7
7
  * modify it under the terms of the GNU Lesser General Public
8
8
  * License as published by the Free Software Foundation; either
9
9
  * version 2.1 of the License, or (at your option) any later version.
10
- *
10
+ *
11
11
  * http://creativecommons.org/licenses/LGPL/2.1/
12
- *
12
+ *
13
13
  * This library is distributed in the hope that it will be useful,
14
14
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
15
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
16
  * Lesser General Public License for more details.
17
- *
17
+ *
18
18
  * You should have received a copy of the GNU Lesser General Public
19
19
  * License along with this library; if not, write to the Free Software
20
20
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
@@ -88,11 +88,17 @@ public class Vec2 extends RubyObject {
88
88
  }
89
89
 
90
90
  void init(ThreadContext context, IRubyObject[] args) {
91
- if (Arity.checkArgumentCount(context.runtime, args, Arity.OPTIONAL.getValue(), 2) == 2) {
92
- jx = (args[0] instanceof RubyFloat)
93
- ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
94
- jy = (args[1] instanceof RubyFloat)
95
- ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
91
+ int count = Arity.checkArgumentCount(context.runtime, args, Arity.OPTIONAL.getValue(), 2);
92
+ if (count == 2) {
93
+ jx = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
94
+ jy = (args[1] instanceof RubyFloat) ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
95
+ } // allow ruby ducktyping in constructor
96
+ if (count == 1) {
97
+ if (!(args[0].respondsTo("x"))) {throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");}
98
+ jx = ((args[0].callMethod(context, "x")) instanceof RubyFloat)
99
+ ? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
100
+ jy = ((args[0].callMethod(context, "y")) instanceof RubyFloat)
101
+ ? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
96
102
  }
97
103
  }
98
104
 
@@ -153,9 +159,11 @@ public class Vec2 extends RubyObject {
153
159
  Ruby runtime = context.runtime;
154
160
  if (key instanceof RubySymbol) {
155
161
  if (key == RubySymbol.newSymbol(runtime, "x")) {
156
- return runtime.newFloat(jx);
162
+ jx = (value instanceof RubyFloat)
163
+ ? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
157
164
  } else if (key == RubySymbol.newSymbol(runtime, "y")) {
158
- return runtime.newFloat(jy);
165
+ jy = (value instanceof RubyFloat)
166
+ ? ((RubyFloat) value).getValue() : ((RubyFixnum) value).getDoubleValue();
159
167
  }
160
168
  } else {
161
169
  throw runtime.newIndexError("invalid key");
@@ -92,6 +92,19 @@ public final class Vec3 extends RubyObject {
92
92
  if (count == 3) {
93
93
  jz = (args[2] instanceof RubyFloat)
94
94
  ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
95
+ } // allow ruby ducktyping in constructor
96
+ if (count == 1) {
97
+ if (!(args[0].respondsTo("x"))) {
98
+ throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
99
+ }
100
+ jx = ((args[0].callMethod(context, "x")) instanceof RubyFloat)
101
+ ? ((RubyFloat) args[0].callMethod(context, "x")).getValue() : ((RubyFixnum) args[0].callMethod(context, "x")).getDoubleValue();
102
+ jy = ((args[0].callMethod(context, "y")) instanceof RubyFloat)
103
+ ? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
104
+ if (!(args[0].respondsTo("z"))) {
105
+ return;
106
+ } // allow promotion from 2D to 3D, sets jz = 0
107
+ jz = ((args[0].callMethod(context, "z")) instanceof RubyFloat) ? ((RubyFloat) args[0].callMethod(context, "z")).getValue() : ((RubyFixnum) args[0].callMethod(context, "z")).getDoubleValue();
95
108
  }
96
109
  }
97
110
 
@@ -112,7 +125,6 @@ public final class Vec3 extends RubyObject {
112
125
  * @return y IRubyObject
113
126
  */
114
127
  @JRubyMethod(name = "y")
115
-
116
128
  public IRubyObject getY(ThreadContext context) {
117
129
  return context.runtime.newFloat(jy);
118
130
  }
@@ -123,7 +135,8 @@ public final class Vec3 extends RubyObject {
123
135
  * @return z IRubyObject
124
136
  */
125
137
  @JRubyMethod(name = "z")
126
- public IRubyObject getZ(ThreadContext context) {
138
+ public IRubyObject getZ(ThreadContext context
139
+ ) {
127
140
  return context.runtime.newFloat(jz);
128
141
  }
129
142
 
@@ -134,7 +147,6 @@ public final class Vec3 extends RubyObject {
134
147
  * @return x IRubyObject
135
148
  */
136
149
  @JRubyMethod(name = "x=")
137
-
138
150
  public IRubyObject setX(ThreadContext context, IRubyObject other) {
139
151
  if (other instanceof RubyFloat) {
140
152
  jx = ((RubyFloat) other).getValue();
@@ -151,7 +163,6 @@ public final class Vec3 extends RubyObject {
151
163
  * @return y IRubyObject
152
164
  */
153
165
  @JRubyMethod(name = "y=")
154
-
155
166
  public IRubyObject setY(ThreadContext context, IRubyObject other) {
156
167
  if (other instanceof RubyFloat) {
157
168
  jy = ((RubyFloat) other).getValue();
@@ -184,7 +195,6 @@ public final class Vec3 extends RubyObject {
184
195
  * @return value float
185
196
  */
186
197
  @JRubyMethod(name = "[]", required = 1)
187
-
188
198
  public IRubyObject aref(ThreadContext context, IRubyObject key) {
189
199
  Ruby runtime = context.runtime;
190
200
  if (key instanceof RubySymbol) {
@@ -209,7 +219,6 @@ public final class Vec3 extends RubyObject {
209
219
  * @return value float
210
220
  */
211
221
  @JRubyMethod(name = "[]=")
212
-
213
222
  public IRubyObject aset(ThreadContext context, IRubyObject key, IRubyObject value) {
214
223
  Ruby runtime = context.runtime;
215
224
  if (key instanceof RubySymbol) {
@@ -337,7 +346,6 @@ public final class Vec3 extends RubyObject {
337
346
  * @return new Vec3 object (ruby)
338
347
  */
339
348
  @JRubyMethod(name = "-")
340
-
341
349
  public IRubyObject op_sub(ThreadContext context, IRubyObject other) {
342
350
  Ruby runtime = context.runtime;
343
351
  Vec3 b = null;
@@ -359,7 +367,6 @@ public final class Vec3 extends RubyObject {
359
367
  * @return new Vec3 object (ruby)
360
368
  */
361
369
  @JRubyMethod(name = "*", required = 1)
362
-
363
370
  public IRubyObject op_mul(ThreadContext context, IRubyObject scalar) {
364
371
  Ruby runtime = context.runtime;
365
372
  double multi = (scalar instanceof RubyFloat)
@@ -377,7 +384,6 @@ public final class Vec3 extends RubyObject {
377
384
  * @return new Vec3 object (ruby)
378
385
  */
379
386
  @JRubyMethod(name = "/", required = 1)
380
-
381
387
  public IRubyObject op_div(ThreadContext context, IRubyObject scalar) {
382
388
  Ruby runtime = context.runtime;
383
389
  double divisor = (scalar instanceof RubyFloat)
@@ -397,7 +403,6 @@ public final class Vec3 extends RubyObject {
397
403
  * @return magnitude squared IRubyObject
398
404
  */
399
405
  @JRubyMethod(name = "mag_squared")
400
-
401
406
  public IRubyObject mag_squared(ThreadContext context) {
402
407
  return context.runtime.newFloat(jx * jx + jy * jy + jz * jz);
403
408
  }
@@ -408,7 +413,6 @@ public final class Vec3 extends RubyObject {
408
413
  * @return magnitude IRubyObject
409
414
  */
410
415
  @JRubyMethod(name = "mag")
411
-
412
416
  public IRubyObject mag(ThreadContext context) {
413
417
  return context.runtime.newFloat(Math.sqrt(jx * jx + jy * jy + jz * jz));
414
418
  }
@@ -423,7 +427,6 @@ public final class Vec3 extends RubyObject {
423
427
  * @return magnitude IRubyObject
424
428
  */
425
429
  @JRubyMethod(name = "set_mag")
426
-
427
430
  public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
428
431
  if (block.isGiven()) {
429
432
  if (!(boolean) block.yield(context, scalar).toJava(Boolean.class)) {
@@ -447,7 +450,6 @@ public final class Vec3 extends RubyObject {
447
450
  * @return this as a ruby object
448
451
  */
449
452
  @JRubyMethod(name = "normalize!")
450
-
451
453
  public IRubyObject normalize_bang(ThreadContext context) {
452
454
  if (Math.abs(jx) < EPSILON && Math.abs(jy) < EPSILON && Math.abs(jz) < EPSILON) {
453
455
  return this;
@@ -465,7 +467,6 @@ public final class Vec3 extends RubyObject {
465
467
  * @return new normalized Vec3D object (ruby)
466
468
  */
467
469
  @JRubyMethod(name = "normalize")
468
-
469
470
  public IRubyObject normalize(ThreadContext context) {
470
471
  Ruby runtime = context.runtime;
471
472
  double mag = Math.sqrt(jx * jx + jy * jy + jz * jz);
@@ -489,7 +490,6 @@ public final class Vec3 extends RubyObject {
489
490
  * @return new random Vec3D object (ruby)
490
491
  */
491
492
  @JRubyMethod(name = "random", meta = true)
492
-
493
493
  public static IRubyObject random_direction(ThreadContext context, IRubyObject klazz) {
494
494
  Ruby runtime = context.runtime;
495
495
  double angle = Math.random() * Math.PI * 2;
@@ -510,7 +510,6 @@ public final class Vec3 extends RubyObject {
510
510
  * @return angle IRubyObject in radians
511
511
  */
512
512
  @JRubyMethod(name = "angle_between")
513
-
514
513
  public IRubyObject angleBetween(ThreadContext context, IRubyObject other) {
515
514
  Ruby runtime = context.runtime;
516
515
  Vec3 vec = (Vec3) other.toJava(Vec3.class);
@@ -542,7 +541,6 @@ public final class Vec3 extends RubyObject {
542
541
  * @return IRubyObject copy
543
542
  */
544
543
  @JRubyMethod(name = {"copy", "dup"})
545
-
546
544
  public IRubyObject copy(ThreadContext context) {
547
545
  Ruby runtime = context.runtime;
548
546
  return Vec3.rbNew(context, this.getMetaClass(), new IRubyObject[]{
@@ -557,7 +555,6 @@ public final class Vec3 extends RubyObject {
557
555
  * @return IRubyObject array of float
558
556
  */
559
557
  @JRubyMethod(name = "to_a")
560
-
561
558
  public IRubyObject toArray(ThreadContext context) {
562
559
  Ruby runtime = context.runtime;
563
560
  return RubyArray.newArray(context.runtime, new IRubyObject[]{
@@ -573,7 +570,6 @@ public final class Vec3 extends RubyObject {
573
570
  * @param object IRubyObject vertex renderer
574
571
  */
575
572
  @JRubyMethod(name = "to_vertex")
576
-
577
573
  public void toVertex(ThreadContext context, IRubyObject object) {
578
574
  JRender renderer = (JRender) object.toJava(JRender.class);
579
575
  renderer.vertex(jx, jy, jz);
@@ -586,7 +582,6 @@ public final class Vec3 extends RubyObject {
586
582
  * @param object IRubyObject vertex renderer
587
583
  */
588
584
  @JRubyMethod(name = "to_curve_vertex")
589
-
590
585
  public void toCurveVertex(ThreadContext context, IRubyObject object) {
591
586
  JRender renderer = (JRender) object.toJava(JRender.class);
592
587
  renderer.curveVertex(jx, jy, jz);
@@ -599,7 +594,6 @@ public final class Vec3 extends RubyObject {
599
594
  * @param args IRubyObject[]
600
595
  */
601
596
  @JRubyMethod(name = "to_vertex_uv", rest = true)
602
-
603
597
  public void toVertexUV(ThreadContext context, IRubyObject[] args) {
604
598
  int count = Arity.checkArgumentCount(context.runtime, args, Arity.OPTIONAL.getValue(), 3);
605
599
  double u = 0;
@@ -626,7 +620,6 @@ public final class Vec3 extends RubyObject {
626
620
  * @param object IRubyObject vertex renderer
627
621
  */
628
622
  @JRubyMethod(name = "to_normal")
629
-
630
623
  public void toNormal(ThreadContext context, IRubyObject object) {
631
624
  JRender renderer = (JRender) object.toJava(JRender.class);
632
625
  renderer.normal(jx, jy, jz);
@@ -639,7 +632,6 @@ public final class Vec3 extends RubyObject {
639
632
  * @return IRubyObject to_s
640
633
  */
641
634
  @JRubyMethod(name = {"to_s", "inspect"})
642
-
643
635
  public IRubyObject to_s(ThreadContext context) {
644
636
  return context.runtime.newString(String.format("Vec3D(x = %4.4f, y = %4.4f, z = %4.4f)", jx, jy, jz));
645
637
  }
@@ -688,7 +680,6 @@ public final class Vec3 extends RubyObject {
688
680
  * @return result IRubyObject as boolean
689
681
  */
690
682
  @JRubyMethod(name = "eql?", required = 1)
691
-
692
683
  public IRubyObject eql_p(ThreadContext context, IRubyObject other) {
693
684
  Ruby runtime = context.runtime;
694
685
  if (other == this) {
@@ -713,7 +704,6 @@ public final class Vec3 extends RubyObject {
713
704
  * @return result IRubyObject as boolean
714
705
  */
715
706
  @JRubyMethod(name = "==", required = 1)
716
-
717
707
  @Override
718
708
  public IRubyObject op_equal(ThreadContext context, IRubyObject other) {
719
709
  Ruby runtime = context.runtime;
@@ -9,7 +9,14 @@ Dir.chdir(File.dirname(__FILE__))
9
9
 
10
10
  class VecmathTest < Minitest::Test
11
11
 
12
-
12
+ # duck for Vec2D constructor
13
+ Point = Struct.new(:x, :y)
14
+ # duck for Vec3D constructor
15
+ Point3 = Struct.new(:x, :y, :z)
16
+ # non-duck to test fail
17
+ Pointless = Struct.new(:a, :b)
18
+ # non-duck to test fail
19
+ Pointless3 = Struct.new(:a, :b, :c)
13
20
  def setup
14
21
 
15
22
  end
@@ -17,7 +24,7 @@ class VecmathTest < Minitest::Test
17
24
  def test_equals
18
25
  x, y = 1.0000001, 1.01
19
26
  a = Vec2D.new(x, y)
20
- assert_equal(a.to_a, [x, y], 'Failed to return Vec2D as and Array')
27
+ assert_equal(a.to_a, [x, y], 'Failed to return Vec2D as an Array')
21
28
  end
22
29
 
23
30
  def test_not_equals
@@ -33,6 +40,25 @@ class VecmathTest < Minitest::Test
33
40
  assert_equal(a.to_a, b.to_a, 'Failed deep copy')
34
41
  end
35
42
 
43
+ def test_constructor_float
44
+ val = Point.new(1.0, 8.0) # duck type
45
+ expected = Vec2D.new(val)
46
+ assert_equal(expected, Vec2D.new(1.0, 8.0), 'Failed duck type constructor floats')
47
+ end
48
+
49
+ def test_constructor_fixnum
50
+ val = Point.new(1, 8) # duck type fixnum
51
+ expected = Vec2D.new(val)
52
+ assert_equal(expected, Vec2D.new(1.0, 8.0), 'Failed duck type constructor fixnum')
53
+ end
54
+
55
+ def test_failed_duck_type
56
+ val = Pointless.new(1.0, 8.0) # non duck type
57
+ assert_raises TypeError do
58
+ Vec2D.new(val)
59
+ end
60
+ end
61
+
36
62
  def test_copy_not_equals
37
63
  x, y = 1.0000001, 1.01
38
64
  a = Vec2D.new(x, y)
@@ -124,7 +150,7 @@ class VecmathTest < Minitest::Test
124
150
  def test_dist
125
151
  a = Vec2D.new(3, 5)
126
152
  b = Vec2D.new(6, 7)
127
- assert_in_epsilon(a.dist(b), Math.sqrt(3.0**2 + 2**2), 'Failed to return distance between two vectors')
153
+ assert_in_epsilon(a.dist(b), Math.sqrt(3.0**2 + 2**2), 0.001, 'Failed to return distance between two vectors')
128
154
  end
129
155
 
130
156
  def test_lerp
@@ -209,7 +235,7 @@ class VecmathTest < Minitest::Test
209
235
  x = 10
210
236
  b = Vec2D.new
211
237
  b[:x] = x
212
- assert_equal(a, Vec2D.new(-10, 20), 'Failed to hash assign')
238
+ assert_equal(b, Vec2D.new(x, 0), 'Failed to hash assign')
213
239
  end
214
240
 
215
241
  def test_inspect
@@ -253,26 +279,45 @@ class VecmathTest < Minitest::Test
253
279
  assert((a - b).cross(b - c).zero?, 'Failed collinearity test using 2D vector cross product')
254
280
  end
255
281
 
256
- def test_equals
282
+ def test_equals3
257
283
  x, y, z = 1.0000001, 1.01, 0.0
258
284
  a = Vec3D.new(x, y)
259
- assert_equal(a.to_a, [x, y, z], 'Failed to return Vec3D as and Array')
285
+ assert_equal(a.to_a, [x, y, z], 'Failed to return Vec3D as an Array')
260
286
  end
261
287
 
262
- def test_not_equals
288
+ def test_constructor_float3
289
+ val = Point3.new(1.0, 8.0, 7.0) # duck type
290
+ expected = Vec3D.new(val)
291
+ assert_equal(expected, Vec3D.new(1.0, 8.0, 7.0), 'Failed duck type constructor floats')
292
+ end
293
+
294
+ def test_constructor_fixnum3
295
+ val = Point3.new(1, 8, 7) # duck type fixnum
296
+ expected = Vec3D.new(val)
297
+ assert_equal(expected, Vec3D.new(1.0, 8.0, 7.0), 'Failed duck type constructor fixnum')
298
+ end
299
+
300
+ def test_failed_duck_type3
301
+ val = Pointless3.new(1.0, 8.0, 7.0) # non duck type
302
+ assert_raises TypeError do
303
+ Vec3D.new(val)
304
+ end
305
+ end
306
+
307
+ def test_not_equals3
263
308
  a = Vec3D.new(3, 5, 1)
264
309
  b = Vec3D.new(6, 7, 1)
265
310
  refute_equal(a, b, 'Failed equals false')
266
311
  end
267
312
 
268
- def test_copy_equals
313
+ def test_copy_equals3
269
314
  x, y, z = 1.0000001, 1.01, 1
270
315
  a = Vec3D.new(x, y, z)
271
316
  b = a.copy
272
317
  assert_equal(a.to_a, b.to_a, 'Failed deep copy')
273
318
  end
274
319
 
275
- def test_copy_not_equals
320
+ def test_copy_not_equals3
276
321
  x, y, z = 1.0000001, 1.01, 6.0
277
322
  a = Vec3D.new(x, y, z)
278
323
  b = a.copy
@@ -280,27 +325,27 @@ class VecmathTest < Minitest::Test
280
325
  refute_equal(a.to_a, b.to_a, 'Failed deep copy')
281
326
  end
282
327
 
283
- def test_equals_when_close
328
+ def test_equals_when_close3
284
329
  a = Vec3D.new(3.0000000, 5.00000, 2)
285
330
  b = Vec3D.new(3.0000000, 5.000001, 2)
286
331
  assert_equal(a, b, 'Failed to return equal when v. close')
287
332
  end
288
333
 
289
- def test_sum
334
+ def test_sum3
290
335
  a = Vec3D.new(3, 5, 1)
291
336
  b = Vec3D.new(6, 7, 1)
292
337
  c = Vec3D.new(9, 12, 2)
293
338
  assert_equal(a + b, c, 'Failed to sum vectors')
294
339
  end
295
340
 
296
- def test_subtract
341
+ def test_subtract3
297
342
  a = Vec3D.new(3, 5, 0)
298
343
  b = Vec3D.new(6, 7, 1)
299
344
  c = Vec3D.new(-3, -2, -1)
300
345
  assert_equal(a - b, c, 'Failed to subtract vectors')
301
346
  end
302
347
 
303
- def test_multiply
348
+ def test_multiply3
304
349
  a = Vec3D.new(3, 5, 1)
305
350
  b = 2
306
351
  c = a * b
@@ -308,7 +353,7 @@ class VecmathTest < Minitest::Test
308
353
  assert_equal(c, d, 'Failed to multiply vector by scalar')
309
354
  end
310
355
 
311
- def test_divide
356
+ def test_divide3
312
357
  a = Vec3D.new(3, 5, 4)
313
358
  b = 2
314
359
  c = Vec3D.new(1.5, 2.5, 2)
@@ -316,112 +361,112 @@ class VecmathTest < Minitest::Test
316
361
  assert_equal(c, d, 'Failed to divide vector by scalar')
317
362
  end
318
363
 
319
- def test_random
364
+ def test_random3
320
365
  a = Vec3D.random
321
366
  assert a.kind_of? Vec3D
322
367
  assert_in_epsilon(a.mag, 1.0)
323
368
  end
324
369
 
325
- def test_assign_value
370
+ def test_assign_value3
326
371
  a = Vec3D.new(3, 5)
327
372
  a.x=23
328
373
  assert_equal(a.x, 23, 'Failed to assign x value')
329
374
  end
330
375
 
331
- def test_mag
376
+ def test_mag3
332
377
  a = Vec3D.new(-3, -4)
333
378
  assert_equal(a.mag, 5, 'Failed to return magnitude of vector')
334
379
  end
335
380
 
336
- def test_mag_variant
381
+ def test_mag_variant3
337
382
  a = Vec3D.new(3.0, 2)
338
383
  b = Math.sqrt(3.0**2 + 2**2)
339
384
  assert_in_epsilon(a.mag, b, 0.001, 'Failed to return magnitude of vector')
340
385
  end
341
386
 
342
- def test_mag_zero_one
387
+ def test_mag_zero_one3
343
388
  a = Vec3D.new(-1, 0)
344
389
  assert_equal(a.mag, 1, 'Failed to return magnitude of vector')
345
390
  end
346
391
 
347
- def test_dist
392
+ def test_dist3
348
393
  a = Vec3D.new(3, 5, 2)
349
394
  b = Vec3D.new(6, 7, 1)
350
395
  message = 'Failed to return distance between two vectors'
351
396
  assert_equal(a.dist(b), Math.sqrt(3.0**2 + 2**2 + 1), message)
352
397
  end
353
398
 
354
- def test_dist_squared
399
+ def test_dist_squared3
355
400
  a = Vec3D.new(3, 5, 2)
356
401
  b = Vec3D.new(6, 7, 1)
357
402
  message = 'Failed to return distance squared between two vectors'
358
403
  assert_equal(a.dist_squared(b), 3.0**2 + 2**2 + 1, message)
359
404
  end
360
405
 
361
- def test_dot
406
+ def test_dot3
362
407
  a = Vec3D.new(10, 20, 0)
363
408
  b = Vec3D.new(60, 80, 0)
364
409
  assert_in_epsilon(a.dot(b), 2200.0, 0.001, 'Failed to dot product')
365
410
  end
366
411
 
367
- def test_self_dot
412
+ def test_self_dot3
368
413
  a = Vec3D.new(10, 20, 4)
369
414
  assert_in_epsilon(a.dot(a), 516.0, 0.001, 'Failed to self dot product')
370
415
  end
371
416
 
372
- def test_cross
417
+ def test_cross3
373
418
  a = Vec3D.new(3, 5, 2)
374
419
  b = Vec3D.new(6, 7, 1)
375
420
  c = Vec3D.new(-9.0, 9.0, -9.0)
376
421
  assert_equal(a.cross(b), c, 'Failed cross product')
377
422
  end
378
423
 
379
- def test_set_mag
424
+ def test_set_mag3
380
425
  a = Vec3D.new(1, 1)
381
426
  assert_equal(a.set_mag(Math.sqrt(32)), Vec3D.new(4, 4), 'Failed to set_mag vector')
382
427
  end
383
428
 
384
- def test_set_mag_block
429
+ def test_set_mag_block3
385
430
  a = Vec3D.new(1, 1)
386
431
  assert_equal(a.set_mag(Math.sqrt(32)) { true }, Vec3D.new(4, 4), 'Failed to set_mag_block true vector')
387
432
  end
388
433
 
389
- def test_set_mag_block_false
434
+ def test_set_mag_block_false3
390
435
  a = Vec3D.new(1, 1)
391
436
  assert_equal(a.set_mag(Math.sqrt(32)) { false }, Vec3D.new(1, 1), 'Failed to set_mag_block true vector')
392
437
  end
393
438
 
394
- def test_plus_assign
439
+ def test_plus_assign3
395
440
  a = Vec3D.new(3, 5)
396
441
  b = Vec3D.new(6, 7)
397
442
  a += b
398
443
  assert_equal(a, Vec3D.new(9, 12), 'Failed to += assign')
399
444
  end
400
445
 
401
- def test_normalize
446
+ def test_normalize3
402
447
  a = Vec3D.new(3, 5)
403
448
  b = a.normalize
404
449
  assert_in_epsilon(b.mag, 1, 0.001, 'Failed to return a normalized vector')
405
450
  end
406
451
 
407
- def test_normalize!
452
+ def test_normalize3!
408
453
  a = Vec3D.new(3, 5)
409
454
  a.normalize!
410
455
  assert_in_epsilon(a.mag, 1, 0.001, 'Failed to return a normalized! vector')
411
456
  end
412
457
 
413
- def test_inspect
458
+ def test_inspect3
414
459
  a = Vec3D.new(3, 2.000000000000001, 1)
415
460
  assert_equal(a.inspect, 'Vec3D(x = 3.0000, y = 2.0000, z = 1.0000)')
416
461
  end
417
462
 
418
- def test_array_reduce
463
+ def test_array_reduce3
419
464
  array = [Vec3D.new(1, 2), Vec3D.new(10, 2), Vec3D.new(1, 2)]
420
465
  sum = array.reduce(Vec3D.new) { |c, d| c + d }
421
466
  assert_equal(sum, Vec3D.new(12, 6))
422
467
  end
423
468
 
424
- def test_array_zip
469
+ def test_array_zip3
425
470
  one = [Vec3D.new(1, 2), Vec3D.new(10, 2), Vec3D.new(1, 2)]
426
471
  two = [Vec3D.new(1, 2), Vec3D.new(10, 2), Vec3D.new(1, 2)]
427
472
  zipped = one.zip(two).flatten
@@ -429,30 +474,30 @@ class VecmathTest < Minitest::Test
429
474
  assert_equal(zipped, expected)
430
475
  end
431
476
 
432
- def test_eql?
477
+ def test_eql3?
433
478
  a = Vec3D.new(3.0, 5.0, 0)
434
479
  b = Vec3D.new(3.0, 5.0, 0)
435
480
  assert(a.eql?(b))
436
481
  end
437
482
 
438
- def test_not_eql?
483
+ def test_not_eql3?
439
484
  a = Vec3D.new(3.0, 5.0, 0)
440
485
  b = Vec3D.new(3.0, 5.000001, 0)
441
486
  refute(a.eql?(b))
442
487
  end
443
488
 
444
- def test_equal?
489
+ def test_equal3?
445
490
  a = Vec3D.new(3.0, 5.0, 0)
446
491
  assert(a.equal?(a))
447
492
  end
448
493
 
449
- def test_not_equal?
494
+ def test_not_equal3?
450
495
  a = Vec3D.new(3.0, 5.0, 0)
451
496
  b = Vec3D.new(3.0, 5.0, 0)
452
497
  refute(a.equal?(b))
453
498
  end
454
499
 
455
- def test_hash_key
500
+ def test_hash_key3
456
501
  x, y, z = 10, 20, 50
457
502
  b = Vec3D.new(x, y, z)
458
503
  assert_equal(b[:x], x, 'Failed hash key access')
@@ -460,7 +505,7 @@ class VecmathTest < Minitest::Test
460
505
  assert_equal(b[:z], z, 'Failed hash key access')
461
506
  end
462
507
 
463
- def test_hash_set
508
+ def test_hash_set3
464
509
  x = 10
465
510
  b = Vec3D.new
466
511
  b[:x] = x
data/vendors/Rakefile CHANGED
@@ -10,7 +10,7 @@ SOUND_VERSION = 'v1.3.2' # version 1.3.2
10
10
  GLVIDEO = 'processing-glvideo.zip'
11
11
  VIDEO = 'video-2.zip'
12
12
  VIDEO_VERSION = '2' # version 1.0.1
13
- EXAMPLES = '1.8'.freeze
13
+ EXAMPLES = '1.9'.freeze
14
14
  HOME_DIR = ENV['HOME']
15
15
  MAC_OR_LINUX = /linux|mac|darwin/ =~ RbConfig::CONFIG['host_os']
16
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: propane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.3
4
+ version: 2.6.4
5
5
  platform: java
6
6
  authors:
7
7
  - monkstone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-09 00:00:00.000000000 Z
11
+ date: 2018-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '12'
19
+ version: '12.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '12'
26
+ version: '12.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,10 +58,8 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 1.0.0
61
- description: |2
62
- A batteries included version of processing in ruby, for MacOS and linux64. The
63
- current release features several PixelFlow glsl library examples, including a
64
- few shadertoy demos as sketches.
61
+ description: " A batteries included version of processing in ruby, for MacOS and
62
+ linux64.\n"
65
63
  email:
66
64
  - mamba2928@yahoo.co.uk
67
65
  executables:
@@ -113,6 +111,7 @@ files:
113
111
  - library/library_proxy/library_proxy.rb
114
112
  - library/simplex_noise/simplex_noise.rb
115
113
  - library/slider/slider.rb
114
+ - library/vector_utils/vector_utils.rb
116
115
  - library/video_event/video_event.rb
117
116
  - pom.rb
118
117
  - pom.xml
@@ -173,9 +172,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
172
  - - ">="
174
173
  - !ruby/object:Gem::Version
175
174
  version: '0'
176
- requirements: []
175
+ requirements:
176
+ - java runtime >= 1.8.0_151+
177
177
  rubyforge_project:
178
- rubygems_version: 2.7.3
178
+ rubygems_version: 2.7.6
179
179
  signing_key:
180
180
  specification_version: 4
181
181
  summary: ruby wrapper for processing-3.3.6 on MacOS and linux64 bit only for opengl