# Sand Traveler was a special commision, produced in Processing by # Jared Tarbell for Sonar 2004, Barcelona. # This Ruby port has been tweaked, half of the (non-running) code exorcised, # color palette broadened, and done in negative. # refactored and updated for processing-2.0 # -- omygawshkenas attr_reader :cities, :num, :slowdown, :num_travelers, :panel load_library 'control_panel' def setup size displayWidth, displayHeight, P2D control_panel do |c| c.slider :slowdown, 0.5..1.1 c.slider :num_travelers, 0..50 @panel = c end @dx, @dy = 0, 0 @num = 150 @cities = [] @slowdown = 0.954 @num_travelers = 13 reset_all end def draw panel.visible = self.visible cities.each {|city| city.move } end def mouse_pressed reset_all end def reset_all @source_colors = [[@red || rand(255), @green || rand(255), @blue || rand(255), rand(45 .. 75)], [@red_2 || rand(255), @green_2 || rand(255), @blue_2 || rand(255), rand(45 .. 75)]] background 0 vt = 4.2 vvt = 0.2 ot = rand * PI * 2 num.times do |i| tinc = ot + (1.1 - i / num) * 2 * i * (PI * 2) / num vx, vy = vt * sin(tinc), vt * cos(tinc) cities << City.new(self, width/2+vx*2, height/2+vy*2, vx, vy, i) vvt -= 0.00033 vt += vvt end cities.each { |city| city.find_friend } end def some_color choice = @source_colors.sample.dup choice.map! { |c| c + rand(-60 .. 60) } choice[3] = 0.7 * choice[3] return choice end class City include Processing::Proxy attr_reader :x, :y, :color, :app, :friend, :vx, :vy # SLOWDOWN = 0.946 def initialize(app, dx, dy, vx, vy, index) @app = app @x, @y = dx, dy @vx, @vy = vx, vy @index = index @slowdown = 0.956 @color = app.some_color end def move if (vx.abs + vy.abs) > 0.01 @vx += (friend.x - x) / 1000 @vy += (friend.y - y) / 1000 @vx *= app.slowdown; @vy *= app.slowdown @x += vx; @y += vy draw_travelers end end def find_friend @friend = app.cities[(@index + rand(app.num/5) + 1) % app.num] end def draw_travelers stroke *friend.color app.num_travelers.to_i.times do |i| t = rand * PI * 2 dx = sin(t) * (x - friend.x) / 2 + (x + friend.x) / 2 dy = sin(t) * (y - friend.y) / 2 + (y + friend.y) / 2 if rand < 0.01 dx += rand(-3.0 .. 3) dy += rand(-3.0 .. 3) end point dx, dy end end end
Experiments with ruby-processing (processing-2.2.1) and JRubyArt for processing-3.0
Monday, 4 February 2013
Sand Traveler Refactored and Updated
Just checking that this classic ruby processing example will run with my updated ruby-processing. The main change is that the sketch is now a bare sketch. Other changes I've made include the use of the Processing::Proxy mixin and avoiding bare calls to global $app, and using the ruby 1.9 feature rand range. I've also made use of displayWidth and displayHeight variables (NB: these must be camel case currently) to display full size on screen. I would recommend letting the sketch "grow" a bit before messing with controls to get best effect, see those travellers move....
Labels:
jruby-1.7.2,
processing-2.0,
ruby-processing
Subscribe to:
Post Comments (Atom)
Followers
Blog Archive
-
▼
2013
(94)
-
▼
February
(8)
- My Fork is now at Processing-2.0 and JRuby-1.7.4
- Shader API changed in latest processing version at...
- Hairy Ball (Esfera by David Pena)
- Conway game of life using shaders in ruby-processing
- A graphical example of deep jruby voodoo in ruby-p...
- Deep jruby voodo in ruby-processing
- Sand Traveler Refactored and Updated
- rspec and re-factoring cs_grammar
-
▼
February
(8)
About Me
- monkstone
- I have developed JRubyArt and propane new versions of ruby-processing for JRuby-9.1.5.0 and processing-3.2.2
No comments:
Post a Comment