Ruby勉強会のネタでrp15-level
物理エンジンでも実装してもらう問題作ってみた。
が、使わなかったので*1次回にでもと思った。
けど、よくよく考えると私これ実装するのに1時間くらい掛かってる。
1時間程度の勉強会のネタとしては、駄目だなと今更ながら気づくorz
で、書きなぐったものなので、駄目駄目だけどruby-processingなら簡易物理シミュレーションも簡単ですよってことで、ご参考までに。ここ、駄目だろって所は教えてもらえると嬉しいです^^
class Physics def initialize x,y,fr @g = PVector.new(0,9.8) @objects = [] @x_size,@y_size = x,y @fr = fr @now = Time.now end def sec Time.now-@now end def set_object point,vector,cor=1.0 object = [point,vector,cor] @objects << object object end def check_range ary case when ary[0].x < 0 ary[0].x = 0 ary[1].x *= (-ary[2]) when @x_size < ary[0].x ary[0].x = @x_size ary[1].x *= (-ary[2]) when @y_size < ary[0].y ary[0].y = @y_size ary[1].y *= (-ary[2]) #p sec end ary end def draw @objects = @objects.map{|ary| ary[0].x += (ary[1].x/@fr) ary[0].y += (ary[1].y/@fr) ary[1].x += (@g.x/@fr)*10 ary[1].y += (@g.y/@fr)*10 check_range ary } end end def setup size 400,400 smooth frame_rate 15 @now = Time.now @phy = Physics.new(400,400,15) @a = @phy.set_object(PVector.new(100,0),PVector.new(10,0),0.8) @b = @phy.set_object(PVector.new(200,0),PVector.new(0,0),0.6) @c = @phy.set_object(PVector.new(300,0),PVector.new(-10,0),0.4) end def sec Time.now-@now end def draw background 0 fill 255 ellipse_mode CENTER @phy.draw ellipse(@a[0].x,@a[0].y,10,10) ellipse(@b[0].x,@b[0].y,10,10) ellipse(@c[0].x,@c[0].y,10,10) end
*1:なんかグダグダになってしまって、基本問題さえ完了した人いたか疑問、大迷惑かけてしまったw;