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次元グラフ動画」として、公開しました。