hirax.net::inside out::2009年12月04日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年11月 を読む << 2009年12月 を読む >> 2010年1月 を読む

2009-12-04[n年前へ]

Thinkpad 加速度センサでExcel3次元グラフを未来のディスプレイ風にしよう 

 Ruby版 Thinkpad 加速度センサ類取得クラスを作ったので、さっそく何か加速度センサを使って遊んでみることにしましょう。まずは、とても簡単に「未来のディスプレイ」を作る風のことを、Ruby+Microsoft Excelで行ってみることにしましょう。

 というわけで、Thinkpadを傾けると、それに応じてエクセルの三次元グラフを(傾けた方向に応じた)さまざまな方向から眺めることができるという次のようなスクリプトを書いてみました。

 このスクリプトはまずエクセルで(適当な値を代入した)三次元グラフを作成し、(その後の30秒間にあなたがグラフを色々カスタマイズする時間を与えた上で)、30秒経た後にThinkpadの傾きに応じて三次元グラフを好きな方向からリアルタイムにグリグリ動かしながら眺めることができる、というスクリプトです。(動画は「Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画」で観ることができます)

require 'accelerometer'
require 'win32ole'

excel=WIN32OLE.new("excel.application")
excel['Visible']=TRUE
excel.Workbooks.Add()

excel.Range("a1")['Value']=1
excel.Range("a2")['Value']=1
excel.Range("a3")['Value']=1
excel.Range("a4")['Value']=1
excel.Range("b1")['Value']=1
excel.Range("b2")['Value']=2
excel.Range("b3")['Value']=2
excel.Range("b4")['Value']=1
excel.Range("c1")['Value']=1
excel.Range("c2")['Value']=3
excel.Range("c3")['Value']=2
excel.Range("c4")['Value']=1
excel.Range("d1")['Value']=1
excel.Range("d2")['Value']=1
excel.Range("d3")['Value']=1
excel.Range("d4")['Value']=1
excel.Range("a1:d4").Select()
excelchart=excel.Charts.Add()
excelchart['Type']=-4100
sleep 30 # wait time for custumize
accelerometer=Accelerometer.new
300.to_i.times do
  accelerometer.getAccelerometerData
  x=accelerometer.x
  y=accelerometer.y
  r=Math.sqrt(x*x+y*y)
  elevation=90-r.to_i
  rot=360-(Math.atan2(y,r)+Math::PI)/(2*Math::PI)*360
  excelchart.rotation=rot  # 0 to 360
  excelchart.elevation=elevation # -90 to 90
  sleep(0.2)
end
excel.ActiveWorkbook.Close(0)
excel.Quit()
 このスクリプトを動かせば、Thinkpadを傾ければ、低い角度からグラフを眺めたり、左右に倒せば左右の異なる方向からグラフを眺めたりする…ということができます。「未来風」かはさておき、現実世界で行う動作に適切に対応した動作、つまりは「実感・体感できる」ソフトウェアを作る、というのは何だかとても面白いものです。

 今回作ったスクリプトを動かしているようす、Thinkpad+Ruby+Microsoftエクセルでグラフを未来風にグリグリ動かしている様子を撮影した動画は、「Thinkpad 加速度センサ+RubyによるExcel3次元グラフ動画」として、公開しました。

Thinkpad 加速度センサでExcel3次元グラフを未来のディスプレイ風にしよう