ruby-processing 2.5.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rpextras.jar +0 -0
- data/lib/ruby-processing/app.rb +26 -26
- data/lib/ruby-processing/exporters/base_exporter.rb +7 -5
- data/lib/ruby-processing/helper_methods.rb +78 -3
- data/lib/ruby-processing/version.rb +1 -1
- data/lib/templates/application/run.erb +4 -4
- data/samples/contributed/elegant_ball.rb +47 -37
- data/samples/contributed/tree.rb +1 -5
- data/samples/external_library/java_processing/custom/README.md +6 -5
- data/samples/external_library/java_processing/custom/Rakefile +17 -23
- data/samples/external_library/java_processing/custom/{src → ext}/nn/Connection.java +0 -0
- data/samples/external_library/java_processing/custom/{src → ext}/nn/HiddenNeuron.java +0 -0
- data/samples/external_library/java_processing/custom/{src → ext}/nn/InputNeuron.java +0 -0
- data/samples/external_library/java_processing/custom/{src → ext}/nn/Network.java +0 -0
- data/samples/external_library/java_processing/custom/{src → ext}/nn/Neuron.java +0 -0
- data/samples/external_library/java_processing/custom/{src → ext}/nn/OutputNeuron.java +0 -0
- data/samples/external_library/java_processing/custom/xor.rb +1 -1
- data/samples/external_library/ruby_gem/draw_test.rb +1 -1
- data/samples/processing_app/basics/arrays/array.rb +11 -11
- data/samples/processing_app/basics/color/blend_color.rb +17 -0
- data/samples/processing_app/basics/color/reading/reading.rb +20 -29
- data/samples/processing_app/basics/form/brick_tower.rb +11 -10
- data/samples/processing_app/basics/form/pie_chart.rb +4 -4
- data/samples/processing_app/basics/form/shape_transform.rb +17 -22
- data/samples/processing_app/basics/form/toroid.rb +16 -21
- data/samples/processing_app/basics/input/clock.rb +11 -10
- data/samples/processing_app/basics/math/sine_cosine.rb +6 -6
- data/samples/processing_app/basics/transform/bird.rb +9 -9
- data/samples/processing_app/basics/transform/birds.rb +1 -1
- data/samples/processing_app/basics/transform/library/bird/bird.rb +12 -12
- data/samples/processing_app/basics/transform/rotate.rb +10 -5
- data/samples/processing_app/basics/transform/triangle_flower.rb +3 -3
- data/samples/processing_app/library/fastmath/clock.rb +9 -7
- data/samples/processing_app/library/net/HTTPClient.rb +4 -2
- data/samples/processing_app/library/vecmath/arcball/arcball_box.rb +1 -1
- data/samples/processing_app/library/vecmath/arcball/arcball_radius.rb +1 -1
- data/samples/processing_app/library/vecmath/arcball/arcball_shape.rb +1 -1
- data/samples/processing_app/library/vecmath/vec2d/multiple_particle_systems.rb +1 -1
- data/samples/processing_app/library/vecmath/vec3d/retained_menger.rb +2 -2
- data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +1 -1
- data/samples/processing_app/topics/drawing/pulses.rb +3 -3
- data/samples/processing_app/topics/image_processing/linear_image.rb +1 -1
- data/samples/processing_app/topics/lsystems/csplant.rb +3 -3
- data/samples/processing_app/topics/motion/puff.rb +4 -4
- data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +1 -1
- data/samples/processing_app/topics/shaders/landscape.rb +1 -1
- metadata +10 -9
@@ -1,28 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
puts
|
1
|
+
if RUBY_PLATFORM =~ /java/
|
2
|
+
# -*- ruby -*-
|
3
|
+
require 'rake/javaextensiontask'
|
4
|
+
|
5
|
+
Rake::JavaExtensionTask.new('nn') do |ext|
|
6
|
+
ext.name = 'nn'
|
7
|
+
ext.debug = true
|
8
|
+
ext.lib_dir = 'library/nn'
|
9
|
+
ext.source_version='1.7'
|
10
|
+
ext.target_version='1.7'
|
11
|
+
end
|
13
12
|
end
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
desc 'clean'
|
15
|
+
task :clean do
|
16
|
+
FileUtils.rm_rf(FileList['tmp', 'library'])
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
ant.javac :srcdir => source_folder, :destdir => BUILD_DIR,
|
23
|
-
:source => "1.7", :target => "1.7", :debug => "yes", :includeantruntime => "no"
|
24
|
-
ant.jar :jarfile => "#{DIST_DIR}/#{jar_file_name}", :basedir => BUILD_DIR
|
25
|
-
ant.delete :dir => BUILD_DIR
|
26
|
-
puts
|
19
|
+
desc 'run'
|
20
|
+
task :run do
|
21
|
+
sh `rp5 run xor.rb`
|
27
22
|
end
|
28
|
-
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -78,7 +78,7 @@ def network_status
|
|
78
78
|
text("Total iterations: #{count}", 10, 40)
|
79
79
|
mse += (result - known) * (result - known)
|
80
80
|
rmse = Math::sqrt(mse / 4.0)
|
81
|
-
out = "Root mean squared error: #{format(
|
81
|
+
out = "Root mean squared error: #{format('%0.5f', rmse)}"
|
82
82
|
hint DISABLE_DEPTH_SORT
|
83
83
|
text(out, 10, 60)
|
84
84
|
hint ENABLE_DEPTH_SORT
|
@@ -103,7 +103,7 @@ def train
|
|
103
103
|
error = net.train(sq_input, [0, 1.0, 0])
|
104
104
|
error = net.train(cr_input, [0, 0, 1.0])
|
105
105
|
error = net.train(ci_input, [0, 1.0, 1.0])
|
106
|
-
puts "Error after iteration #{i}:\t#{format(
|
106
|
+
puts "Error after iteration #{i}:\t#{format('%0.5f', error)}" if i%20 == 0
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -12,24 +12,24 @@ def setup
|
|
12
12
|
size 640, 360
|
13
13
|
coswave = []
|
14
14
|
|
15
|
-
0.upto(
|
15
|
+
0.upto(width) do |i|
|
16
16
|
amount = map i, 0, width, 0, PI
|
17
|
-
coswave[i] = cos(
|
17
|
+
coswave[i] = cos(amount).abs
|
18
18
|
end
|
19
19
|
|
20
|
-
0.upto(
|
21
|
-
stroke(
|
22
|
-
line
|
20
|
+
0.upto(width) do |i|
|
21
|
+
stroke(coswave[i] * 255)
|
22
|
+
line(i, 0, i, height / 3)
|
23
23
|
end
|
24
24
|
|
25
|
-
0.upto(
|
26
|
-
stroke(
|
27
|
-
line
|
25
|
+
0.upto(width) do |i|
|
26
|
+
stroke(coswave[i] * 255 / 4)
|
27
|
+
line(i, height / 3, i, height / 3 * 2)
|
28
28
|
end
|
29
29
|
|
30
|
-
0.upto(
|
31
|
-
stroke(
|
32
|
-
line
|
30
|
+
0.upto(width) do |i|
|
31
|
+
stroke(255 - coswave[i] * 255)
|
32
|
+
line(i, height / 3 * 2, i, height)
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# example of processing blend_color (uses PImage blend_color under the hood)
|
2
|
+
# blend_color(c1, c2, MODE) returns a color int
|
3
|
+
|
4
|
+
def setup
|
5
|
+
size 100, 100
|
6
|
+
orange = color(204, 102, 0)
|
7
|
+
blue = color(0, 102, 153)
|
8
|
+
orangeblueadd = blend_color(orange, blue, ADD)
|
9
|
+
background(51)
|
10
|
+
noStroke()
|
11
|
+
fill(orange)
|
12
|
+
rect(14, 20, 20, 60)
|
13
|
+
fill(orangeblueadd)
|
14
|
+
rect(40, 20, 20, 60)
|
15
|
+
fill(blue)
|
16
|
+
rect(66, 20, 20, 60)
|
17
|
+
end
|
@@ -4,35 +4,26 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
def setup
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
fill 0, 0, blue( pixel )
|
28
|
-
rect xoff+p*2, yoff, p, pix
|
29
|
-
|
30
|
-
xoff += pix
|
31
|
-
if xoff >= (width-pix)
|
32
|
-
xoff = 0
|
33
|
-
yoff += pix
|
34
|
-
end
|
7
|
+
size 200, 200
|
8
|
+
no_stroke
|
9
|
+
background 0
|
10
|
+
c = load_image "cait.jpg"
|
11
|
+
xoff, yoff = 0, 0
|
12
|
+
p = 2
|
13
|
+
pix = p * 3
|
14
|
+
(c.width * c.height).times do |i|
|
15
|
+
pixel = c.pixels[i]
|
16
|
+
fill red( pixel ), 0, 0
|
17
|
+
rect xoff, yoff, p, pix
|
18
|
+
fill 0, green( pixel ), 0
|
19
|
+
rect xoff+p, yoff, p, pix
|
20
|
+
fill 0, 0, blue( pixel )
|
21
|
+
rect xoff+p*2, yoff, p, pix
|
22
|
+
xoff += pix
|
23
|
+
if xoff >= (width-pix)
|
24
|
+
xoff = 0
|
25
|
+
yoff += pix
|
35
26
|
end
|
36
|
-
|
27
|
+
end
|
37
28
|
end
|
38
29
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# 3D castle tower constructed out of individual bricks.
|
4
4
|
# Uses the Vect struct and Cube class.
|
5
|
+
|
5
6
|
attr_reader :angle, :brick, :bricks_per_layer, :brick_layers
|
6
7
|
attr_reader :radius, :layer_num, :temp_y
|
7
8
|
|
@@ -21,25 +22,25 @@ def draw
|
|
21
22
|
fill 182, 62, 29
|
22
23
|
no_stroke
|
23
24
|
lights
|
24
|
-
translate(width/2.0, height * 1.2, -380)
|
25
|
-
rotate_x(
|
25
|
+
translate(width / 2.0, height * 1.2, -380) # move viewpoint into position
|
26
|
+
rotate_x(-45.radians) # tip tower to see inside
|
26
27
|
rotate_y(frame_count * PI/600) # slowly rotate tower
|
27
|
-
brick_layers.times {|i| draw_layer(i) }
|
28
|
+
brick_layers.times { |i| draw_layer(i) }
|
28
29
|
end
|
29
30
|
|
30
31
|
def draw_layer(layer_num)
|
31
32
|
@layer_num = layer_num
|
32
33
|
@temp_y -= @brick_height # increment rows
|
33
34
|
@angle = 360.0 / bricks_per_layer * layer_num / 2.0 # alternate brick seams
|
34
|
-
bricks_per_layer.times {|i| draw_bricks(i) }
|
35
|
+
bricks_per_layer.times { |i| draw_bricks(i) }
|
35
36
|
end
|
36
37
|
|
37
38
|
def draw_bricks(brick_num)
|
38
|
-
temp_z = cos(radians
|
39
|
-
temp_x = sin(radians
|
39
|
+
temp_z = cos(angle.radians) * radius
|
40
|
+
temp_x = sin(angle.radians) * radius
|
40
41
|
push_matrix
|
41
42
|
translate temp_x, temp_y, temp_z
|
42
|
-
rotate_y(radians
|
43
|
+
rotate_y(angle.radians)
|
43
44
|
top_layer = layer_num == brick_layers - 1
|
44
45
|
even_brick = brick_num % 2 == 0
|
45
46
|
brick.create unless top_layer # main tower
|
@@ -73,8 +74,8 @@ class Cubeish
|
|
73
74
|
|
74
75
|
SIDES.each do |side, signs|
|
75
76
|
vertices[side] = signs.map do |s|
|
76
|
-
s = s.split('').map {|el| SIGNS[el] }
|
77
|
-
Vect.new(s[0] * w/2, s[1] * h/2, s[2] * d/2)
|
77
|
+
s = s.split('').map { |el| SIGNS[el] }
|
78
|
+
Vect.new(s[0] * w / 2, s[1] * h / 2, s[2] * d/2)
|
78
79
|
end
|
79
80
|
end
|
80
81
|
end
|
@@ -82,7 +83,7 @@ class Cubeish
|
|
82
83
|
def create
|
83
84
|
vertices.each do |name, vectors|
|
84
85
|
begin_shape QUADS
|
85
|
-
vectors.each {|v| vertex(v.x, v.y, v.z) }
|
86
|
+
vectors.each { |v| vertex(v.x, v.y, v.z) }
|
86
87
|
end_shape
|
87
88
|
end
|
88
89
|
end
|
@@ -10,7 +10,7 @@
|
|
10
10
|
def setup
|
11
11
|
size 640, 360
|
12
12
|
background 100
|
13
|
-
smooth
|
13
|
+
smooth(4)
|
14
14
|
no_stroke
|
15
15
|
|
16
16
|
diameter = min(width, height) * 0.75
|
@@ -20,8 +20,8 @@ def setup
|
|
20
20
|
angles.each do |angle|
|
21
21
|
fill angle * 3.0
|
22
22
|
arc width/2, height/2, # center x, y
|
23
|
-
diameter, diameter,
|
24
|
-
last_angle, last_angle + radians
|
25
|
-
last_angle += radians
|
23
|
+
diameter, diameter, # width, height
|
24
|
+
last_angle, last_angle + angle.radians # angles from, to
|
25
|
+
last_angle += angle.radians
|
26
26
|
end
|
27
27
|
end
|
@@ -10,32 +10,27 @@
|
|
10
10
|
# Down Arrow - decreases points
|
11
11
|
# 'p' key toggles between cube/pyramid
|
12
12
|
|
13
|
+
load_library :vecmath
|
14
|
+
attr_reader :renderer
|
13
15
|
|
14
16
|
|
15
|
-
def setup
|
16
|
-
|
17
|
+
def setup
|
17
18
|
size 640, 360, P3D
|
18
|
-
|
19
|
-
no_stroke
|
20
|
-
|
21
|
-
@angle_inc = PI/300
|
22
|
-
|
19
|
+
@renderer = AppRender.new(self)
|
20
|
+
no_stroke
|
21
|
+
@angle_inc = PI / 300
|
23
22
|
@pts = 4
|
24
23
|
@angle = 0
|
25
24
|
@radius = 99
|
26
|
-
@cylinder_length = 95
|
27
|
-
|
28
|
-
@is_pyramid = false
|
29
|
-
|
25
|
+
@cylinder_length = 95
|
26
|
+
@is_pyramid = false
|
30
27
|
end
|
31
28
|
|
32
|
-
def draw
|
33
|
-
|
29
|
+
def draw
|
34
30
|
background 170, 95, 95
|
35
31
|
lights
|
36
|
-
fill 255, 200, 200
|
37
|
-
|
38
|
-
translate width/2, height/2
|
32
|
+
fill 255, 200, 200
|
33
|
+
translate width / 2, height / 2
|
39
34
|
rotate_x frame_count * @angle_inc
|
40
35
|
rotate_y frame_count * @angle_inc
|
41
36
|
rotate_z frame_count * @angle_inc
|
@@ -46,10 +41,10 @@ def draw
|
|
46
41
|
@angle = 0
|
47
42
|
vertices[i] = []
|
48
43
|
0.upto(@pts) { |j|
|
49
|
-
pvec =
|
44
|
+
pvec = Vec3D.new 0, 0
|
50
45
|
(
|
51
|
-
pvec.x = cos(
|
52
|
-
pvec.y = sin(
|
46
|
+
pvec.x = cos(@angle.radians) * @radius
|
47
|
+
pvec.y = sin(@angle.radians) * @radius
|
53
48
|
|
54
49
|
) unless ( @is_pyramid && i == 1 )
|
55
50
|
|
@@ -63,15 +58,15 @@ def draw
|
|
63
58
|
|
64
59
|
begin_shape QUAD_STRIP
|
65
60
|
0.upto(@pts) { |j|
|
66
|
-
|
67
|
-
|
61
|
+
vertices[0][j].to_vertex(renderer)
|
62
|
+
vertices[1][j].to_vertex(renderer)
|
68
63
|
}
|
69
64
|
end_shape
|
70
65
|
|
71
66
|
[0,1].each { |i|
|
72
67
|
begin_shape
|
73
68
|
0.upto(@pts) { |j|
|
74
|
-
|
69
|
+
vertices[i][j].to_vertex(renderer)
|
75
70
|
}
|
76
71
|
end_shape CLOSE
|
77
72
|
}
|
@@ -17,9 +17,11 @@
|
|
17
17
|
# 'h' key _________ toggle sphere/helix
|
18
18
|
|
19
19
|
load_library :vecmath
|
20
|
+
attr_reader :renderer
|
20
21
|
|
21
22
|
def setup
|
22
|
-
size 640, 360, P3D
|
23
|
+
size 640, 360, P3D
|
24
|
+
@renderer = AppRender.new(self)
|
23
25
|
@pts = 40
|
24
26
|
@angle = 0.0
|
25
27
|
@radius = 60.0
|
@@ -42,7 +44,7 @@ def draw
|
|
42
44
|
fill 150, 195, 125
|
43
45
|
end
|
44
46
|
|
45
|
-
translate width/2, height/2, -100
|
47
|
+
translate width / 2, height / 2, -100
|
46
48
|
|
47
49
|
rotate_x frame_count * PI / 150
|
48
50
|
rotate_y frame_count * PI / 170
|
@@ -51,32 +53,25 @@ def draw
|
|
51
53
|
vertices = []
|
52
54
|
vertices2 = []
|
53
55
|
|
54
|
-
0.upto(@pts) do |i|
|
55
|
-
|
56
|
+
0.upto(@pts) do |i|
|
56
57
|
vertices2[i] = Vec3D.new
|
57
|
-
vertices[i] = Vec3D.new
|
58
|
-
|
59
|
-
vertices[i].x = @lathe_radius + sin( radians( @angle ) ) * @radius
|
60
|
-
|
58
|
+
vertices[i] = Vec3D.new
|
59
|
+
vertices[i].x = @lathe_radius + sin(@angle.radians) * @radius
|
61
60
|
if @is_helix
|
62
|
-
vertices[i].z = cos(
|
61
|
+
vertices[i].z = cos(@angle.radians) * @radius - (@helix_offset * @segments) / 2
|
63
62
|
else
|
64
|
-
vertices[i].z = cos(
|
65
|
-
end
|
66
|
-
|
63
|
+
vertices[i].z = cos(@angle.radians) * @radius
|
64
|
+
end
|
67
65
|
@angle += 360.0 / @pts
|
68
|
-
end
|
69
|
-
|
70
|
-
@lathe_angle = 0
|
71
|
-
|
66
|
+
end
|
67
|
+
@lathe_angle = 0
|
72
68
|
0.upto(@segments) do |i|
|
73
69
|
begin_shape QUAD_STRIP
|
74
70
|
(0..@pts).each do |j|
|
75
71
|
vertex_for_vector vertices2[j] if i > 0
|
76
72
|
|
77
|
-
vertices2[j].x = cos(
|
78
|
-
vertices2[j].y = sin(
|
79
|
-
) * vertices[j].x
|
73
|
+
vertices2[j].x = cos(@lathe_angle.radians) * vertices[j].x
|
74
|
+
vertices2[j].y = sin(@lathe_angle.radians) * vertices[j].x
|
80
75
|
vertices2[j].z = vertices[j].z
|
81
76
|
|
82
77
|
vertices[j].z += @helix_offset if @is_helix
|
@@ -90,8 +85,8 @@ def draw
|
|
90
85
|
|
91
86
|
end
|
92
87
|
|
93
|
-
def vertex_for_vector (
|
94
|
-
|
88
|
+
def vertex_for_vector (pvec)
|
89
|
+
pvec.to_vertex(renderer)
|
95
90
|
end
|
96
91
|
|
97
92
|
def key_pressed
|
@@ -1,6 +1,8 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# are
|
1
|
+
# Current time can be read with the t = Time.now. Get hour, minute and second
|
2
|
+
# using t.hour, t.min, t.sec functions. The processing hour(), minute() and
|
3
|
+
# second are deprecated since ruby-processing-2.5.1. In this example, sine and
|
4
|
+
# cosine values are used to set the position of the hands.
|
5
|
+
|
4
6
|
load_library :fastmath
|
5
7
|
|
6
8
|
def setup
|
@@ -12,17 +14,16 @@ end
|
|
12
14
|
def draw
|
13
15
|
background 0
|
14
16
|
fill 80
|
15
|
-
no_stroke
|
16
|
-
|
17
|
+
no_stroke
|
17
18
|
ellipse 100, 100, 160, 160
|
18
|
-
|
19
|
+
t = Time.now # access time from ruby
|
19
20
|
stroke 255
|
20
21
|
stroke_weight 1
|
21
|
-
line( 100, 100, calc_hand_x(
|
22
|
+
line( 100, 100, calc_hand_x(t.sec, 0, 72, 100), calc_hand_y(t.sec, 0, 72, 100) )
|
22
23
|
stroke_weight 2
|
23
|
-
line( 100, 100, calc_hand_x(
|
24
|
+
line( 100, 100, calc_hand_x(t.min, t.sec, 60, 100), calc_hand_y(t.min, t.sec, 60, 100) )
|
24
25
|
stroke_weight 4
|
25
|
-
line( 100, 100, calc_hand_x(hour,
|
26
|
+
line( 100, 100, calc_hand_x(t.hour, t.min, 50, 100), calc_hand_y(t.hour, t.min, 50, 100) )
|
26
27
|
|
27
28
|
# Draw the minute ticks
|
28
29
|
stroke_weight 2
|
@@ -33,7 +34,7 @@ def draw
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
|
-
# Angles for sin
|
37
|
+
# Angles for sin and cos start at 3 o'clock
|
37
38
|
# subtract 90 degrees to make them start at the top
|
38
39
|
|
39
40
|
def calc_hand_x(time, time_bit, length, origin)
|