ruby-processing 2.4.3 → 2.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/CHANGELOG +5 -0
- data/README.md +4 -2
- data/lib/ruby-processing/exporters/application_exporter.rb +1 -0
- data/lib/ruby-processing/version.rb +1 -1
- data/library/boids/boids.rb +14 -13
- data/library/vecmath/lib/vec.rb +20 -4
- data/samples/contributed/circle_collision.rb +92 -149
- data/samples/contributed/drawolver.rb +13 -27
- data/samples/contributed/elegant_ball.rb +158 -0
- data/samples/contributed/fern.rb +16 -3
- data/samples/contributed/flight_patterns.rb +16 -4
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/bumpy_surface_noise.rb +4 -9
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/data/java_args.txt +0 -0
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/library/custom_shape/custom_shape.rb +1 -1
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/library/particle_system/particle_system.rb +7 -10
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/library/surface/surface.rb +2 -2
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/liquidy.rb +7 -7
- data/samples/external_library/java_processing/{pbox2d → box2d_processing}/polygons.rb +4 -9
- data/samples/external_library/java_processing/custom/README.md +15 -0
- data/samples/external_library/java_processing/custom/Rakefile +28 -0
- data/samples/external_library/java_processing/custom/landscape.rb +58 -0
- data/samples/external_library/java_processing/custom/src/nn/Connection.java +47 -0
- data/samples/external_library/java_processing/custom/src/nn/HiddenNeuron.java +20 -0
- data/samples/external_library/java_processing/custom/src/nn/InputNeuron.java +23 -0
- data/samples/external_library/java_processing/custom/src/nn/Network.java +136 -0
- data/samples/external_library/java_processing/custom/src/nn/Neuron.java +79 -0
- data/samples/external_library/java_processing/custom/src/nn/OutputNeuron.java +7 -0
- data/samples/external_library/java_processing/custom/xor.rb +88 -0
- data/samples/external_library/ruby_gem/README +1 -1
- data/samples/external_library/ruby_gem/data/data.json +8 -0
- data/samples/external_library/ruby_gem/draw_test.rb +171 -0
- data/samples/processing_app/basics/form/icosahedra.rb +39 -0
- data/samples/processing_app/basics/form/library/icosahedron/icosahedron.rb +60 -0
- data/samples/processing_app/basics/form/toroid.rb +78 -92
- data/samples/processing_app/basics/transform/birds.rb +6 -12
- data/samples/processing_app/basics/transform/cubes_in_cube.rb +25 -22
- data/samples/processing_app/basics/transform/library/cube/cube.rb +16 -16
- data/samples/processing_app/basics/transform/rotate_push_pop.rb +1 -1
- data/samples/processing_app/demos/graphics/bezier_patch.rb +18 -31
- data/samples/processing_app/demos/graphics/trefoil.rb +15 -15
- data/samples/processing_app/library/vecmath/acceleration_with_vectors.rb +3 -3
- data/samples/processing_app/library/vecmath/hilbert_fractal.rb +2 -2
- data/samples/processing_app/library/vecmath/library/flock/flock.rb +18 -21
- data/samples/processing_app/library/vecmath/library/hilbert/hilbert.rb +11 -8
- data/samples/processing_app/library/vecmath/library/wiggler/wiggler.rb +7 -15
- data/samples/processing_app/library/vecmath/seeking_neural.rb +172 -0
- data/samples/processing_app/topics/animation/animated_sprite.rb +5 -8
- data/samples/processing_app/topics/animation/sequential.rb +2 -3
- data/samples/processing_app/topics/create_shapes/library/particle/particle_system.rb +7 -7
- data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +2 -2
- data/samples/processing_app/topics/create_shapes/wiggle_pshape.rb +2 -1
- data/samples/processing_app/topics/lsystems/koch.rb +1 -1
- data/samples/processing_app/topics/lsystems/library/koch/koch_fractal.rb +24 -23
- data/samples/processing_app/topics/motion/circle_collision.rb +117 -160
- data/samples/processing_app/topics/motion/library/cube/cube.rb +1 -1
- data/samples/processing_app/topics/motion/morph.rb +1 -1
- data/samples/processing_app/topics/motion/reflection1.rb +17 -16
- data/samples/processing_app/topics/shaders/conway.rb +2 -2
- data/samples/processing_app/topics/shaders/data/conway.glsl +10 -10
- data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +9 -8
- data/samples/processing_app/topics/shaders/landscape.rb +1 -1
- data/samples/processing_app/topics/simulate/flocking.rb +1 -1
- data/samples/processing_app/topics/simulate/library/flock/flock.rb +62 -57
- data/samples/processing_app/topics/simulate/multiple_particle_systems.rb +8 -28
- data/samples/processing_app/topics/simulate/simple_particle_system.rb +9 -7
- data/samples/processing_app/topics/simulate/smoke_particle_system.rb +12 -11
- data/vendors/Rakefile +2 -2
- metadata +26 -21
- data/samples/contributed/pong.rb +0 -177
- data/samples/contributed/simple_buffer.rb +0 -44
- data/samples/external_library/java_processing/pbox2d/contact_test.rb +0 -23
- data/samples/processing_app/basics/form/icosahedra/icosahedra.rb +0 -72
- data/samples/processing_app/basics/form/icosahedra/icosahedron.rb +0 -116
- data/samples/processing_app/basics/form/icosahedra/shape_3D.rb +0 -25
@@ -7,6 +7,6 @@ The absolute belt and brace way to use external ruby libraries ie gems:
|
|
7
7
|
4. Run ruby-processing starting from jruby
|
8
8
|
jruby -S rp5 run sketch.rb
|
9
9
|
|
10
|
-
See worked
|
10
|
+
See worked ai4r and mdarray_test in this folder
|
11
11
|
NB: library will need to work with jruby this excludes most native libraries
|
12
12
|
but pure ruby libraries (+java) should be fine
|
@@ -0,0 +1,8 @@
|
|
1
|
+
{"TRIANGLE":[[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,25,229,229,25,0,0,0,0,0,0],[0,0,0,0,0,0,127,127,127,127,0,0,0,0,0,0],[0,0,0,0,0,25,229,25,25,229,25,0,0,0,0,0],[0,0,0,0,0,127,127,0,0,127,127,0,0,0,0,0],[0,0,0,0,25,229,25,0,0,25,229,25,0,0,0,0],[0,0,0,0,127,127,0,0,0,0,127,127,0,0,0,0],[0,0,0,25,229,25,0,0,0,0,25,229,25,0,0,0],[0,0,0,127,127,0,0,0,0,0,0,127,127,0,0,0],[0,0,25,229,25,0,0,0,0,0,0,25,229,25,0,0],[0,0,127,127,0,0,0,0,0,0,0,0,127,127,0,0],[0,25,229,25,0,0,0,0,0,0,0,0,25,229,25,0],[0,127,127,0,0,0,0,0,0,0,0,0,0,127,127,0],[25,229,25,0,0,0,0,0,0,0,0,0,0,25,229,25],[127,127,0,0,0,0,0,0,0,0,0,0,0,0,127,127],[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]]
|
2
|
+
,"SQUARE":[[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]]
|
3
|
+
,"CROSS":[[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127],[127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0]]
|
4
|
+
,"CIRCLE":[[0,0,0,0,32,64,64,80,80,64,64,32,0,0,0,0],[0,0,32,64,96,103,64,64,64,64,96,96,64,32,0,0],[0,32,96,128,96,32,0,0,0,0,32,89,128,96,32,0],[0,64,128,96,18,0,0,0,0,0,0,0,64,128,64,0],[32,96,96,18,0,0,0,0,0,0,0,0,0,82,101,32],[64,103,32,0,0,0,0,0,0,0,0,0,0,32,96,64],[64,64,0,0,0,0,0,0,0,0,0,0,0,0,64,68],[80,64,0,0,0,0,0,0,0,0,0,0,0,0,64,104],[80,64,0,0,0,0,0,0,0,0,0,0,0,0,64,106],[64,64,0,0,0,0,0,0,0,0,0,0,0,0,64,70],[64,96,32,0,0,0,0,0,0,0,0,0,0,32,96,64],[32,96,88,0,0,0,0,0,0,0,0,0,0,64,119,32],[0,64,128,64,0,0,0,0,0,0,0,0,32,113,70,0],[0,32,96,128,81,32,0,0,0,0,32,64,113,96,32,0],[0,0,32,64,102,96,64,64,64,64,96,119,70,32,0,0],[0,0,0,0,32,64,69,105,106,70,64,32,0,0,0,0]]
|
5
|
+
,"TRIANGLE_WITH_NOISE":[[25,0,0,0,0,0,0,25,127,0,0,25,0,0,0,0],[0,0,0,0,76,0,25,229,229,25,0,0,0,0,76,0],[0,76,0,0,0,0,127,25,127,76,0,0,0,0,0,178],[0,0,0,178,0,25,229,25,25,229,25,0,0,0,76,0],[0,0,0,0,0,76,127,0,76,127,127,0,0,0,0,0],[0,25,0,0,25,229,25,0,25,25,229,25,0,0,0,0],[25,0,0,0,127,127,0,0,0,0,127,127,178,0,0,76],[0,0,76,76,229,25,0,0,25,0,25,229,25,0,0,0],[0,0,0,127,127,0,76,178,0,0,0,127,127,0,0,0],[0,0,25,229,25,0,0,0,0,0,0,25,229,25,0,0],[0,0,127,127,0,0,0,0,76,0,0,0,127,127,0,0],[0,25,229,25,0,0,0,0,0,0,0,0,25,229,25,0],[0,127,127,0,76,0,0,76,0,0,0,0,0,127,127,0],[25,229,25,0,0,76,0,0,0,25,0,0,0,25,229,25],[127,127,0,0,0,0,0,0,0,0,0,0,0,0,127,127],[255,255,255,255,25,255,255,255,255,255,25,255,255,255,255,255]]
|
6
|
+
,"SQUARE_WITH_NOISE":[[255,76,255,255,255,153,255,255,255,255,255,102,255,255,255,255],[255,0,0,0,0,178,0,0,0,0,0,0,0,0,0,255],[255,0,76,0,0,0,0,178,0,153,25,0,0,0,0,0],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,102,0,102,0,0,0,25,0,76,0,0,102,0,255],[255,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0],[255,0,0,0,76,153,0,0,25,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,102,0,0,0,0,178,0,0,255],[255,102,102,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,0,178,0,0,76,0,0,0,0,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,76,0,0,0,0,0,178,255],[255,0,76,0,102,0,0,0,0,153,0,0,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,25,0,0,255],[255,0,0,153,0,0,0,178,0,0,0,178,0,0,0,255],[255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255],[255,255,255,255,76,255,255,255,255,0,255,255,25,255,25,255]]
|
7
|
+
,"CROSS_WITH_NOISE":[[0,0,0,0,0,0,76,76,127,0,76,0,0,0,25,0],[0,25,0,0,0,25,0,127,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,76,0,0,0],[0,0,25,204,0,0,0,127,127,0,102,0,0,0,25,0],[0,0,0,0,0,76,0,127,0,0,0,0,25,0,0,0],[0,0,0,204,0,0,0,127,127,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,127,127,0,76,0,0,0,0,0],[127,127,127,204,127,76,127,127,127,127,127,127,127,127,0,5],[127,127,127,127,127,127,127,127,25,127,127,127,127,25,0,0],[0,0,0,204,0,0,0,102,127,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,102,0,0,0,0,0,0],[0,0,0,0,0,102,0,127,127,0,0,0,0,0,0,0],[102,0,0,102,0,0,0,127,127,0,0,0,25,0,0,0],[0,0,0,0,0,25,0,127,102,102,76,0,0,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,255,0,0,0],[0,0,0,0,0,0,0,127,127,0,0,0,0,0,0,0]]
|
8
|
+
,"CIRCLE_WITH_NOISE":[[0,0,0,0,21,0,21,128,128,21,0,21,0,0,0,0],[0,0,8,17,128,128,110,0,0,21,128,128,98,21,0,0],[0,8,21,128,21,21,0,0,0,0,21,21,128,21,21,0],[0,0,128,21,0,0,0,0,0,0,0,0,21,128,2,0],[21,128,21,0,0,0,0,0,0,0,0,0,0,21,128,21],[0,128,42,0,0,0,0,0,0,0,0,0,0,31,128,0],[0,25,0,0,0,0,0,0,0,0,0,0,0,0,21,21],[128,0,0,0,0,0,0,0,0,0,0,0,0,0,89,128],[23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128],[21,24,12,0,0,0,0,0,0,0,0,0,0,0,128,21],[0,128,21,0,0,0,0,0,0,0,0,0,0,32,128,0],[21,42,21,21,0,0,0,0,0,0,0,0,0,21,128,27],[0,13,128,21,21,0,0,0,0,0,0,0,21,128,86,0],[0,3,21,128,21,31,0,0,0,0,21,21,128,21,0,0],[0,0,0,88,128,128,128,3,89,128,128,128,21,0,0,0],[0,0,0,0,21,0,21,128,128,21,0,21,0,0,0,0]]}
|
@@ -0,0 +1,171 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# Using the ai4r gem in ruby-processing.
|
3
|
+
# A simple example that demonstrates using
|
4
|
+
# a backpropagation neural network. Use the drop box menu to
|
5
|
+
# select a prebuilt shape. To draw a test shape tick drawing checkbox,
|
6
|
+
# release the mouse when drawing a discontinous shape eg cross.
|
7
|
+
# Clear the sketch with clear button.
|
8
|
+
# Press evaluate and result is printed to the console....
|
9
|
+
####################################################################
|
10
|
+
|
11
|
+
require 'ai4r'
|
12
|
+
require 'json'
|
13
|
+
|
14
|
+
load_library :vecmath, :control_panel
|
15
|
+
|
16
|
+
attr_reader :img, :img_pixels, :ci_input, :cr_input, :tr_input, :sq_input, :net, :points, :panel, :hide, :drawing, :source_string
|
17
|
+
|
18
|
+
def setup
|
19
|
+
size(320, 320)
|
20
|
+
control_panel do |c|
|
21
|
+
c.title = "control"
|
22
|
+
c.look_feel "Nimbus"
|
23
|
+
c.checkbox :drawing
|
24
|
+
c.button :clear
|
25
|
+
c.button :evaluate
|
26
|
+
c.menu :shape, ['CIRCLE', 'CROSS', 'CROSS_WITH_NOISE', 'SQUARE', 'SQUARE_WITH_NOISE', 'TRIANGLE', 'DEFAULT']
|
27
|
+
@panel = c
|
28
|
+
end
|
29
|
+
@hide = false
|
30
|
+
@source_string = open("data/data.json", "r"){ |file| file.read }
|
31
|
+
triangle = JSON.parse(source_string)["TRIANGLE"]
|
32
|
+
square = JSON.parse(source_string)["SQUARE"]
|
33
|
+
cross = JSON.parse(source_string)["CROSS"]
|
34
|
+
circle = JSON.parse(source_string)["CIRCLE"]
|
35
|
+
@points = []
|
36
|
+
srand 1
|
37
|
+
@net = Ai4r::NeuralNetwork::Backpropagation.new([256, 3])
|
38
|
+
@tr_input = triangle.flatten.collect { |input| input.to_f / 127.0}
|
39
|
+
@sq_input = square.flatten.collect { |input| input.to_f / 127.0}
|
40
|
+
@cr_input = cross.flatten.collect { |input| input.to_f / 127.0}
|
41
|
+
@ci_input = circle.flatten.collect { |input| input.to_f / 127.0}
|
42
|
+
train
|
43
|
+
background 255
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def draw
|
48
|
+
# only make control_panel visible once, or again when hide is false
|
49
|
+
unless hide
|
50
|
+
@hide = true
|
51
|
+
panel.set_visible(hide)
|
52
|
+
end
|
53
|
+
if drawing
|
54
|
+
stroke_weight 32
|
55
|
+
stroke 127
|
56
|
+
points.each_cons(2) { |ps, pe| line ps.x, ps.y, pe.x, pe.y}
|
57
|
+
else
|
58
|
+
no_fill
|
59
|
+
stroke_weight(32)
|
60
|
+
stroke(127)
|
61
|
+
case @shape
|
62
|
+
when 'CIRCLE'
|
63
|
+
background(255)
|
64
|
+
draw_circle
|
65
|
+
@shape = 'DEFAULT'
|
66
|
+
when 'CROSS'
|
67
|
+
background(255)
|
68
|
+
draw_cross
|
69
|
+
@shape = 'DEFAULT'
|
70
|
+
when 'CROSS_WITH_NOISE','SQUARE_WITH_NOISE'
|
71
|
+
background(255)
|
72
|
+
draw_shape @shape
|
73
|
+
@shape = 'DEFAULT'
|
74
|
+
when 'SQUARE'
|
75
|
+
background(255)
|
76
|
+
draw_square
|
77
|
+
@shape = 'DEFAULT'
|
78
|
+
when 'TRIANGLE'
|
79
|
+
background(255)
|
80
|
+
draw_triangle
|
81
|
+
@shape = 'DEFAULT'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def draw_shape shp
|
87
|
+
shape = JSON.parse(source_string)[shp]
|
88
|
+
background(255)
|
89
|
+
no_stroke
|
90
|
+
(0 ... width / 20).each do |i|
|
91
|
+
(0 ... height / 20).each do |j|
|
92
|
+
col = 255 - shape[i][j]
|
93
|
+
fill(col)
|
94
|
+
rect(i * 20, j * 20, 20, 20)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def train
|
100
|
+
puts "Training Network Please Wait"
|
101
|
+
101.times do |i|
|
102
|
+
error = net.train(tr_input, [1.0, 0, 0])
|
103
|
+
error = net.train(sq_input, [0, 1.0, 0])
|
104
|
+
error = net.train(cr_input, [0, 0, 1.0])
|
105
|
+
error = net.train(ci_input, [0, 1.0, 1.0])
|
106
|
+
puts "Error after iteration #{i}:\t#{format("%.5f", error)}" if i%20 == 0
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def result_label(result)
|
111
|
+
if result.inject(0, :+).between?(1.9, 2.1)
|
112
|
+
if result[0] < 0.01 && result[1].between?(0.99, 1.0) && result[2].between?(0.99, 1.0)
|
113
|
+
return "CIRCLE"
|
114
|
+
else
|
115
|
+
return "UNKNOWN"
|
116
|
+
end
|
117
|
+
elsif result.inject(0, :+).between?(0.95, 1.1)
|
118
|
+
if result[0].between?(0.95, 1.0) && (result[1] + result[2]) < 0.01
|
119
|
+
return "TRIANGLE"
|
120
|
+
elsif result[1].between?(0.95, 1.0) && (result[0] + result[2]) < 0.01
|
121
|
+
return "SQUARE"
|
122
|
+
elsif result[2].between?(0.95, 1.0) && (result[1] + result[0]) < 0.01
|
123
|
+
return "CROSS"
|
124
|
+
else
|
125
|
+
return "UNKNOWN"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
return "UNKNOWN"
|
129
|
+
end
|
130
|
+
|
131
|
+
def mouse_dragged
|
132
|
+
points << Vec2D.new(mouse_x, mouse_y)
|
133
|
+
end
|
134
|
+
|
135
|
+
def mouse_released
|
136
|
+
points.clear
|
137
|
+
end
|
138
|
+
|
139
|
+
def draw_circle
|
140
|
+
ellipse(width / 2, height / 2, 320 - 32, 320 - 32)
|
141
|
+
end
|
142
|
+
|
143
|
+
def draw_square
|
144
|
+
rect(16, 16, 320 - 32, 320 - 32)
|
145
|
+
end
|
146
|
+
|
147
|
+
def draw_cross
|
148
|
+
line(width / 2, 0, width / 2, 320)
|
149
|
+
line(0, height / 2, 320 , height / 2)
|
150
|
+
end
|
151
|
+
|
152
|
+
def draw_triangle
|
153
|
+
triangle(width / 2, 32, 24, height - 16, width - 24, height - 16)
|
154
|
+
end
|
155
|
+
|
156
|
+
def clear
|
157
|
+
background 255
|
158
|
+
end
|
159
|
+
|
160
|
+
def evaluate
|
161
|
+
load_pixels
|
162
|
+
img_pixels = []
|
163
|
+
(0...height).step(20) do |y|
|
164
|
+
row = []
|
165
|
+
(0...width).step(20) do |x|
|
166
|
+
row << 255 - brightness(pixels[(y + 10) * width + x + 10])
|
167
|
+
end
|
168
|
+
img_pixels << row
|
169
|
+
end
|
170
|
+
puts "#{net.eval(img_pixels.flatten).inspect} => #{result_label(net.eval(img_pixels.flatten))}"
|
171
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
load_libraries :icosahedron, :vecmath
|
2
|
+
|
3
|
+
def setup
|
4
|
+
size 640, 360, P3D
|
5
|
+
@ico1 = Icosahedron.new 75.0
|
6
|
+
@ico2 = Icosahedron.new 75.0
|
7
|
+
@ico3 = Icosahedron.new 75.0
|
8
|
+
end
|
9
|
+
|
10
|
+
def draw
|
11
|
+
background 0
|
12
|
+
lights
|
13
|
+
translate width/2, height/2
|
14
|
+
push_matrix
|
15
|
+
translate -width/3.5, 0
|
16
|
+
rotate_x frame_count * PI / 185
|
17
|
+
rotate_y frame_count * PI / -200
|
18
|
+
stroke 170, 0, 0
|
19
|
+
no_fill
|
20
|
+
@ico1.draw
|
21
|
+
pop_matrix
|
22
|
+
push_matrix
|
23
|
+
rotate_x frame_count * PI / 200
|
24
|
+
rotate_y frame_count * PI / 300
|
25
|
+
stroke 170, 0, 180
|
26
|
+
fill 170, 170, 0
|
27
|
+
@ico2.draw
|
28
|
+
pop_matrix
|
29
|
+
push_matrix
|
30
|
+
translate width/3.5, 0
|
31
|
+
rotate_x frame_count * PI / -200
|
32
|
+
rotate_y frame_count * PI / 200
|
33
|
+
no_stroke
|
34
|
+
fill 0, 0, 185
|
35
|
+
@ico3.draw
|
36
|
+
pop_matrix
|
37
|
+
end
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Icosahedron
|
2
|
+
include Processing::Proxy # mixin Processing::Proxy
|
3
|
+
attr_reader :r
|
4
|
+
|
5
|
+
def initialize(radius)
|
6
|
+
@r = radius
|
7
|
+
end
|
8
|
+
|
9
|
+
##
|
10
|
+
# Draw an icosahedron defined by a radius r.
|
11
|
+
#
|
12
|
+
def draw
|
13
|
+
# Calculate the vertex data for an icosahedron inscribed by a sphere radius 'r'.
|
14
|
+
# Use 4 Golden Ratio rectangles as the basis.
|
15
|
+
phi = (1.0 + Math.sqrt(5.0)) / 2.0
|
16
|
+
h = r / Math.sqrt(1.0 + phi * phi)
|
17
|
+
v =
|
18
|
+
[
|
19
|
+
Vec3D.new(0, -h, h * phi), Vec3D.new(0, -h, -h * phi), Vec3D.new(0, h, -h * phi), Vec3D.new(0, h, h * phi),
|
20
|
+
Vec3D.new(h, -h * phi, 0), Vec3D.new(h, h * phi, 0), Vec3D.new(-h, h * phi, 0), Vec3D.new(-h, -h * phi, 0),
|
21
|
+
Vec3D.new(-h * phi, 0, h), Vec3D.new(-h * phi, 0, -h), Vec3D.new(h * phi, 0, -h), Vec3D.new(h * phi, 0, h)
|
22
|
+
]
|
23
|
+
|
24
|
+
begin_shape(TRIANGLES)
|
25
|
+
|
26
|
+
draw_triangle(v[0], v[7],v[4])
|
27
|
+
draw_triangle(v[0], v[4], v[11])
|
28
|
+
draw_triangle(v[0], v[11], v[3])
|
29
|
+
draw_triangle(v[0], v[3], v[8])
|
30
|
+
draw_triangle(v[0], v[8], v[7])
|
31
|
+
|
32
|
+
draw_triangle(v[1], v[4], v[7])
|
33
|
+
draw_triangle(v[1], v[10], v[4])
|
34
|
+
draw_triangle(v[10], v[11], v[4])
|
35
|
+
draw_triangle(v[11], v[5], v[10])
|
36
|
+
draw_triangle(v[5], v[3], v[11])
|
37
|
+
draw_triangle(v[3], v[6], v[5])
|
38
|
+
draw_triangle(v[6], v[8], v[3])
|
39
|
+
draw_triangle(v[8], v[9], v[6])
|
40
|
+
draw_triangle(v[9], v[7], v[8])
|
41
|
+
draw_triangle(v[7], v[1], v[9])
|
42
|
+
|
43
|
+
draw_triangle(v[2], v[1], v[9])
|
44
|
+
draw_triangle(v[2], v[10], v[1])
|
45
|
+
draw_triangle(v[2], v[5], v[10])
|
46
|
+
draw_triangle(v[2], v[6], v[5])
|
47
|
+
draw_triangle(v[2], v[9], v[6])
|
48
|
+
|
49
|
+
end_shape
|
50
|
+
end
|
51
|
+
|
52
|
+
def draw_triangle(p1, p2, p3)
|
53
|
+
|
54
|
+
vertex(p1.x, p1.y, p1.z)
|
55
|
+
vertex(p2.x, p2.y, p2.z)
|
56
|
+
vertex(p3.x, p3.y, p3.z)
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -16,112 +16,98 @@
|
|
16
16
|
# 'w' key _________ toggle wireframe/solid shading
|
17
17
|
# 'h' key _________ toggle sphere/helix
|
18
18
|
|
19
|
+
load_library :vecmath
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
@lathe_radius = 100.0
|
32
|
-
@is_wireframe = false
|
33
|
-
@is_helix = false
|
34
|
-
@helix_offset = 5.0
|
35
|
-
|
21
|
+
def setup
|
22
|
+
size 640, 360, P3D
|
23
|
+
@pts = 40
|
24
|
+
@angle = 0.0
|
25
|
+
@radius = 60.0
|
26
|
+
@segments = 60.0
|
27
|
+
@lathe_angle = 0.0
|
28
|
+
@lathe_radius = 100.0
|
29
|
+
@is_wireframe = false
|
30
|
+
@is_helix = false
|
31
|
+
@helix_offset = 5.0
|
36
32
|
end
|
37
33
|
|
38
|
-
def draw
|
34
|
+
def draw
|
35
|
+
background 50, 64, 42
|
36
|
+
lights
|
37
|
+
if @is_wireframe
|
38
|
+
stroke 255, 255, 150
|
39
|
+
no_fill
|
40
|
+
else
|
41
|
+
no_stroke
|
42
|
+
fill 150, 195, 125
|
43
|
+
end
|
44
|
+
|
45
|
+
translate width/2, height/2, -100
|
46
|
+
|
47
|
+
rotate_x frame_count * PI / 150
|
48
|
+
rotate_y frame_count * PI / 170
|
49
|
+
rotate_z frame_count * PI / 90
|
50
|
+
|
51
|
+
vertices = []
|
52
|
+
vertices2 = []
|
53
|
+
|
54
|
+
0.upto(@pts) do |i|
|
39
55
|
|
40
|
-
|
56
|
+
vertices2[i] = Vec3D.new
|
57
|
+
vertices[i] = Vec3D.new
|
41
58
|
|
42
|
-
|
59
|
+
vertices[i].x = @lathe_radius + sin( radians( @angle ) ) * @radius
|
43
60
|
|
44
|
-
if @
|
45
|
-
|
46
|
-
no_fill
|
61
|
+
if @is_helix
|
62
|
+
vertices[i].z = cos( radians( @angle ) ) * @radius - (@helix_offset * @segments) / 2
|
47
63
|
else
|
48
|
-
|
49
|
-
fill 150, 195, 125
|
64
|
+
vertices[i].z = cos( radians( @angle ) ) * @radius
|
50
65
|
end
|
51
66
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
0.upto(@pts) { |i|
|
62
|
-
|
63
|
-
vertices2[i] = PVector.new
|
64
|
-
vertices[i] = PVector.new
|
67
|
+
@angle += 360.0 / @pts
|
68
|
+
end
|
69
|
+
|
70
|
+
@lathe_angle = 0
|
71
|
+
|
72
|
+
0.upto(@segments) do |i|
|
73
|
+
begin_shape QUAD_STRIP
|
74
|
+
(0..@pts).each do |j|
|
75
|
+
vertex_for_vector vertices2[j] if i > 0
|
65
76
|
|
66
|
-
|
77
|
+
vertices2[j].x = cos( radians( @lathe_angle ) ) * vertices[j].x
|
78
|
+
vertices2[j].y = sin( radians( @lathe_angle )
|
79
|
+
) * vertices[j].x
|
80
|
+
vertices2[j].z = vertices[j].z
|
67
81
|
|
68
|
-
if @is_helix
|
69
|
-
vertices[i].z = cos( radians( @angle ) ) * @radius - (@helix_offset * @segments) / 2
|
70
|
-
else
|
71
|
-
vertices[i].z = cos( radians( @angle ) ) * @radius
|
72
|
-
end
|
82
|
+
vertices[j].z += @helix_offset if @is_helix
|
73
83
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
(0..@pts).each { |j|
|
82
|
-
vertex_for_pvector vertices2[j] if i > 0
|
83
|
-
|
84
|
-
vertices2[j].x = cos( radians( @lathe_angle ) ) * vertices[j].x
|
85
|
-
vertices2[j].y = sin( radians( @lathe_angle )
|
86
|
-
) * vertices[j].x
|
87
|
-
vertices2[j].z = vertices[j].z
|
88
|
-
|
89
|
-
vertices[j].z += @helix_offset if @is_helix
|
90
|
-
|
91
|
-
vertex_for_pvector vertices2[j]
|
92
|
-
}
|
93
|
-
|
94
|
-
@lathe_angle += (@is_helix ? 720 : 360) / @segments
|
95
|
-
end_shape
|
96
|
-
}
|
97
|
-
|
84
|
+
vertex_for_vector vertices2[j]
|
85
|
+
end
|
86
|
+
|
87
|
+
@lathe_angle += (@is_helix ? 720 : 360) / @segments
|
88
|
+
end_shape
|
89
|
+
end
|
90
|
+
|
98
91
|
end
|
99
92
|
|
100
|
-
def
|
101
|
-
|
93
|
+
def vertex_for_vector ( pvec )
|
94
|
+
vertex( pvec.x, pvec.y, pvec.z )
|
102
95
|
end
|
103
96
|
|
104
|
-
def key_pressed
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
@segments -= 1 if keyCode == LEFT && @segments > 3
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
@lathe_radius += 1 if key.eql? "s"
|
117
|
-
@lathe_radius -= 1 if key.eql? "a" #&& @lathe_radius > 0
|
118
|
-
|
119
|
-
@radius += 1 if key.eql? "x"
|
120
|
-
@radius -= 1 if key.eql? "z" && @radius > 10
|
121
|
-
|
122
|
-
@is_wireframe = !@is_wireframe if key.eql? "w"
|
123
|
-
|
124
|
-
@is_helix = !@is_helix if key.eql? "h"
|
125
|
-
|
126
|
-
end
|
97
|
+
def key_pressed
|
98
|
+
|
99
|
+
if key == CODED
|
100
|
+
@pts += 1 if keyCode == UP && @pts < 40
|
101
|
+
@pts -= 1 if keyCode == DOWN && @pts > 3
|
102
|
+
@segments += 1 if keyCode == RIGHT && @segments < 80
|
103
|
+
@segments -= 1 if keyCode == LEFT && @segments > 3
|
104
|
+
end
|
127
105
|
|
106
|
+
@lathe_radius += 1 if key == 's'
|
107
|
+
@lathe_radius -= 1 if key == 'a' #&& @lathe_radius > 0
|
108
|
+
@radius += 1 if key == 'x'
|
109
|
+
@radius -= 1 if key == 'z' && @radius > 10
|
110
|
+
@is_wireframe = !@is_wireframe if key == 'w'
|
111
|
+
@is_helix = !@is_helix if key == 'h'
|
112
|
+
end
|
113
|
+
|