ruby-processing 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +137 -0
- data/LICENSE +37 -0
- data/README +61 -0
- data/bin/rp5 +4 -0
- data/lib/core/core.jar +0 -0
- data/lib/core/jruby-complete.jar +0 -0
- data/lib/ruby-processing.rb +27 -0
- data/lib/ruby-processing/app.rb +358 -0
- data/lib/ruby-processing/exporters/applet_exporter.rb +75 -0
- data/lib/ruby-processing/exporters/application_exporter.rb +87 -0
- data/lib/ruby-processing/exporters/base_exporter.rb +133 -0
- data/lib/ruby-processing/exporters/creator.rb +46 -0
- data/lib/ruby-processing/helpers/string.rb +27 -0
- data/lib/ruby-processing/runner.rb +143 -0
- data/lib/ruby-processing/runners/base.rb +5 -0
- data/lib/ruby-processing/runners/live.rb +11 -0
- data/lib/ruby-processing/runners/run.rb +5 -0
- data/lib/ruby-processing/runners/watch.rb +42 -0
- data/lib/templates/applet/images/built_with.jpg +0 -0
- data/lib/templates/applet/images/ruby.jpg +0 -0
- data/lib/templates/applet/images/top.png +0 -0
- data/lib/templates/applet/index.html.erb +111 -0
- data/lib/templates/applet/library/library.txt +1 -0
- data/lib/templates/application/Contents/Info.plist.erb +58 -0
- data/lib/templates/application/Contents/MacOS/JavaApplicationStub +0 -0
- data/lib/templates/application/Contents/PkgInfo +1 -0
- data/lib/templates/application/Contents/Resources/sketch.icns +0 -0
- data/lib/templates/application/lib/MANIFEST.MF +3 -0
- data/lib/templates/application/lib/args.txt.erb +3 -0
- data/lib/templates/application/lib/library/library.txt +1 -0
- data/lib/templates/application/run.erb +4 -0
- data/lib/templates/application/run.exe +0 -0
- data/lib/templates/create/blank_sketch.rb.erb +15 -0
- data/library/boids/boids.rb +222 -0
- data/library/control_panel/control_panel.rb +149 -0
- data/library/dxf/bin/processing/dxf/RawDXF.class +0 -0
- data/library/dxf/dxfviewer.jar +0 -0
- data/library/dxf/library/dxf.jar +0 -0
- data/library/javascript/library/export.txt +6 -0
- data/library/javascript/library/javascript.jar +0 -0
- data/library/minim/library/jl1.0.jar +0 -0
- data/library/minim/library/jsminim.jar +0 -0
- data/library/minim/library/minim-spi.jar +0 -0
- data/library/minim/library/minim.jar +0 -0
- data/library/minim/library/mp3spi1.9.4.jar +0 -0
- data/library/minim/library/tritonus_aos.jar +0 -0
- data/library/minim/library/tritonus_share.jar +0 -0
- data/library/minim/license.txt +339 -0
- data/library/minim/version.txt +1 -0
- data/library/net/bin/processing/net/Client.class +0 -0
- data/library/net/bin/processing/net/Server.class +0 -0
- data/library/net/library/net.jar +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$ImageCache.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$TessCallback.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL.class +0 -0
- data/library/opengl/library/export.txt +13 -0
- data/library/opengl/library/gluegen-rt-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-linux-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt.dll +0 -0
- data/library/opengl/library/gluegen-rt.jar +0 -0
- data/library/opengl/library/gluegen-rt.jar.pack.gz +0 -0
- data/library/opengl/library/jogl-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-linux-i586.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-i586.jar +0 -0
- data/library/opengl/library/jogl.dll +0 -0
- data/library/opengl/library/jogl.jar +0 -0
- data/library/opengl/library/jogl.jar.pack.gz +0 -0
- data/library/opengl/library/jogl_awt.dll +0 -0
- data/library/opengl/library/jogl_cg.dll +0 -0
- data/library/opengl/library/libgluegen-rt.jnilib +0 -0
- data/library/opengl/library/libgluegen-rt.so +0 -0
- data/library/opengl/library/libjogl.jnilib +0 -0
- data/library/opengl/library/libjogl.so +0 -0
- data/library/opengl/library/libjogl_awt.jnilib +0 -0
- data/library/opengl/library/libjogl_awt.so +0 -0
- data/library/opengl/library/libjogl_cg.jnilib +0 -0
- data/library/opengl/library/libjogl_cg.so +0 -0
- data/library/opengl/library/opengl.jar +0 -0
- data/library/pdf/bin/processing/pdf/PGraphicsPDF.class +0 -0
- data/library/pdf/library/itext.jar +0 -0
- data/library/pdf/library/pdf.jar +0 -0
- data/library/pdf/notes.txt +9 -0
- data/library/serial/bin/processing/serial/Serial.class +0 -0
- data/library/serial/library/RXTXcomm.jar +0 -0
- data/library/serial/library/export.txt +3 -0
- data/library/serial/library/librxtxSerial.jnilib +0 -0
- data/library/serial/library/librxtxSerial.so +0 -0
- data/library/serial/library/rxtxSerial.dll +0 -0
- data/library/serial/library/serial.jar +0 -0
- data/library/video/bin/processing/video/Capture.class +0 -0
- data/library/video/bin/processing/video/Movie.class +0 -0
- data/library/video/bin/processing/video/MovieMaker.class +0 -0
- data/library/video/library/video.jar +0 -0
- data/samples/animator.rb +47 -0
- data/samples/circle_collision.rb +213 -0
- data/samples/fern.rb +49 -0
- data/samples/flight_patterns.rb +64 -0
- data/samples/full_screen.rb +35 -0
- data/samples/getting_started.rb +43 -0
- data/samples/jwishy.rb +85 -0
- data/samples/kinetic_type.rb +100 -0
- data/samples/learning_processing/ABOUT +11 -0
- data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +34 -0
- data/samples/learning_processing/chapter_01/2_nofill.rb +25 -0
- data/samples/learning_processing/chapter_01/3_rgb_color.rb +31 -0
- data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +36 -0
- data/samples/learning_processing/chapter_01/5_zoog.rb +37 -0
- data/samples/learning_processing/chapter_02/1_zoog_again.rb +39 -0
- data/samples/learning_processing/chapter_03/1_zoog_as_dynamic_sketch.rb +44 -0
- data/samples/learning_processing/chapter_03/2_mouse_x_and_mouse_y.rb +26 -0
- data/samples/learning_processing/chapter_03/3_zoog_as_dynamic_sketch_with_variation.rb +41 -0
- data/samples/learning_processing/chapter_03/4_drawing_a_continuous_line.rb +18 -0
- data/samples/learning_processing/chapter_03/5_mouse_pressed_and_key_pressed.rb +29 -0
- data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +50 -0
- data/samples/learning_processing/chapter_04/1_variable_declaration.rb +24 -0
- data/samples/learning_processing/chapter_04/2_using_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/3_varying_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/4_many_variables.rb +38 -0
- data/samples/learning_processing/chapter_04/5_using_system_variables.rb +28 -0
- data/samples/learning_processing/chapter_04/6_ellipse_with_variables.rb +24 -0
- data/samples/learning_processing/chapter_04/7_filling_variables_with_random_values.rb +27 -0
- data/samples/learning_processing/chapter_04/8_variable_zoog.rb +50 -0
- data/samples/learning_processing/chapter_05/01_conditionals.rb +31 -0
- data/samples/learning_processing/chapter_05/02_more_conditionals.rb +38 -0
- data/samples/learning_processing/chapter_05/03_rollovers.rb +34 -0
- data/samples/learning_processing/chapter_05/04_hold_down_the_button.rb +33 -0
- data/samples/learning_processing/chapter_05/05_button_as_switch.rb +39 -0
- data/samples/learning_processing/chapter_05/06_bouncing_ball.rb +33 -0
- data/samples/learning_processing/chapter_05/07_bouncing_color.rb +37 -0
- data/samples/learning_processing/chapter_05/08_square_following_edge.rb +59 -0
- data/samples/learning_processing/chapter_05/09_simple_gravity.rb +43 -0
- data/samples/learning_processing/chapter_05/10_zoog_and_conditionals.rb +53 -0
- data/samples/learning_processing/chapter_06/01_many_lines.rb +29 -0
- data/samples/learning_processing/chapter_06/02_many_lines_with_variables.rb +53 -0
- data/samples/learning_processing/chapter_06/03_while_loop.rb +30 -0
- data/samples/learning_processing/chapter_06/04_infinite_loop.rb +25 -0
- data/samples/learning_processing/chapter_06/05_another_infinite_loop.rb +33 -0
- data/samples/learning_processing/chapter_06/06_legs_with_a_for_loop.rb +41 -0
- data/samples/learning_processing/chapter_06/07_local_variables.rb +39 -0
- data/samples/learning_processing/chapter_06/08_lines_one_at_a_time.rb +30 -0
- data/samples/learning_processing/chapter_06/09_simple_while_loop_with_interactivity.rb +41 -0
- data/samples/learning_processing/chapter_06/10_zoog_with_arms.rb +56 -0
- data/samples/learning_processing/chapter_06/11_multiple_zoogs.rb +46 -0
- data/samples/learning_processing/chapter_07/01_defining_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/02_calling_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/03_bouncing_ball_with_functions.rb +49 -0
- data/samples/learning_processing/chapter_07/04_function_returns_distance.rb +48 -0
- data/samples/learning_processing/chapter_07/05_zoog_with_functions.rb +71 -0
- data/samples/learning_processing/chapter_08/01_car_class_and_car_variable.rb +45 -0
- data/samples/learning_processing/chapter_08/02_two_car_objects.rb +60 -0
- data/samples/learning_processing/chapter_08/03_object_oriented_zoog.rb +81 -0
- data/samples/learning_processing/chapter_10/01_catcher.rb +35 -0
- data/samples/learning_processing/chapter_10/02_bouncing_ball.rb +44 -0
- data/samples/learning_processing/chapter_10/03_bouncing_balls_with_intersection.rb +69 -0
- data/samples/learning_processing/chapter_10/04_a_timer.rb +24 -0
- data/samples/learning_processing/chapter_10/05_object_oriented_timer.rb +42 -0
- data/samples/learning_processing/chapter_10/06_simple_raindrop.rb +23 -0
- data/samples/learning_processing/chapter_10/07_drops_one_at_a_time.rb +63 -0
- data/samples/learning_processing/chapter_13/02_random_number_distribution.rb +24 -0
- data/samples/learning_processing/chapter_13/03_probabilities.rb +33 -0
- data/samples/learning_processing/chapter_13/04_perlin_noise.rb +22 -0
- data/samples/learning_processing/chapter_13/06_oscillation.rb +29 -0
- data/samples/learning_processing/chapter_13/07_wave.rb +31 -0
- data/samples/learning_processing/chapter_13/08_recursion.rb +30 -0
- data/samples/learning_processing/chapter_13/09_two_dimensional_array.rb +21 -0
- data/samples/learning_processing/chapter_13/10_two_dimensional_array_with_objects.rb +54 -0
- data/samples/learning_processing/chapter_14/01_growing_rectangle.rb +26 -0
- data/samples/learning_processing/chapter_14/02_multiple_translations.rb +37 -0
- data/samples/learning_processing/chapter_14/03_depth_rectangle.rb +29 -0
- data/samples/learning_processing/chapter_14/04_pyramid_using_beingshape.rb +55 -0
- data/samples/learning_processing/chapter_14/05_rotate_rectangle_around_center.rb +28 -0
- data/samples/learning_processing/chapter_14/06_rotate_z.rb +24 -0
- data/samples/learning_processing/chapter_14/07_rotate_x.rb +24 -0
- data/samples/learning_processing/chapter_14/08_rotate_y.rb +24 -0
- data/samples/learning_processing/chapter_14/09_rotate_all.rb +24 -0
- data/samples/learning_processing/chapter_14/10_draw_pyramid.rb +59 -0
- data/samples/learning_processing/chapter_14/12_rotating_one_square.rb +25 -0
- data/samples/learning_processing/chapter_14/13_rotating_another_square.rb +25 -0
- data/samples/learning_processing/chapter_14/14_rotating_both_squares.rb +43 -0
- data/samples/learning_processing/chapter_14/15_rotating_many_things.rb +56 -0
- data/samples/learning_processing/chapter_14/16_simple_solar_system.rb +53 -0
- data/samples/learning_processing/chapter_14/17_nested_push_and_pop.rb +50 -0
- data/samples/learning_processing/chapter_14/18_object_oriented_solar_system.rb +69 -0
- data/samples/learning_processing/chapter_15/01_hello_world_image.rb +20 -0
- data/samples/learning_processing/chapter_15/02_image_sprite.rb +29 -0
- data/samples/learning_processing/chapter_15/03_swapping_images.rb +25 -0
- data/samples/learning_processing/chapter_15/04_image_sequence.rb +22 -0
- data/samples/learning_processing/chapter_15/05_setting_pixels.rb +19 -0
- data/samples/learning_processing/chapter_15/06_pixels_2d.rb +29 -0
- data/samples/learning_processing/chapter_15/07_image_pixels.rb +40 -0
- data/samples/learning_processing/chapter_15/08_image_brightness.rb +29 -0
- data/samples/learning_processing/chapter_15/09_flashlight_effect.rb +42 -0
- data/samples/learning_processing/chapter_15/10_brightness_threshold.rb +33 -0
- data/samples/learning_processing/chapter_15/11_brightness_threshold_with_filter.rb +20 -0
- data/samples/learning_processing/chapter_15/12_pixel_neighbour_differences.rb +43 -0
- data/samples/learning_processing/chapter_15/14_pointillism.rb +34 -0
- data/samples/learning_processing/chapter_15/15_2d_image_mapped_to_3d.rb +43 -0
- data/samples/learning_processing/chapter_15/data/animal0.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal1.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal2.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal3.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal4.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal5.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal6.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/face.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/mysummervacation.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/sunflower.jpg +0 -0
- data/samples/learning_processing/chapter_16/01_display_video.rb +25 -0
- data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +24 -0
- data/samples/reflection.rb +26 -0
- data/samples/simple_buffer.rb +49 -0
- data/samples/tree.rb +83 -0
- metadata +348 -0
@@ -0,0 +1 @@
|
|
1
|
+
2.0.1
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# If you want to support more platforms, see the jogl.dev.java.net to get the
|
2
|
+
# natives libraries for the platform in question (i.e. solaris). Then, add it
|
3
|
+
# them to the applet line for export. For applications, you'll have to make the
|
4
|
+
# changes by hand, i.e. use the linux version of the export, and modify its
|
5
|
+
# contents to include the necessary files for your platform.
|
6
|
+
|
7
|
+
application.macosx = opengl.jar, jogl.jar, libjogl.jnilib, libjogl_awt.jnilib, libjogl_cg.jnilib, gluegen-rt.jar, libgluegen-rt.jnilib
|
8
|
+
|
9
|
+
application.windows = opengl.jar, jogl.jar, jogl.dll, jogl_awt.dll, jogl_cg.dll, gluegen-rt.jar, gluegen-rt.dll
|
10
|
+
|
11
|
+
application.linux = opengl.jar, jogl.jar, gluegen-rt.jar, libjogl.so, libjogl_awt.so, libjogl_cg.so, libgluegen-rt.so
|
12
|
+
|
13
|
+
applet = opengl.jar, jogl.jar, jogl.jar.pack.gz, jogl-natives-linux-i586.jar, jogl-natives-linux-amd64.jar, jogl-natives-macosx-ppc.jar, jogl-natives-macosx-universal.jar, jogl-natives-windows-i586.jar, jogl-natives-windows-amd64.jar, gluegen-rt.jar, gluegen-rt.jar.pack.gz, gluegen-rt-natives-linux-amd64.jar, gluegen-rt-natives-windows-amd64.jar, gluegen-rt-natives-linux-i586.jar, gluegen-rt-natives-windows-i586.jar, gluegen-rt-natives-macosx-ppc.jar, gluegen-rt-natives-macosx-universal.jar
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
The majority of the work in this library is done by iText.
|
2
|
+
http://www.lowagie.com/iText/
|
3
|
+
|
4
|
+
The version bundled in this release is 2.1.2u.
|
5
|
+
|
6
|
+
The files in the library must be named itext.jar (not iText-2.1.2u.jar)
|
7
|
+
because they're specifically included on the classpath as part of the
|
8
|
+
build/platform/make.sh scripts.
|
9
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/samples/animator.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# From the Processing Examples
|
2
|
+
# -- omygawshkenas
|
3
|
+
|
4
|
+
require 'ruby-processing'
|
5
|
+
|
6
|
+
class Animator < Processing::App
|
7
|
+
FRAME_COUNT = 12
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@frames = []
|
11
|
+
@last_time = 0
|
12
|
+
@current_frame = 0
|
13
|
+
@draw = false
|
14
|
+
@back_color = 204
|
15
|
+
stroke_weight 4
|
16
|
+
smooth
|
17
|
+
background @back_color
|
18
|
+
FRAME_COUNT.times { @frames << get() }
|
19
|
+
end
|
20
|
+
|
21
|
+
def draw
|
22
|
+
time = millis()
|
23
|
+
if time > @last_time + 100
|
24
|
+
next_frame
|
25
|
+
@last_time = time
|
26
|
+
end
|
27
|
+
line(pmouse_x, pmouse_y, mouse_x, mouse_y) if @draw
|
28
|
+
end
|
29
|
+
|
30
|
+
def mouse_pressed; @draw = true; end
|
31
|
+
def mouse_released; @draw = false; end
|
32
|
+
|
33
|
+
def key_pressed
|
34
|
+
background @back_color
|
35
|
+
@frames.size.times {|i| @frames[i] = get()}
|
36
|
+
end
|
37
|
+
|
38
|
+
def next_frame
|
39
|
+
@frames[@current_frame] = get()
|
40
|
+
@current_frame += 1
|
41
|
+
@current_frame = 0 if @current_frame >= @frames.size
|
42
|
+
image(@frames[@current_frame], 0, 0)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
Animator.new :title => "Animator", :width => 350, :height => 350
|
@@ -0,0 +1,213 @@
|
|
1
|
+
# Based on http://processing.org/learning/topics/circlecollision.html
|
2
|
+
# by Joe Holt
|
3
|
+
|
4
|
+
require 'ruby-processing'
|
5
|
+
|
6
|
+
class Vect2D
|
7
|
+
attr_accessor :vx, :vy
|
8
|
+
def initialize(vx = 0.0, vy = 0.0)
|
9
|
+
@vx = vx
|
10
|
+
@vy = vy
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class Ball
|
16
|
+
attr_accessor :x, :y, :r, :m, :vec
|
17
|
+
def initialize(r = 0.0, vec = nil, x = 0.0, y = 0.0)
|
18
|
+
@x = x
|
19
|
+
@y = y
|
20
|
+
@r = r
|
21
|
+
@m = r*0.1
|
22
|
+
@vec = vec
|
23
|
+
end
|
24
|
+
|
25
|
+
def draw
|
26
|
+
r = @r * 2
|
27
|
+
P.ellipse @x, @y, r, r
|
28
|
+
@px = @x
|
29
|
+
@py = @y
|
30
|
+
end
|
31
|
+
|
32
|
+
def erase
|
33
|
+
r = @r * 2
|
34
|
+
P.rect @px, @py, r, r
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
class Sketch < Processing::App
|
40
|
+
|
41
|
+
def setup
|
42
|
+
smooth
|
43
|
+
noStroke
|
44
|
+
frameRate 30
|
45
|
+
rectMode RADIUS
|
46
|
+
|
47
|
+
@balls = []
|
48
|
+
5.times { @balls << Ball.new(10, Vect2D.new(2.15, -1.35), *emptySpace(15)) }
|
49
|
+
2.times { @balls << Ball.new(40, Vect2D.new(-1.65, 0.42), *emptySpace(45)) }
|
50
|
+
|
51
|
+
@frame_time = nil
|
52
|
+
@frame_count = 0
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def draw
|
57
|
+
t = Time.now
|
58
|
+
if @frame_time
|
59
|
+
fps = 1.0 / (t - @frame_time)
|
60
|
+
end
|
61
|
+
@frame_time = t
|
62
|
+
@frame_count += 1
|
63
|
+
|
64
|
+
# erase previous screen
|
65
|
+
if @frame_count == 1
|
66
|
+
background 51
|
67
|
+
else
|
68
|
+
fill 51
|
69
|
+
@balls.each { |ball| ball.erase }
|
70
|
+
end
|
71
|
+
|
72
|
+
# move the balls
|
73
|
+
fill 240
|
74
|
+
@balls.each do |ball|
|
75
|
+
ball.x += ball.vec.vx
|
76
|
+
ball.y += ball.vec.vy
|
77
|
+
ball.draw
|
78
|
+
checkBoundaryCollision ball
|
79
|
+
end
|
80
|
+
checkObjectCollisions
|
81
|
+
1 * 20
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
def emptySpace(r)
|
86
|
+
x = y = nil
|
87
|
+
while !x || !emptySpace?(x, y, r) do
|
88
|
+
x = rand(width)
|
89
|
+
y = rand(height)
|
90
|
+
end
|
91
|
+
return x, y
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def emptySpace?(x, y, r)
|
96
|
+
@balls.each do |ball|
|
97
|
+
vx = x - ball.x
|
98
|
+
vy = y - ball.y
|
99
|
+
mag = sqrt(vx * vx + vy * vy)
|
100
|
+
return false if mag < r + ball.r
|
101
|
+
end
|
102
|
+
return true
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
def checkObjectCollisions
|
107
|
+
|
108
|
+
(0...(@balls.length)).each do |ia|
|
109
|
+
((ia+1)...(@balls.length)).each do |ib|
|
110
|
+
|
111
|
+
ba = @balls[ia]
|
112
|
+
bb = @balls[ib]
|
113
|
+
|
114
|
+
# get distances between the balls components
|
115
|
+
bVect = Vect2D.new
|
116
|
+
bVect.vx = bb.x - ba.x
|
117
|
+
bVect.vy = bb.y - ba.y
|
118
|
+
|
119
|
+
# calculate magnitude of the vector separating the balls
|
120
|
+
bVectMag = sqrt(bVect.vx * bVect.vx + bVect.vy * bVect.vy)
|
121
|
+
next if bVectMag >= ba.r + bb.r
|
122
|
+
# get angle of bVect
|
123
|
+
theta = atan2(bVect.vy, bVect.vx)
|
124
|
+
# precalculate trig values
|
125
|
+
sine = sin(theta)
|
126
|
+
cosine = cos(theta)
|
127
|
+
|
128
|
+
# bTemp will hold rotated ball positions. You just
|
129
|
+
# need to worry about bTemp[1] position
|
130
|
+
bTemp = [Ball.new, Ball.new]
|
131
|
+
# bb's position is relative to ba's
|
132
|
+
# so you can use the vector between them (bVect) as the
|
133
|
+
# reference point in the rotation expressions.
|
134
|
+
# bTemp[0].x and bTemp[0].y will initialize
|
135
|
+
# automatically to 0.0, which is what you want
|
136
|
+
# since bb will rotate around ba
|
137
|
+
bTemp[1].x = cosine * bVect.vx + sine * bVect.vy
|
138
|
+
bTemp[1].y = cosine * bVect.vy - sine * bVect.vx
|
139
|
+
|
140
|
+
# rotate Temporary velocities
|
141
|
+
vTemp = [Vect2D.new, Vect2D.new]
|
142
|
+
vTemp[0].vx = cosine * ba.vec.vx + sine * ba.vec.vy
|
143
|
+
vTemp[0].vy = cosine * ba.vec.vy - sine * ba.vec.vx
|
144
|
+
vTemp[1].vx = cosine * bb.vec.vx + sine * bb.vec.vy
|
145
|
+
vTemp[1].vy = cosine * bb.vec.vy - sine * bb.vec.vx
|
146
|
+
|
147
|
+
# Now that velocities are rotated, you can use 1D
|
148
|
+
# conservation of momentum equations to calculate
|
149
|
+
# the final velocity along the x-axis.
|
150
|
+
vFinal = [Vect2D.new, Vect2D.new]
|
151
|
+
# final rotated velocity for ba
|
152
|
+
vFinal[0].vx = ((ba.m - bb.m) * vTemp[0].vx + 2 * bb.m *
|
153
|
+
vTemp[1].vx) / (ba.m + bb.m)
|
154
|
+
vFinal[0].vy = vTemp[0].vy
|
155
|
+
# final rotated velocity for ba
|
156
|
+
vFinal[1].vx = ((bb.m - ba.m) * vTemp[1].vx + 2 * ba.m *
|
157
|
+
vTemp[0].vx) / (ba.m + bb.m)
|
158
|
+
vFinal[1].vy = vTemp[1].vy
|
159
|
+
|
160
|
+
# hack to avoid clumping
|
161
|
+
bTemp[0].x += vFinal[0].vx
|
162
|
+
bTemp[1].x += vFinal[1].vx
|
163
|
+
|
164
|
+
# Rotate ball positions and velocities back
|
165
|
+
# Reverse signs in trig expressions to rotate
|
166
|
+
# in the opposite direction
|
167
|
+
# rotate balls
|
168
|
+
bFinal = [Ball.new, Ball.new]
|
169
|
+
bFinal[0].x = cosine * bTemp[0].x - sine * bTemp[0].y
|
170
|
+
bFinal[0].y = cosine * bTemp[0].y + sine * bTemp[0].x
|
171
|
+
bFinal[1].x = cosine * bTemp[1].x - sine * bTemp[1].y
|
172
|
+
bFinal[1].y = cosine * bTemp[1].y + sine * bTemp[1].x
|
173
|
+
|
174
|
+
# update balls to screen position
|
175
|
+
bb.x = ba.x + bFinal[1].x
|
176
|
+
bb.y = ba.y + bFinal[1].y
|
177
|
+
ba.x = ba.x + bFinal[0].x
|
178
|
+
ba.y = ba.y + bFinal[0].y
|
179
|
+
|
180
|
+
# update velocities
|
181
|
+
ba.vec.vx = cosine * vFinal[0].vx - sine * vFinal[0].vy
|
182
|
+
ba.vec.vy = cosine * vFinal[0].vy + sine * vFinal[0].vx
|
183
|
+
bb.vec.vx = cosine * vFinal[1].vx - sine * vFinal[1].vy
|
184
|
+
bb.vec.vy = cosine * vFinal[1].vy + sine * vFinal[1].vx
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
def checkBoundaryCollision(ball)
|
192
|
+
|
193
|
+
if ball.x > width-ball.r
|
194
|
+
ball.x = width-ball.r
|
195
|
+
ball.vec.vx *= -1
|
196
|
+
elsif ball.x < ball.r
|
197
|
+
ball.x = ball.r
|
198
|
+
ball.vec.vx *= -1
|
199
|
+
end
|
200
|
+
if ball.y > height-ball.r
|
201
|
+
ball.y = height-ball.r
|
202
|
+
ball.vec.vy *= -1
|
203
|
+
elsif ball.y < ball.r
|
204
|
+
ball.y = ball.r
|
205
|
+
ball.vec.vy *= -1
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
|
213
|
+
P = Sketch.new(:width => 400, :height => 400, :title => "CircleCollision2")
|
data/samples/fern.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# The Fern Fractal
|
2
|
+
# by Luis Correia
|
3
|
+
#
|
4
|
+
# port by omygawshkenas
|
5
|
+
|
6
|
+
require 'ruby-processing'
|
7
|
+
|
8
|
+
class Fern < Processing::App
|
9
|
+
|
10
|
+
def setup
|
11
|
+
no_loop
|
12
|
+
puts "Be patient. This takes about 10 seconds to render."
|
13
|
+
end
|
14
|
+
|
15
|
+
def draw
|
16
|
+
background 0
|
17
|
+
load_pixels
|
18
|
+
x0, y0 = 0.0, 0.0
|
19
|
+
x, y, r = 0.0, 0.0, 0.0
|
20
|
+
i, j = 0, 0
|
21
|
+
max_iterations = 200000
|
22
|
+
|
23
|
+
max_iterations.times do
|
24
|
+
r = rand * 100
|
25
|
+
if r <= 1
|
26
|
+
x = 0.0
|
27
|
+
y = 0.16 * y0
|
28
|
+
elsif r <= 7
|
29
|
+
x = 0.2 * x0 - 0.26 * y0
|
30
|
+
y = 0.23 * x0 + 0.22 * y0
|
31
|
+
elsif r <= 14
|
32
|
+
x = -0.15 * x0 + 0.28 * y0
|
33
|
+
y = 0.26 * x0 + 0.24 * y0
|
34
|
+
else
|
35
|
+
x = 0.85 * x0 + 0.04 * y0
|
36
|
+
y = -0.004 * x0 + 0.85 * y0 + 1.6
|
37
|
+
end
|
38
|
+
|
39
|
+
i = height - (y * 45).to_i
|
40
|
+
j = width / 2 + (x * 45).to_i
|
41
|
+
pixels[i * height + j] += 2560 if (i >=0 && i < height && j >= 0 && j < width)
|
42
|
+
x0, y0 = x, y
|
43
|
+
end
|
44
|
+
|
45
|
+
update_pixels
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Fern.new :title => "Fern", :width => 500, :height => 500
|