Rの表示。

Rも試した。
インストールは
sudo apt-get install r-base-core

io.read から受け取れるデータを画像データにするのは、難しそう。
とりあえず、一時ファイルに、置いてから SDL::Surface.load で読み取る方法でやってみた。

#!usr/bin/env ruby

require 'rubygems'
require 'sdl'

class Cell
def initialize(screen)
@screen = screen
IO.popen("R -q --no-save", "r+") do |io|
io.puts("png('/tmp/in.png', width=400, height=250)")
io.puts("hist(rnorm(20000), nc=20)")
io.puts("dev.off()")
io.puts("q()")
io.read
end
@surface = SDL::Surface.load("/tmp/in.png")
@x,@y = 25,25
end

def update
@screen.put(@surface,@x,@y)
end
end

class Phase
def initialize(screen)
@screen = screen
@item = Cell.new(@screen)
end

def update
@item.update
end

def handling(event)
exit if event.kind_of?(SDL::Event::Quit) || (event.kind_of?(SDL::Event::KeyDown) && event.sym == SDL::Key::ESCAPE)
end

def run
loop do
while e=SDL::Event.poll
handling(e)
end
update
@screen.flip
SDL.delay(50)
end
end
end

SDL.init(SDL::INIT_EVERYTHING)
screen = SDL::setVideoMode(450,300,16,SDL::SWSURFACE)
Phase.new(screen).run
[PR]
by gaziya | 2011-02-11 17:33