ruby-processing 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|