2013年02月24日

DPC-100・加速度センサーの検証

 この記事も含めて、まとめはこちらLink


 iPhoneのポケコンアプリ、DPC-100用のプログラムで、先ほど書いた金庫破りゲームLinkは、iPhoneのコンパス機能を使って本体を回転する操作をしていた。
 でも別の方法、加速度センサーを使ったものを検証してみた。自分用メモ書きとして書いてみる。

 DPC-100には、本体の傾きを検知する命令「ACCEL()」があるが、これによってX(横)、Y(縦)、Z(表裏)共に-1〜1の浮動小数で取得される。
 これを利用すると、
110 WHILE 1
120 X=ACCEL(0)*180
140 Y=ACCEL(1)*180
160 PRINTF("%d %d ",X,Y)
170 WEND
 このプログラムで、iPhoneの画面を垂直に立てて、DPC-100の画面を0度として、右回りに回した数値は、

20130224-06.jpg

本体0゜90゜180゜270゜
X-18001800
Y0-1800180

 Xは0度から増加、180度から減少。Yは90度から増加、270度から減少する。
 これを、本体の回転に対して、0〜360の数値として取得したい場合、0〜179度ではXの数値を、180〜359までは(360-X)の数値を取得。180度以上か以下かは、Yの数値で判別すればいい。

 それを演算式にすると、こうなる。
110 WHILE 1
120 X=ACCEL(0)*90+90
140 Y=CLAMP(ACCEL(1)*180,0,1)
150 AG=(Y^1)*X+Y*(360-X)
160 PRINTF("%d %d %d",X,Y,AG)
170 WEND
 Xに90をかけて90足すと0〜179。Yは180をかけると-180〜180、それにCLAMP()で丸めると、179度までは0、180度以上は1の数値。
 それらを掛け合わせた演算式がAG。

 これで、本体の傾ける角度によって、0〜359の数値を取得できる。

 金庫破りゲームはコンパス機能を使っているので、自分が動くと数値が変わってしまうが、今回の演算式を使ってACCELで取得した方が理想的だと思う。
 といっても、改造するかは不明。

(2013/03/03追記)

 ここでは、角度だったので360分割にしているが、自由な数値にする事も可能。

110 D=100
120 D2=D/2
130 D4=D/4
140 WHILE 1
150 X=ACCEL(0)*D4+D4
160 Y=CLAMP(ACCEL(1)*D2,0,1)
170 Z=(Y^1)*X+Y*(D-X)
180 PRINTF("%d %d %d",X,Y,Z)
190 WEND

 110行目に記載したDの値に基づいて、1回転を自由な数値で分割して表示する。
 だから、Dを360に設定すれば、先のプログラムと全く同じ。



タグ:DPC-100 iPhone

posted by 司隆 at 17:35 | Comment(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。