図1を参照して、本発明の一実施形態に係る移動方向算出装置の一例であるゲーム装置を含むゲームシステム1について説明する。図1は、当該ゲームシステム1の外観図である。以下、据置型のゲーム装置を一例にして、ゲーム装置およびゲームプログラムについて説明する。
図1において、ゲームシステム1は、家庭用テレビジョン受像機等のスピーカを備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作データを与えるコントローラ7によって構成される。また、モニタ2の周辺(図では画面の上側)には、2つのマーカ8aおよび8bが設置される。マーカ8aおよび8bは、具体的には赤外LEDであり、それぞれモニタ2の前方に向かって赤外光を出力する。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される操作データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。なお、他の実施形態においてはコントローラ7とゲーム装置3とは有線で接続されてもよい。また、ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、その内部に備える通信部36(後述)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて操作データを無線送信する。コントローラ7は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ7は、直線方向の加速度を検出する加速度センサ37(後述)を備えている。加速度センサ37によって検出された加速度を示すデータは上記操作データの一部としてゲーム装置3へ送信される。ゲーム装置3は、当該加速度を示すデータに基づいてコントローラ7の動き及び/又は姿勢を算出し、動き等に応じた処理を適宜実行することができる。また、コントローラ7は、当該コントローラ7から見た画像を撮像するための撮像情報演算部35(後述)を備えている。撮像情報演算部35は、モニタ2の周辺に配置された各マーカ8aおよび8bを撮像対象として、各マーカ8aおよび8bの画像を撮像する。ゲーム装置3は、この画像に基づいた演算処理によってコントローラ7の位置および姿勢に応じた処理を実行することができる。
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)10を備える。CPU10は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ13等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU10には、メモリコントローラ11を介して、GPU(Graphics Processing Unit)12、メインメモリ13、DSP(Digital Signal Processor)14、およびARAM(Audio RAM)15が接続される。また、メモリコントローラ11には、所定のバスを介して、コントローラI/F(インターフェース)16、ビデオI/F17、外部メモリI/F18、オーディオI/F19、およびディスクI/F21が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ22、およびディスクドライブ20が接続されている。
GPU12は、CPU10の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU12は、図示しない画像処理専用のメモリやメインメモリ13の一部の記憶領域を用いて画像処理を行う。GPU12は、これらを用いてモニタ2に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ11およびビデオI/F17を介してモニタ2に出力する。
メインメモリ13は、CPU10で使用される記憶領域であって、CPU10の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ13は、CPU10によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ13に記憶されたゲームプログラムや各種データ等がCPU10によって実行される。
DSP14は、ゲームプログラム実行時にCPU10において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM15が接続される。ARAM15は、DSP14が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP14は、ARAM15に記憶されたサウンドデータを読み出し、メモリコントローラ11およびオーディオI/F19を介してモニタ2に備えるスピーカ22に出力させる。
メモリコントローラ11は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F16は、例えば4つのコントローラI/Fで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F16を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの操作データを受信し、コントローラI/F16を介して当該操作データをCPU10へ出力する。なお、他の実施形態においては、ゲーム装置3は、受信ユニット6に代えて、コントローラ7から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した操作データは、所定のバスを介してCPU10に出力される。ビデオI/F17には、モニタ2が接続される。外部メモリI/F18には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F19にはモニタ2に内蔵されるスピーカ22が接続され、DSP14がARAM15から読み出したサウンドデータや、ディスクドライブ20から直接出力されるサウンドデータがスピーカ22から出力される。ディスクI/F21には、ディスクドライブ20が接続される。ディスクドライブ20は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F19に出力する。
次に、図3〜図8を参照して、コントローラ7について説明する。図3〜図4は、コントローラ7の外観構成を示す斜視図である。図3Aは、コントローラ7の上側後方から見た斜視図であり、図3Bは、コントローラ7を下側後方から見た斜視図である。図4は、コントローラ7を前方から見た図である。
図3A〜図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すz軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ7を用いることによって、それに設けられたボタンを押下すること、コントローラ7自体を動かすこと、および、コントローラ7自体の位置や姿勢を変えることによってゲーム操作を行うことができる。例えば、プレイヤは、コントローラ7の傾きを変化させたり、コントローラ7を動かしたりする(例えば、コントローラ7を任意の方向に振る)ことによって、ゲーム空間に登場する操作対象に対する操作を行うことができる。また、例えば、プレイヤは、長手方向を軸としてコントローラ7を回転させたり、コントローラ7によって指し示される画面上の位置を変えたりする操作によって、操作対象に対する操作を行うことができる。ここで、「コントローラ7によって指し示される画面上の位置」とは、理想的には、コントローラ7の前端部から上記長手方向に延ばした直線とモニタ2の画面とが交わる位置であるが、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置3によって算出することができればよい。以下では、コントローラ7によって指し示される画面上の位置を「コントローラ7の指示位置」と呼ぶ。また、コントローラ7(ハウジング31)の長手方向を、「コントローラ7の指示方向」と呼ぶことがある。
ハウジング31には、複数の操作キーが設けられる。ハウジング31の上面には、十字キー32a、Xボタン32b、Yボタン32c、Aボタン32d、セレクトスイッチ32e、メニュースイッチ32f、およびスタートスイッチ32gが設けられる。一方、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作キー(ボタン)は、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないためここでは詳細な説明を省略する。また、ハウジング31の上面には、遠隔からゲーム装置3本体の電源をオン/オフするための電源スイッチ32hが設けられる。
また、コントローラ7は撮像情報演算部35(図5B)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。一方、ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、例えば32ピンのエッジコネクタであり、コントローラ7に他の機器を接続するために利用される。また、ハウジング31上面の後面側には複数のLED34が設けられる。ここで、コントローラ7には、他のコントローラ7と区別するためにコントローラ種別(番号)が付与される。LED34は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7からゲーム装置3へ操作データを送信する際、上記コントローラ種別に応じて複数のLED34のいずれか1つが点灯する。
次に、図5Aおよび図5Bを参照して、コントローラ7の内部構造について説明する。図5Aおよび図5Bは、コントローラ7の内部構造を示す図である。なお、図5Aは、コントローラ7の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bは、コントローラ7の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図5Bに示す斜視図は、図5Aに示す基板300を裏面から見た斜視図となっている。
図5Aにおいて、ハウジング31の内部には基板300が固設されており、当該基板300の上主面上に操作キー32a〜32h、加速度センサ37、LED34、水晶振動子46、無線モジュール44、およびアンテナ45等が設けられる。そして、これらは、基板300等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。また、無線モジュール44およびアンテナ45によって、コントローラ7がワイヤレスコントローラとして機能する。なお、水晶振動子46は、後述するマイコン42の基本クロックを生成する。
一方、図5Bにおいて、基板300の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ7の前方から順に赤外線フィルタ38、レンズ39、撮像素子40(例えばCMOSイメージセンサやCCDイメージセンサ)、および画像処理回路41によって構成されおり、それぞれ基板300の下主面に取り付けられる。また、基板300の下主面上の後端縁にコネクタ33が取り付けられる。そして、撮像情報演算部35の後方であって基板300の下主面上にAボタン32iが取り付けられていて、それよりさらに後方に電池47が収容される。電池47とコネクタ33との間の基板300の下主面上には、バイブレータ48が取り付けられる。このバイブレータ48は、例えば振動モータやソレノイドであってよい。バイブレータ48が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
なお、図3A〜図5Bに示したコントローラ7の形状や、各操作キーの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。例えば、加速度センサをX軸の正負いずれかの方向にずらせばZ軸周りの回転を算出しやすくできたり、バイブレータをコントローラ先端側に配置すればコントローラ全体が揺れやすくできるなどの効果も想定できる。また、コントローラ7における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ7の指示方向」は、光入射面に垂直な方向、すなわち、撮像素子40の撮像方向となる。
図6は、コントローラ7の構成を示すブロック図である。コントローラ7は、操作部32(各操作キー)、撮像情報演算部35、通信部36、および加速度センサ37を備えている。なお、本実施形態において、コントローラ7は、加速度検出手段(加速度センサ37)を備えていればよく、操作部32および撮像情報演算部35を備えていない構成であってもよい。
加速度センサ37は、コントローラ7の加速度(重力加速度を含む)を検出する、すなわち、コントローラ7に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度(直線加速度)をそれぞれ検出する。例えば、3軸または2軸の加速度センサ37は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能である種類のものでもよい。
本実施形態では、加速度センサ37は、コントローラ7を基準とした上下方向(図3Aおよび図3Bに示すy軸方向)、左右方向(図3Aおよび図3Bに示すx軸方向)および前後方向(図3Aおよび図3Bに示すz軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ7を基準に設定されるxyz座標系における3次元のベクトルとして表される。以下では、加速度センサ37によって検出される、複数の軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
図7および図8は、コントローラ7の動きと加速度センサの出力との関係を示す図である。図7は、重力加速度(図7に示すベクトルVA)がコントローラ7を基準とした下方向を向く状態を示している。なお、図7では、コントローラ7は水平で静止した状態にあるものとする。この状態においては、コントローラ7には常に重力(重力加速度)が加わっているので、加速度ベクトルVAは重力加速度のみを示すものとなる。例えば、図7に示す状態においては加速度ベクトルVAはy軸負方向を向く。つまり、加速度センサ37のy軸負方向に1Gの重力加速度が加わり、x軸およびz軸の加速度はほぼ0となる。なお、本実施形態においては、コントローラ7が静止している状態で加速度センサ37によって検出される加速度の大きさ、すなわち、加速度センサ37によって検出される加速度が重力加速度のみを表すときの当該加速度の大きさを、1と表す。例えば、図7に示す状態において検出される加速度ベクトルVAの各成分の値は、(x,y,z)=(0,−1,0)となる。
一方、図8は、コントローラ7を移動させている時の状態を示している。図8は、xz平面に平行であってかつx軸負方向側から正方向側の向きに、コントローラ7の前端部が後端部よりも大きい半径の円弧を描くように、コントローラ7が移動している状態を示している。コントローラ7が図8に示すように移動する場合とは、典型的には、コントローラ7の前面がプレイヤの前方方向に向くようにプレイヤが一方の手でコントローラ7を把持した状態で右から左にプレイヤがコントローラ7を振った(移動させた)場合である。図8に示す状態においては、加速度センサ37には、重力の他に、コントローラ7の移動による慣性力が加えられる。したがって、加速度センサ37は、コントローラ7に加わる重力に起因する加速度VA’と、コントローラ7の移動による慣性力に起因する加速度VA”(x,y軸成分の合成ベクトルとして現れる)とを合成した加速度VAを検出する。詳細は後述するが、このように検出される加速度VAに基づいて、ゲーム装置3はコントローラ7の振り方向を算出する。なお、本明細書において「振り方向」とは、重力方向に対するコントローラ7の移動方向(絶対的な方向)を指し、コントローラ7の向きを基準として表される移動方向(相対的な方向)と区別する。
また、加速度センサ37には、その素子の特性によるが検出可能な加速度の大きさに限界がある。本実施形態では、各軸に関して加速度センサ37で検出可能な範囲の限界値を“±2.2”とする。すなわち、加速度センサ37は、実際の加速度が2.2よりも大きい値となる場合や、実際の加速度が−2.2よりも小さい値となる場合であっても、−2.2〜2.2までの範囲で加速度値を出力する。
加速度センサ37が検出した加速度(加速度ベクトル)を示すデータ(加速度データ)は、通信部36へ出力される。なお、本実施形態では、コントローラ7の通信部36は、逐次(例えば0.5msに1回)に加速度データをゲーム装置3へ出力する。ゲーム装置3は、この加速度データからコントローラ7の振り方向を算出し、当該振り方向に応じたゲーム処理を実行する。なお、加速度センサ37は、各軸に沿った直線成分の加速度を検出するものであるので、ゲーム装置3は、コントローラ7の振り方向を直接検出することはできない。このため、加速度センサ37を搭載したデバイスの振り方向は、加速度センサの各軸毎に検出される加速度に所定の演算処理を施すことによって算出される。
図6の説明に戻り、撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ7の動きでも追跡して解析することができる。
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ7の前方から入射する光から赤外線のみを通過させる。ここで、モニタ2の表示画面近傍に配置されるマーカ8aおよび8bは、モニタ2の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ38を設けることによってマーカ8aおよび8bの画像をより正確に撮像することができる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ39が集光した赤外線を撮像する。したがって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象(マーカ8aおよび8b)の位置を算出する。
撮像画像が入力されると、画像処理回路41は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。ここで、所定条件とは、撮像対象の画像(対象画像)を特定するための条件である。所定条件の具体的な内容は、輝度が所定値以上の領域(高輝度領域)であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を特定するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。
対象画像の位置を算出する際、まず、画像処理回路41は、撮像画像の領域から上記高輝度領域を対象画像の候補として特定する。撮像画像の画像データにおいて対象画像は高輝度領域として現れるからである。次に、画像処理回路41は、特定された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する判定処理を行う。撮像画像には、対象画像である2つのマーカ8aおよび8bの画像の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれている場合がある。この場合、マーカ8aおよび8bの画像以外の画像も高輝度領域として現れてしまう。上記の判定処理は、対象画像であるマーカ8aおよび8bの画像とそれ以外の画像とを区別し、対象画像を正確に特定するための処理である。具体的には、当該判定処理においては、特定された高輝度領域が予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路41は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子40の解像度よりも詳細なスケールで算出することが可能である。例えば、撮像素子40によって撮像された撮像画像の解像度が126×96である場合でも、重心位置を1024×768のスケールで算出することが可能である。このとき、重心位置の座標は、(0,0)から(1024,768)までの整数値で表現される。
以上のようにして、画像処理回路41は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。画像処理回路41は、算出された座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。この座標はコントローラ7自体の向き(姿勢)や位置に対応して変化するので、ゲーム装置3はこの座標値を用いてコントローラ7の向きや位置を算出することができる。なお、本実施形態では、上記座標のデータはゲーム処理に用いられないので、コントローラ7は撮像情報演算部35を備えていない構成であってもよい。
操作部32は、上述した十字キー32a等の各操作キー32a〜32iに相当し、各操作キー32a〜32iに対する入力状態(各操作キー32a〜32iが押下されたか否か)を示すデータを通信部36のマイコン42へ出力する。
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理の際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータを無線送信する無線モジュール44を制御する。
操作部32および撮像情報演算部35および加速度センサ37からマイコン42へ出力されたデータは、一時的にメモリ43に格納される。ここで、通信部36から受信ユニット6への無線送信は所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。マイコン42は、受信ユニット6への送信タイミングが到来すると、メモリ43に格納されているデータを操作データとして無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ7から送信される。微弱電波信号はゲーム装置3側の受信ユニット6で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
上記コントローラ7を用いることによって、プレイヤは、各操作キーを押下する従来の一般的なゲーム操作に加えて、コントローラ7の姿勢を変化させたり、コントローラ7自身の位置を動かしたり、コントローラ7を回転させたりするというゲーム操作を行うことができる。
図9は、コントローラ7を用いてゲーム操作するときの状態を概説する図解図である。ゲームシステム1においてコントローラ7を用いてゲームをプレイする際、プレイヤは、図9に示すように一方の手でコントローラ7を把持する。本実施形態では、プレイヤは、把持したコントローラ7を任意の方向に振る(移動させる)ことによってゲーム操作を行う。
以下、上述したゲームシステム1を用いて行われるゲームの具体例について説明する。図10および図11は、本実施形態においてモニタ2に表示されるゲーム画面の一例を示す図である。図10および図11に示すように、モニタ2には、仮想の3次元ゲーム空間が表示される。ゲーム空間には、丸太を模したオブジェクト51(以下、丸太オブジェクト51と呼ぶ)、および、剣を模したオブジェクト52(以下、剣オブジェクト52と呼ぶ)が配置される。プレイヤは、コントローラ7を用いて剣オブジェクト52を操作し、剣オブジェクト52によって丸太オブジェクト51を切って遊ぶ(図11参照)。
剣オブジェクト52の操作は、コントローラ7を任意の方向に振る動作によって行われる。すなわち、プレイヤは、剣オブジェクト52を操作するためにコントローラ7を任意の方向に振る操作(振り操作)を行う。なお、本ゲームでは、プレイヤは、コントローラ7の長手方向がコントローラ7の振り方向と略垂直になるようにコントローラ7を把持する。また、コントローラ7の持ち方に関して、プレイヤは、コントローラ7の上面が上下左右のどの方向の向きになるように把持してもよい。つまり、コントローラ7はz軸回りの回転方向に関しては任意の姿勢で把持される。
プレイヤがコントローラ7を用いた上記振り操作を行うと、ゲーム装置3はまずコントローラ7の振り方向を算出する。本実施形態では、ゲーム装置3は、コントローラ7を基準としたxyz座標系(図3参照)におけるx軸およびy軸に関して、重力方向に対する振り方向を算出する。詳細は後述するが、本実施形態においては、z軸回りの回転方向に関してコントローラ7がどのような向きで把持されても、重力方向に対するコントローラ7の移動方向(振り方向)を算出することが可能である。なお、他の実施形態では、x軸、y軸およびz軸の3軸に関して、重力方向に対する振り方向を算出するようにしてもよい。
振り方向を算出すると、ゲーム装置3は、画面内の剣オブジェクト52を振り方向に応じた方向に移動させる。例えば、プレイヤが左から右にコントローラ7を振った場合、剣オブジェクト52は画面の左から右に向かって移動する(図11参照)。また、プレイヤが下から上にコントローラ7を振った場合、剣オブジェクト52は画面の下から上に向かって移動する。
剣オブジェクト52を移動させると、ゲーム装置3は、剣オブジェクト52が丸太オブジェクト51と接触したか否かを判断する。そして、剣オブジェクト52が丸太オブジェクト51と接触した場合、図11に示すように、剣オブジェクト52の軌道に沿って丸太オブジェクト51を切断して表示する。このように、剣オブジェクト52はコントローラ7の振り方向に応じて移動するので、プレイヤは、コントローラ7を所望の方向に振ることによって、あたかも剣オブジェクト52を振っているかのような操作感を得ることができる。また、コントローラ7を振ってゲーム操作を行うという今までにないゲーム操作が可能となる。
次に、本実施形態においてゲーム装置3で実行されるプログラム処理について説明する。まず、ゲーム処理において用いられる主なデータについて図12を用いて説明する。図12は、ゲーム装置3のメインメモリ13に記憶される主なデータを示す図である。図12に示すように、メインメモリ13には、ゲームプログラム61、操作データ62、およびゲーム処理用データ63等が記憶される。なお、メインメモリ13には、図12に示すデータの他、ゲームに登場するオブジェクトの画像データ等、ゲーム処理に必要なデータが記憶される。
ゲームプログラム61は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリ13に記憶される。ゲームプログラム61には、後述するゲーム処理の実行に必要なプログラムが含まれている。
操作データ62は、コントローラ7からゲーム装置3へ送信されてきて、メインメモリ13に記憶される。操作データ62には、加速度データ621が含まれる。本実施形態では、加速度データ621は、上記x軸、y軸、およびz軸の3軸に関する加速度値を示す。なお、操作データ62には、加速度データ621の他、撮像画像内における撮像対象(マーカ8aおよび8b)の位置を示すデータや、操作部32の各ボタンに対して行われた操作内容を示すデータが含まれていてもよい。
ゲーム処理用データ63は、後述するゲーム処理において用いられるデータである。ゲーム処理用データ63は、選出加速度データ群631、補助線データ632、第1〜第4制御点データ633〜636、第1〜第3方向ベクトルデータ637〜639、差分ベクトルデータ群640、移動方向データ641、重力方向データ642、振り方向データ643、および操作フラグデータ644を含む。
選出加速度データ群631は、コントローラ7から逐次取得される加速度データのうちから所定の基準に従って選出された加速度データの集合である。所定の基準とは、コントローラ7から逐次取得される加速度データのうちで、移動期間内に取得されたことである。移動期間とは、コントローラ7が移動していると判断される期間である。具体的には、移動期間は、コントローラ7が動き始めたと判断される時点(開始時点)からコントローラ7の動きが終了したと判断される時点(終了時点)までの期間である。詳細は後述するが、移動期間の検出は、加速度センサ37によって検出されるz軸方向の加速度を用いて行われる。なお、選出加速度データ群631に含まれる加速度データは1つのみであることもある。
図13は、選出加速度データ群631の一例を示す図である。図13においては、1つのブロックが1つの加速度データを示しており、加速度データが取得された順番に従って上からブロックを配置している。以下では、選出加速度データ群631に含まれる加速度データのうちで、i番目(iは1以上の整数)に取得された加速度データにより示される加速度ベクトルを「VAi 」と示す。
図13に示すように、選出加速度データ群631としてメインメモリ13に記憶される各加速度データは、上記xyz座標系におけるx軸およびy軸に関する加速度値を各成分とする2次元の加速度ベクトルを示す。つまり、コントローラ7から取得された加速度データが選出加速度データ群631としてメインメモリ13に記憶される場合、加速度データにより示される3軸に関する各加速度値のうちのz軸に関する加速度値は記憶されず、残りのx軸およびy軸に関する加速度値のみを示すデータが記憶される。なお、選出加速度データ群631に含まれる加速度データを2次元の加速度ベクトルを示すデータとする理由は、本実施形態ではx軸およびy軸に関する振り方向を算出することを目的とするため、振り方向の算出処理においてz軸に関する加速度値を用いないからである。つまり、本実施形態では、ゲーム装置3は上記2次元の加速度ベクトルを用いてコントローラ7の振り方向を算出する。
また、加速度センサ37は、検出可能な加速度の値には限界があり、限界を超える加速度に対しては限界値が出力される。したがって、選出加速度データ群631には、加速度データにより示される加速度ベクトルの各成分のうちのいずれかが、加速度センサ37で検出可能な範囲の限界値(=±2.2)をとる加速度データが含まれ得る。以下では、このような加速度データを「限界加速度データ」と呼ぶ。また、選出加速度データ群631のうちで限界加速度データでない加速度データを、「非限界加速度データ」と呼ぶ。図13では、第3番目の加速度ベクトルVA3 から第5番目の加速度ベクトルVA5 までの間、加速度ベクトルのx成分の値が、限界値である“−2.2”となる。したがって、第3番目から第5番目の加速度データが限界加速度データ群631’である。限界加速度データ群631’は、後述するデータ補正処理(ステップS22)によって加速度値が補正される。詳細は後述するが、データ補正処理においては、限界加速度データにより示される2次元加速度ベクトルの各成分のうちの上記限界値をとる成分が補正される。
図12の説明に戻り、補助線データ632は、上記限界加速度データ群631’の補正に用いる補助線を示すデータである。本実施形態では、補助線として3次のベジェ曲線を用いる。ベジェ曲線は、以下に示す、変数pと変数uとの関係式(1)によって定義される。
p=P0×(1−u)3+P1×3u(1−u)2+P2×3u2(1−u)+P3u3 …(1)
上式(1)において、変数pは、上記2次元加速度ベクトルと同様、x軸とy軸とからなるxy座標系における座標値である。変数uは、0≦u≦1の範囲内の値をとるスカラー値である。また、定数P0、P1、P2、およびP3は制御点である。これら4つの制御点の値を決めることでベジェ曲線の形状が決定される。
第1〜第4制御点データ633〜636は、上記ベジェ曲線の4つの制御点の値を示すデータである。すなわち、第1制御点データ633は上記制御点P0を示し、第2制御点データ634は上記制御点P1を示し、第3制御点データ635は上記制御点P2を示し、第4制御点データ636は上記制御点P3を示す。第1〜第4制御点P0〜P3は、上記x軸とy軸とからなるxy座標系における座標値で表現される。
第1〜第3方向ベクトルデータ637〜639は、上記4つの制御点P0〜P3を決定するために用いられる3つのベクトルを示す。すなわち、第1方向ベクトルデータ637は第1方向ベクトルV1を示し、第2方向ベクトルデータ638は第2方向ベクトルV2を示し、第3方向ベクトルデータ639は第3方向ベクトルV3を示す。第1〜第3方向ベクトルは、上記2次元加速度ベクトルと同様、上記xy座標系で表現される。第1〜第3方向ベクトルの算出方法については後述する。
差分ベクトルデータ群640は、選出加速度データ群631に含まれる各加速度データから算出される差分ベクトルデータの集合を示す。差分ベクトルデータは、選出加速度データ群631に含まれる各加速度データについて、加速度データにより示される加速度ベクトルと、その次に取得された加速度データにより示される加速度ベクトルとの差分のベクトルを示す。差分ベクトルデータ群640は、後述する移動方向ベクトルを算出するために用いられる。
移動方向データ641は、コントローラ7の向きを基準として表される当該コントローラ7の移動方向を示す。この移動方向は、上記xy座標系におけるベクトルによって表現される。以下では、この移動方向を表すベクトルを移動方向ベクトルと呼ぶ。移動方向ベクトルは、上記差分ベクトルデータ群640を用いて算出される。
重力方向データ642は、コントローラ7の向きを基準として表される、コントローラ7に加わる重力の方向を示す。重力方向は、上記xy座標系におけるベクトルによって表現される。以下では、重力方向を表すベクトルを重力方向ベクトルと呼ぶ。重力方向ベクトルは、上記選出加速度データ群631を用いて算出される。
振り方向データ643は、重力方向に対してコントローラ7が振られる方向(振り方向)を示す。振り方向は、重力方向を基準とした方向を表すためのXY座標系(図21参照)におけるベクトルによって表現される。以下では、振り方向を表すベクトルを振り方向ベクトルと呼ぶ。振り方向ベクトルは、上記移動方向ベクトルおよび上記重力方向ベクトルを用いて算出される。本実施形態では、直接的にはこの振り方向ベクトルに基づいてゲーム処理が実行される。すなわち、ゲーム装置3は、振り方向ベクトルの向きに応じた方向に剣オブジェクト52をゲーム空間内において移動させる。
操作フラグデータ644は、プレイヤによって振り操作が行われている最中か否かを示す操作フラグのデータである。操作フラグは、振り操作が行われている時はオンに設定され、振り操作が行われていない時はオフに設定される。
次に、ゲーム装置3において行われる処理の詳細を、図14〜図18を用いて説明する。図14は、ゲーム装置3において実行される処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ13等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ13に読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図14に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
まず、ステップS1において、以降の処理において用いられるデータの初期化処理が実行される。すなわち、CPU10は、メインメモリ13のゲーム処理用データ63に含まれる各データ631〜643の内容をクリアする。また、操作フラグデータ644の内容をオフを示すデータに設定する。なお、この時点で仮想の3次元空間に丸太オブジェクト51が配置される。ステップS1の実行後、ステップS2〜S11の処理ループが繰り返されることによって、ゲームが進行していく。
ステップS2において、CPU10は、コントローラ7から操作データを取得する。すなわち、コントローラ7は所定時間間隔(例えば、1フレーム時間間隔以内)で操作データをゲーム装置3へ送信してくるので、CPU10は、送信されてきた操作データをメインメモリ13に記憶する。この操作データには、少なくとも上記加速度データが含まれている。CPU10は、加速度データをメインメモリ13に記憶する。なお、メインメモリ13にすでに加速度データ621が記憶されている場合には、加速度データ621の内容は取得された加速度データの内容となるように更新して記憶される。本実施形態においてステップS2の処理は、ステップS8〜S10の処理中を除いて1フレーム時間毎に実行されるので、ゲーム装置3は、加速度データを逐次取得することができる。
続くステップS3において、CPU10は、コントローラ7を振る操作がプレイヤによって行われている最中か否かを判定する。ステップS3の判定は、メインメモリ13に記憶されている操作フラグデータ644を参照することによって行われる。すなわち、操作フラグがオンに設定されている場合、コントローラ7を振る操作が行われている最中であると判断され、操作フラグがオフに設定されている場合、コントローラ7を振る操作が行われていないと判断される。ステップS3の判定結果が否定である場合、ステップS4の処理が実行される。一方、ステップS3の判定結果が肯定である場合、後述するステップS7の処理が実行される。
ステップS4において、CPU10は、振り操作が開始されたか否かを判定する。ステップS4の判定は、メインメモリ13に記憶されている加速度データ621に基づいて行われる。すなわち、加速度データ621により示されるz軸に関する加速度値が予め定められた第1閾値よりも大きい場合、振り操作が開始されたと判断され、当該z軸に関する加速度値が当該第1閾値以下である場合、振り操作が開始されていないと判断される。
ここで、振り操作が行われている間は、図8に示したように、z軸方向に関してコントローラ7に遠心力が加えられる。そのため、ある程度の速さで振り操作が行われている場合にはz軸に関する加速度値が第1閾値よりも大きくなる。したがって、上記ステップS4に示したように、z軸に関する加速度値を参照し、当該加速度値が所定の値(第1閾値)よりも大きいか否かを判定することによって、振り操作が行われているか否かを容易に判定することができる。
ステップS4の判定結果が肯定である場合、ステップS5およびS6の処理が実行される。一方、ステップS4の判定結果が否定である場合、ステップS5およびS6の処理がスキップされて後述するステップS11の処理が実行される。
ステップS5においては、操作フラグがオンに設定される。すなわち、CPU10は、メインメモリ13に記憶されている操作フラグデータ644の内容をオンを示すデータに書き換える。これによって、ステップS2〜S11のループ処理が次に行われるときにはステップS3の判定結果が肯定となる。
続くステップS6において、CPU10は、ステップS2で取得された加速度データを選出加速度データ群631として保存する。すなわち、選出加速度データ群631に含まれる加速度データに、メインメモリ13に記憶されている加速度データ621が追加される。なお、上述したように、本実施形態では、加速度データ621により示される3軸に関する各加速度値のうちのz軸に関する加速度値は記憶されず、残りのx軸およびy軸に関する加速度値のみを示すデータが記憶される。つまり、図13に示すように、2次元の加速度ベクトルを示すデータが記憶される。ステップS6の後、後述するステップS11の処理が実行される。
一方、ステップS7において、CPU10は、振り操作が終了したか否かを判定する。ステップS7の判定は、メインメモリ13に記憶されている加速度データ621に基づいて行われる。すなわち、加速度データにより示されるz軸に関する加速度値が予め定められた第2閾値以下である場合、振り操作が終了したと判断され、当該z軸に関する加速度値が当該第2閾値よりも大きい場合、振り操作が終了していないと判断される。なお、振り操作が行われていない間は、図7に示したように、z軸方向に関してコントローラ7に遠心力が加えられないので、z軸に関する加速度値が第2閾値以下となる。したがって、上記のようにz軸に関する加速度値を参照し、当該加速度値が所定の値(第2閾値)以下であるか否かを判定することによって、振り操作が行われていないか否かを容易に判定することができる。なお、上記第1閾値および第2閾値は、同じ値であってもよいし、異なる値であってもよい。本実施形態では、例えば、第1閾値および第2閾値をともに“1.1”とする。ステップS7の判定結果が肯定である場合、後述するステップS8〜S10の処理が実行される。一方、ステップS7の判定結果が否定である場合、上述のステップS6の処理が実行される。
図15は、ある期間の間にステップS2で取得された加速度データの推移を示す図である。図15は、当該取得された加速度データにより示される加速度ベクトルを、x座標およびy座標からなる2次元座標系における座標として表している。図15における各点p1〜p19は各加速度ベクトルの終端の位置を示しており、各加速度ベクトルの始端の位置は原点である。例えば、点p1により示される加速度ベクトルは、原点を始端とし、点p1の位置を終端とするベクトルである。図15では、取得された順に点p1から、点p2、点p3、…、点p19までの19個の加速度ベクトルを示している。なお、図15において白丸で示される点は、その加速度ベクトルに対応する加速度データにより示されるz軸に関する加速度値が上記第1閾値(第2閾値)以下となる場合の加速度ベクトルを示す。また、図15において黒丸で示される点は、その加速度ベクトルに対応する加速度データにより示されるz軸に関する加速度値が上記第1閾値(第2閾値)よりも大きい場合の加速度ベクトルを示す。
ゲーム開始直後において振り操作が開始されていない時(コントローラ7が十分な速度で振られていない時を含む)には、白丸の点p1および点p2で示されるような、z軸に関する加速度値が第1閾値以下となる加速度データがステップS2で取得される。このとき、ステップS3およびS4の判定結果がともに否定となるので、加速度データは保存されない。そして、振り操作が開始されてある程度の速度でコントローラ7が振られると、黒丸の点p3で示されるような、z軸に関する加速度値が第1閾値よりも大きい加速度データがステップS2で取得される。このとき、ステップS3の判定結果が否定となるとともにステップS4の判定結果が肯定となる。これによって、ゲーム装置3は、振り操作が開始された時点、すなわち、上記移動期間の開始時点を検出したことになる。そして、振り操作が開始された時点から加速度データの保存が開始される(ステップS6)。図15の例では、点p3に対応する加速度ベクトルがメインメモリ13に記憶される。
振り操作が継続する間は、黒丸の点p4〜点p17のように、z軸に関する加速度値が第1閾値よりも大きい加速度データがステップS2で取得される。このとき、ステップS3の判定結果が肯定となるとともにステップS7の判定結果が否定となるので、加速度データの保存(ステップS6)が継続して行われる。したがって、点p3に続き、点p4〜点p17に対応する加速度ベクトルが順次メインメモリ13に記憶される。
コントローラ7の速度が落ちてきて振り操作が終了すると、白丸の点p18で示されるような、z軸に関する加速度値が第1閾値以下となる加速度データがステップS2で取得される。このとき、ステップS3の判定結果が肯定となるとともにステップS7の判定結果が肯定となる。これによって、ゲーム装置3は、振り操作が終了された時点、すなわち、上記移動期間の終了時点を検出したことになる。そして、振り操作が終了された時点で加速度データの保存が終了され、ステップS8〜S10の処理が実行される。以上のように、移動期間中に取得された加速度データにより示される加速度ベクトルのデータが選出加速度データ群631としてメインメモリ13に記憶されることとなる。図15の例においては、点p3〜点p17に対応する加速度ベクトルのデータがメインメモリ13に記憶される。
ステップS8〜S10の処理は、振り操作が終了した直後に実行される。ステップS8〜S10の処理においては、振り操作によるコントローラ7の振り方向が算出され(ステップS8)、算出された振り方向に基づいたゲーム処理(ステップS9)が実行される。以下、ステップS8〜S10の処理の詳細を説明する。
まず、ステップS8において振り方向算出処理が実行される。振り方向算出処理は、直前に行われた振り操作によるコントローラ7の振り方向を算出するための処理である。以下、図16を参照して振り方向算出処理の詳細について説明する。
図16は、図14に示す振り方向算出処理(ステップS8)の詳細を示すフローチャートである。振り方向算出処理においては、まずステップS21において、CPU10は選出加速度データ群631から限界加速度データを選出する。上述したように、限界加速度データとは、加速度ベクトルの各成分のうちのいずれかが、加速度センサ37で検出可能な範囲の限界値をとる加速度データである。図15の例では、点p5、点p6、点p7、点p13、点p14、および点p15が限界加速度データに対応する。なお、図15に示す点線で囲まれる領域Aは、加速度データが検出可能な範囲(−2.2≦x≦2.2,−2.2≦y≦2.2)を示している。
なお、上記ステップS21においては、連続して取得された複数の限界加速度データの集合が、1つの限界加速度データ群631’として選出される。したがって、選出加速度データ群631のうちで、連続して取得された限界加速度データの集合が2つである場合には、2つの限界加速度データ群631’が別の集合として取り扱われる。図15の例では、点p5、点p6、および点p7に対応する限界加速度データの集合が1つの限界加速度データ群631’として選出されるとともに、点p13、点p14、および点p15に対応する限界加速度データの集合がもう1つの限界加速度データ群631’として選出される。
ステップS22においてデータ補正処理が実行される。データ補正処理は、上記限界加速度データ群631’に含まれる各限界加速度データの値を補正する処理である。以下、図17を参照してデータ補正処理の詳細について説明する。
図17は、図16に示すデータ補正処理(ステップS22)の詳細を示すフローチャートである。データ補正処理においては、まずステップS31において、CPU10は、メインメモリ13に記憶されている限界加速度データ群631’のうちの1つを選択する。上述のように、ステップS21において複数の限界加速度データ群631’が選出されることもあり得るからである。以下に示すステップS32〜S40の処理においては、ステップS31で選択された限界加速度データ群631’を対象として補正が行われる。
続くステップS32において、CPU10は、補助線の制御点を決めるための第3方向ベクトルを算出する。第3方向ベクトルは、例えば図15に示すベクトルV3であり、メインメモリ13に記憶されている選出加速度データ群631に基づいて算出される。具体的には、第3方向ベクトルV3は、次の式(2)に従って算出される。
上式(2)において、ベクトルVA
t は、選出加速度データ群に含まれる第t番目の加速度ベクトルを示す。また、変数kは、選出加速度データ群631に含まれる加速度ベクトルの数を示す。上式(2)から明らかなように、第3方向ベクトルV3は、(a)選出加速度データ群631に含まれる各加速度データについて、加速度データに対応する加速度ベクトル(VA
t )と当該加速度データの次に取得された加速度データに対応する加速度ベクトル(VA
t+1 )との差分ベクトル(VA
t+1 −VA
t )をそれぞれ算出し、(b)各差分ベクトルに対して差分ベクトルの大きさ(|VA
t+1 −VA
t |)に応じた重み付けを行って当該各差分ベクトルの総和を算出することによって算出される。
以上によって算出された第3方向ベクトルV3を示すデータは、第3方向ベクトルデータ639としてメインメモリ13に記憶される。なお、上式(2)においては、選出加速度データ群631に含まれる全ての加速度データを用いて第3方向ベクトルV3を算出したが、他の実施形態においては、選出加速度データ群631のうちの上記非限界加速度データのみを用いて第3方向ベクトルを算出するようにしてもよい。
続くステップS33において、CPU10は、第3方向ベクトルの向きを補正する必要があるか否かを判定する。ステップS33の判定は、第3方向ベクトルと、直前加速度ベクトルと、直後加速度ベクトルとに基づいて行われる。ここで、直前加速度ベクトルとは、非限界加速度データのうちで限界加速度データ(ステップS21で選出されている限界加速度データ群)の直前に取得された加速度データにより示される加速度ベクトルである。また、直後加速度ベクトルとは、非限界加速度データのうちで限界加速度データ(ステップS21で選出されている限界加速度データ群)の直後に取得された加速度データにより示される加速度ベクトルである。例えば図15の例で言えば、点p5〜点p7により示される限界加速度データ群が選出されている場合、点p5の直前に取得された点p4に対応する加速度データが直前加速度データであり、点p7の直後に取得された点p8に対応する加速度データが直後加速度データである。
具体的には、上記ステップS33の判定は、上記直前加速度ベクトルと直後加速度ベクトルとを加算したベクトルと、第3方向ベクトルとの内積を計算することによって行われる。すなわち、内積値が負になる場合、第3方向ベクトルの向きを補正する必要があると判断され、内積値が負にならない場合、第3方向ベクトルの向きを補正する必要がないと判断される。ステップS33の判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS33の判定結果が否定である場合、ステップS34の処理がスキップされてステップS35の処理が実行される。
ステップS34においては、ステップS32で算出された第3方向ベクトルが補正される。具体的には、CPU10は、当該第3方向ベクトルの向きが逆向きになるように第3方向ベクトルを補正する。このとき、メインメモリ13に記憶されている第3方向ベクトルデータ639の内容は、補正後の内容を示すデータに書き換えられる。ステップS34の後、ステップS35の処理が実行される。
ステップS35において、CPU10は、補助線の制御点を決めるための第1方向ベクトルV1を算出する。本実施形態では、第1方向ベクトルは、上記直前加速度データと、当該直前加速度データより1つ前に取得された非限界加速度データとに基づいて算出される。なお、これらの加速度データは、メインメモリ13に記憶されている選出加速度データ群631に含まれている。具体的には、第1方向ベクトルV1は、次の式(3)に従って算出される。
V1=VAN −VAN-1 …(3)
上式(3)において、ベクトルVAN は直前加速度データにより示される加速度ベクトルであり、ベクトルVAN-1 は直前加速度データの1つ前に取得された非限界加速度データにより示される加速度ベクトルである。上式(3)のように、第1方向ベクトルは、直前加速度データにより示される加速度ベクトルから、当該直前加速度データの1つ前に取得された非限界加速度データにより示される加速度ベクトルを減算したベクトルとして算出される。したがって、図15の例においては、第1方向ベクトルV1は、点p3を始点とし、点p4を終点とするベクトルとなる。以上のように算出された第1方向ベクトルを示すデータは、第1方向ベクトルデータ637としてメインメモリ13に記憶される。
なお、他の実施形態においては、第1方向ベクトルV1は、直前加速度データと、当該直前加速度データより前に取得された1以上の加速度データとに基づいて算出されてもよい。例えば、第1方向ベクトルV1は、直前加速度データと、当該直前加速度データより1つ前および2つ前に取得された加速度データとに基づいて算出されてもよい。このとき、CPU10は、これら3つの加速度データに対応する3つの加速度ベクトルの終点に関する近似直線を算出し、当該近似直線の傾きを示すベクトルを第1方向ベクトルとする。
ステップS36において、CPU10は、補助線の制御点を決めるための第2方向ベクトルV2を算出する。本実施形態では、第2方向ベクトルは、上記直後加速度データと、当該直後加速度データより1つ後に取得された非限界加速度データとに基づいて算出される。なお、これらの加速度データは、メインメモリ13に記憶されている選出加速度データ群631に含まれている。具体的には、第2方向ベクトルV2は、次の式(4)に従って算出される。
V2=VAQ −VAQ+1 …(4)
上式(4)において、ベクトルVAQ は直後加速度データにより示される加速度ベクトルであり、ベクトルVAQ+1 は直後加速度データの1つ後に取得された非限界加速度データにより示される加速度ベクトルである。上式(4)のように、第2方向ベクトルは、直後加速度データにより示される加速度ベクトルから、当該直後加速度データの1つ後に取得された非限界加速度データにより示される加速度ベクトルを減算したベクトルとして算出される。したがって、図15の例においては、第2方向ベクトルV2は、点p9を始点とし、点p8を終点とするベクトルとなる。以上のように算出された第2方向ベクトルを示すデータは、第2方向ベクトルデータ638としてメインメモリ13に記憶される。なお、他の実施形態においては、第2方向ベクトルV2は、第1方向ベクトルと同様、直後加速度データと、当該直後加速度データより後に取得された1以上の加速度データとに基づいて算出されてもよい。
ステップS37において、CPU10は、補助線の制御点を決めるための突出量nを算出する。突出量nは、メインメモリ13に記憶されている選出加速度データ群631に含まれる限界加速度データ群631’に基づいて算出される。具体的には、突出量nは、ステップS31で選出された限界加速度データ群631’に含まれる限界加速度データの数に設定される。なお、詳細は後述するが、突出量nは、補助線の形状に影響を与える。具体的には、突出量nの値が大きくなるほど、補助線が突出する度合いが大きくなる。
続くステップS38において、CPU10は、補助線の各制御点P0〜P3を決定する。図18は、決定される各制御点および補助線の一例を示す図である。図18においては、xy座標系の領域のうち、図15に示す点p3〜点p9が含まれる領域を特に示している。図18に示すように、ベジェ曲線の4つの制御点のうち、一方の端点である第1制御点P0は、上記直前加速度データにより示される加速度ベクトルを表す点p4の位置に決定される。決定された第1制御点P0を示すデータは、第1制御点データ633としてメインメモリ13に記憶される。また、他方の端点である第4制御点P3は、上記直後加速度により示される加速度ベクトルを表す点p8の位置に決定される。決定された第4制御点P3を示すデータは、第4制御点データ636としてメインメモリ13に記憶される。
また、ベジェ曲線の4つの制御点のうち、一方の方向点である第2制御点P1は、第1方向ベクトルV1、第3方向ベクトルV3、突出量n、および第1制御点P0に基づいて決定される。具体的には、CPU10は、次の式(5)に従って第2制御点P1の位置を算出する。
P1=P0+(V1+V3×K0)×n×K1 …(5)
上式(5)において、定数K0および定数K1は、適宜の値に予め定められるスカラー値である。算出された第2制御点P1を示すデータは、第2制御点データ634としてメインメモリ13に記憶される。図18に示すように、第2制御点P1は、図18のベクトルV4の方向に、ベクトルV4の長さだけ第1制御点P0の位置を移動させた位置となる。なお、ベクトルV4は、第1方向ベクトルV1および第3方向ベクトルV3を成分とし、突出量nに応じた長さとなるベクトルである。
また、ベジェ曲線の4つの制御点のうち、他方の方向点である第3制御点P2は、第2方向ベクトルV2、第3方向ベクトルV3、突出量n、および第4制御点P3に基づいて決定される。具体的には、CPU10は、次の式(6)に従って第3制御点P2の位置を算出する。
P2=P3+(V2+V3×K0)×n×K1 …(6)
上式(6)によって算出された第3制御点P2を示すデータは、第3制御点データ635としてメインメモリ13に記憶される。図18に示すように、第3制御点P2は、図18のベクトルV5の方向に、ベクトルV5の長さだけ第4制御点P3の位置を移動させた位置となる。なお、ベクトルV5は、第2方向ベクトルV2および第3方向ベクトルV3を成分とし、突出量nに応じた長さとなるベクトルである。以上によって、補助線であるベジェ曲線を決定するための各制御点P0〜P3が決定される。
なお、他の実施形態においては、図18に示すベクトルV4は、第1方向ベクトルV1および第3方向ベクトルV3のいずれか一方のみに基づいて算出されてもよい。また、図18に示すベクトルV5は、第2方向ベクトルV2および第3方向ベクトルV3のいずれか一方のみに基づいて算出されてもよい。
続くステップS39において、CPU10は、メインメモリ13に記憶されている各制御点データ633〜636に基づいて補助線を決定する。具体的には、上式(1)に各制御点P0〜P3の値を代入することによって、補助線であるベジェ曲線を表す関数が決定される。決定された関数を示すデータは、補助線データ632としてメインメモリ13に記憶される。
図18に示す例においては、各制御点P0〜P3によって決定される補助線は曲線Lのようになる。具体的には、制御点P0における補助線Lの傾きは、制御点P0と制御点P1とを結ぶ線分の傾きとなり、制御点P3における補助線Lの傾きは、制御点P3と制御点P2とを結ぶ線分の傾きとなる。また、制御点P0から制御点P1までの距離が長いほど、補助線Lの長さは長くなり、加速度センサ37が検出可能な範囲を示す領域Aから最も離れた補助線L上の点Bから当該領域Aまでの距離が大きくなる。同様に、制御点P3から制御点P2までの距離が長いほど、補助線Lの長さは長くなり、上記点Bから領域Aまでの距離が大きくなる。
続くステップS40において、CPU10は、メインメモリ13に記憶されている補助線データ632に基づいて、限界加速度データ群631’の値を補正する。限界加速度データの値は、補助線上の値となるように補正される。すなわち、CPU10は、限界加速度データにより示される加速度ベクトルのxy座標値を、補助線上の座標値となるように補正する。本実施形態では、各限界加速度データの補正後の座標値は、各限界加速度データに対応する各座標位置によって補助線が等分されるように決定される。図18を例にとって説明すると、限界加速度データに対応する点p5〜p7の補正後の点p5’〜p7’は、各点によって補助線Lを4等分する位置に決定される。具体的には、上式(1)において、変数u=0.25としたときの変数pにより示される位置を点p5’の位置とし、変数u=0.5としたときの変数pにより示される位置を点p6’の位置とし、上式(1)において変数u=0.75としたときの変数pにより示される位置を点p7’の位置とする。なお、補正後の座標は補助線L上に設定されればよく、補助線Lは、領域A内の制御点P0から領域A外を通って領域A内の制御点P3までを結ぶ曲線であるので、補正後の点p5’〜p7’は領域A内の位置となり得る。ステップS40において、メインメモリ13に記憶されている限界加速度データ群631’の内容は、補正後の内容に書き換えられる。
なお、図18に示した補正方法によれば、各限界加速度データの補正後の各座標値を補助線上にバランス良く配置することができる。加速度データが限界値をとっている間における実際の加速度の間隔がほぼ一定であると想定できる場合には、図18に示す補正方法が有効である。なお、補助線に従って行われる限界加速度データの補正方法は、上記補正方法に限らず、限界加速度データのxy座標値を、補助線上の座標値となるように補正するものであればどのようなものであってもよい。図19は、限界加速度データの補正方法の他の一例を示す図である。図19に示す方法では、限界加速度データのx座標値のみが補正され、y座標値については補正が行われない。このように、他の実施形態においては、限界加速度データの各成分のうちで限界値をとっている成分(図19では、x成分)についてのみ加速度値を補正するようにしてもよい。限界値をとっている成分以外の他の成分の加速度値が信頼できるものであると想定できる場合には、図19に示す方法が有効である。
ステップS41において、CPU10は、全ての限界加速度データを補正したか否かを判定する。ステップS31で選出されていない限界加速度データが残っている場合、補正していない限界加速度データがあると判断され、補正していない限界加速度データに関して、ステップS31の処理が再度実行される。一方、ステップS31で全ての限界加速度データが選出されている場合、全ての限界加速度データを補正したと判断され、CPU10は、図17に示すデータ補正処理を終了する。
以上に説明したデータ補正処理においては、補助線Lが算出され、加速度データにより示されるxy座標が補助線L上の位置となるように加速度データの値が補正される。つまり、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移は、補助線Lによって推定される。これによって、上記移動期間全体における加速度の推移をより正確に知ることができ、選出加速度データ群631の値をより正確なものに補正することができる。
また、上記実施形態においては、補助線(ベジェ曲線)Lの第1制御点P0における傾き(図18に示すベクトルV4)は、第1方向ベクトルV1および第3方向ベクトルV3に基づいて算出される(上式(5)参照)。補助線(ベジェ曲線)Lの第4制御点P3における傾き(図18に示すベクトルV5)は、第2方向ベクトルV2および第3方向ベクトルV3に基づいて算出される(上式(6)参照)。ここで、上記ステップS35からわかるように、第1方向ベクトルV1は、加速度データが限界値をとる直前における加速度データの値の推移を示している。第2方向ベクトルV2は、加速度データが限界値をとる直後における加速度データの値の推移を示している。したがって、第1および第2方向ベクトルV1およびV2を反映して補助線Lの端点における傾きを決定することによって、限界値をとる前後における加速度データの値の推移を示す曲線と、補助線Lとをスムーズに(傾きの変化が連続するように)接続することができる。これによって、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移を、より実際の推移に近くなるように正確に推定することができる。
また、図15に示すように、第3方向ベクトルV3は、移動期間全体における加速度の推移を示している。したがって、第3方向ベクトルV3を反映して補助線Lの端点における傾きを決定することによって、移動期間中における加速度の全体的な推移傾向を反映するように当該傾きを決定することができる。これによって、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移を、より実際に近くなるように正確に推定することができる。例えば、第1および第2方向ベクトルV1およびV2のみに基づいて補助線Lの傾きを決定する方法においては、上記直前加速度データまたは直後加速度データの値が何らかの理由で不正確な値や不規則な値の場合、補助線Lを正確に推定することができなくなるおそれがある。これに対して、さらに第3方向ベクトルV3に基づいて補助線Lの傾きを決定することによって、加速度データのうちのいくつかが不正確な値や不規則な値を示す場合でも補助線Lを正確に推定することができる。
さらに、上記実施形態においては、限界加速度データの数に応じて突出量nを算出し(ステップS37)、第2および第3制御点を突出量nに基づいて決定する(上式(5)および上式(6))。上式(5)および上式(6)より、第2および第3制御点の位置は、突出量nの値が大きいほど、限界値の範囲を示す領域Aから遠ざかる。つまり、領域Aから最も離れた補助線L上の点Bから当該領域Aまでの距離は、突出量nの値が大きいほど大きくなる。ここで、突出量nの値が大きいことは、限界加速度データの数が多いことを意味し、限界値の範囲を超えたために実際の値を検出できなかった期間が長いことを意味する。当該期間中における実際の加速度の値は、当該期間の長さに応じて大きくなると考えられる。したがって、補助線Lの点Bから領域Aまでの距離を突出量nに応じて長くすることによって、加速度の実際の推移により近い補助線を算出することができる。
図16の説明に戻り、ステップS22の次に、ステップS23およびS24において、補正後の選出加速度データ群631から移動方向ベクトルVmが算出される。移動方向ベクトルVmを算出する処理は、上記ステップS32の処理と同様の演算である。つまり、CPU10は、上式(2)に基づいてxy座標系における2次元ベクトルを算出する。ステップS22が上記ステップS32と異なる点は、それに含まれる限界加速度データ群631’が補正された選出加速度データ群631を用いて上式(2)の計算が行われる点である。補正後の選出加速度データ群631を用いることによって、移動方向ベクトルVmを正確に算出することができる。
具体的には、まずステップS23において、補正後の選出加速度データ群631から差分ベクトル群が算出される。CPU10は、選出加速度データ群631に含まれる各加速度データについて、加速度データにより示される加速度ベクトルと、その次に取得された加速度データにより示される加速度ベクトルとの差分(差分ベクトル)を加速度データ毎に算出する。なお、上式(2)の“(VAt+1 −VAt )”がこの差分ベクトルに相当する。ステップS23で算出された各差分ベクトルを示すデータは、差分ベクトルデータ群640としてメインメモリ13に記憶される。次に、ステップS24において、CPU10は、メインメモリ13に記憶されている差分ベクトルデータ群640に基づいて、移動方向ベクトルを算出する。すなわち、各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和が算出される。なお、上式(2)の“|VAt+1 −VAt |”が各差分ベクトルに付される重みに相当する。また、上式(2)で算出された移動方向ベクトルVmは正規化される。すなわち、長さが“1”に補正される。以上の処理によって算出された移動方向ベクトルVmを示すデータは、移動方向データ641としてメインメモリ13に記憶される。
次に、ステップS25において、補正後の選出加速度データ群631に基づいて重力方向ベクトルVgが算出される。具体的には、CPU10は、次の式(7)に従って重力方向ベクトルVgを算出する。
上式(7)に示すように、重力方向ベクトルVgは、選出加速度データ群631に含まれる加速度ベクトルVAの総和として算出される。また、上式(7)で算出された重力方向ベクトルVgは正規化される、すなわち、長さが“1”に補正される。以上の処理によって算出された重力方向ベクトルVgを示すデータは、重力方向データ642としてメインメモリ13に記憶される。以上のように算出された重力方向ベクトルVgは、xy座標系における原点を基準点としたとき、選出加速度データ群631に含まれる各加速度ベクトルの、基準点に対する偏りを示している。本実施形態では、この偏りを算出することによって重力方向を算出している。なお、上記偏りは、加速度ベクトルVAの総和を算出する方法に代えて他の方法によって算出されてもよい。
続くステップS26において、CPU10は、メインメモリ13に記憶されている移動方向データ641および重力方向データ642に基づいて、振り方向ベクトルを算出する。上述したように、振り方向ベクトルとは、重力方向に対してコントローラ7が移動する方向を示すベクトルである。具体的には、CPU10は、重力方向ベクトルVgが予め定められた基準方向を向くように、移動方向ベクトルVmおよび重力方向ベクトルVgに対して共に回転処理を行う。そして、回転させた移動方向ベクトルVmを振り方向ベクトルVsとする。なお、振り方向ベクトルVsは、重力方向を基準とした方向を表すためのXY座標系で表現されるのに対して、移動方向ベクトルVmおよび重力方向ベクトルVgは、コントローラ7の向きを基準としたxy座標系で表現される。したがって、上記回転処理はxy座標系からXY座標系への座標変換として行われる。具体的には、CPU10は、次の式(8)に従って振り方向ベクトルVs=(SX,SY)を算出する。
SX=−gy×mx+gx×my
SY=−gx×mx−gy×my …(8)
上式(8)においては、移動方向ベクトルVmを(mx、my)とし、重力方向ベクトルVgを(gx、gy)とする。なお、本実施形態では、XY座標系は、コントローラ7の上面が鉛直上向きとなる時の重力方向をY軸負方向とする直交座標系である。したがって、XY座標系における上記基準方向は、Y軸負方向の向きである。
図20は、xy座標系における移動方向ベクトルVmおよび重力方向ベクトルVgを示す図である。また、図21は、XY座標系における振り方向ベクトルを示す図である。例えば、図20に示す移動方向ベクトルVmおよび重力方向ベクトルVgが算出された場合、CPU10は、重力方向ベクトルVgがY軸負方向の向きとなるように、移動方向ベクトルVmおよび重力方向ベクトルVgを共に回転させる座標変換を行う。図21に示すように、回転させられた後(座標変換後)の移動方向ベクトルVmが振り方向ベクトルVsとなる。
以上のようにして得られた振り方向ベクトルVsを示すデータは、振り方向データ643としてメインメモリ13に記憶される。ステップS26の後、CPU10は振り方向算出処理を終了する。なお、本実施形態では振り方向をベクトルを用いて表現したが、他の実施形態では振り方向を角度で表現してもよい。例えば、振り方向は、移動方向ベクトルVmと重力方向ベクトルVgとのなす角の大きさとして表されてもよい。
図15の説明に戻り、ステップS8の次にステップS9の処理が実行される。すなわち、ステップS9において、CPU10は、ステップS8で算出された振り方向に応じたゲーム処理を実行する。具体的には、振り方向に応じた方向に剣オブジェクト52が移動するアニメーションをモニタ2に表示させる(図11参照)。また、CPU10は、ゲーム空間内において剣オブジェクト52を移動させた結果、剣オブジェクト52が丸太オブジェクト51と接触したか否かを判断する。そして、剣オブジェクト52が丸太オブジェクト51と接触した場合、剣オブジェクト52の軌道に沿って丸太オブジェクト51が切断された様子を表示する(図11参照)。また、図15に示すフローチャートには示していないが、丸太オブジェクト51が切断された場合には、切断された丸太オブジェクト51が所定時間表示された後、新たな丸太オブジェクト51が表示されるようにしてもよい。また、丸太オブジェクト51をゲーム空間内において移動させるようにしてもよい。
続くステップS10において、操作フラグがオフに設定される。すなわち、CPU10は、メインメモリ13に記憶されている操作フラグデータ644の内容をオフを示すデータに書き換える。これによって、ステップS2〜S11のループ処理が次に行われるときにはステップS3の判定結果が否定となる。なお、ステップS9においては、メインメモリ13に記憶されている各データ631〜643の内容がクリアされる。
続くステップS11において、CPU10はゲームを終了するか否かを判定する。ステップS11の判定は、例えば、プレイヤがゲームを終了する指示を行ったか否かや、プレイヤがゲームをクリアしたか否かや、ゲームに制限時間が設けられている場合には当該制限時間が経過したか否かによって行われる。ステップS11の判定結果が否定である場合、ステップS2の処理が再度実行され、以降、ゲームを終了すると判定されるまでステップS2〜S11の処理ループが実行される。一方、ステップS11の判定結果が肯定である場合、CPU10は図14に示す処理を終了する。以上で、ゲーム装置3における処理の説明を終了する。
以上のように、本実施形態によれば、コントローラ7から加速度データを取得し(ステップS12)、取得した加速度データから、移動方向ベクトルVmおよび重力方向ベクトルVgという2種類のベクトルが算出される(ステップS23〜S25)。このように、本実施形態では、センサによって検出された1種類の情報から、コントローラ7の状態を示す2種類の情報を得ることができる。そして、ゲーム装置3は、これら2種類の情報をゲーム操作に反映してゲーム処理を行う(ステップS9)。これによって、センサが1つという簡易な構成でありながら、コントローラ7の2種類の状態に基づいた複雑なゲーム操作をプレイヤに行わせることが可能となる。
また、本実施形態によれば、加速度データの値が限界値となる場合には、上記補助線を用いて限界加速度データ群の値が補正される(ステップS22)。つまり、ゲーム装置3は、加速度センサ37が実際の加速度値を検出できない場合には、補助線を用いて実際の加速度値を推定する。これによって、実際の加速度値が限界値を超える場合であっても、実際の加速度値を正確に算出することができる。ひいては、算出した加速度値を用いてコントローラ7の状態(例えば、振り方向)を算出する場合に、コントローラ7の状態をより正確に算出することができる。
また、上記実施形態においては、ゲーム装置3は、移動期間中に検出される各加速度ベクトルの総和を算出することによって重力方向を算出する(ステップS25)。ここで、移動期間中に検出される加速度ベクトルには、コントローラ7に加わる重力に起因する成分に加えて、コントローラ7の移動に起因する成分が含まれるので、移動期間中においては、検出される加速度そのものでは重力方向を正確に認識することができない。これに対して、本実施形態では、移動期間中に検出される各加速度ベクトルの総和を算出するので、各加速度ベクトルにおけるコントローラ7の移動に起因する成分を相殺し、常に検出されている、重力に起因する成分のみを抽出することができる。これは、特にゲームの場合にはプレイヤの1つの動作がどの様な動作であるかを認識することが重要であることからその動作の開始と終了があることに着目したものである。したがって、ステップS25の処理によって、コントローラ7の移動を伴うプレイヤの1つの動作における当該コントローラに対する重力方向を認識することができる。
また、上記実施形態においては、ゲーム装置3は、選出加速度データ群631の値の推移を示す差分ベクトルに基づいて移動方向ベクトルを算出する。具体的には、ゲーム装置3は、選出加速度データ群631について差分ベクトルを算出し、差分ベクトルに所定の重みを付けて総和を算出することによって、移動方向ベクトルを算出する(ステップS23およびS24)。所定の重みは、差分ベクトルの大きさに応じた値に設定される(上式(2))。差分ベクトルが大きい部分は、素早い振りが行われているということであって、振りの動きの特徴的な部分であるので、選出加速度データ群631から算出される各差分ベクトルのうちで大きさが大きい差分ベクトルを特徴的な部分として高く評価することによって、コントローラ7の移動方向を算出することができる。
なお、移動方向を算出する方法としては、(重みを付けずに)単に差分ベクトルの総和を算出する方法も考えられる。この方法では、差分ベクトルの総和は、上記移動期間の開始時点における加速度ベクトルのxy座標値を始点とし、終了時点における加速度ベクトルのxy座標値を終点とするベクトルとなる。図15に示す例で言えば、差分ベクトルの総和は、点p0を始点とし、点p19を終点とするベクトルとなる。上記移動期間の開始時点および終了時点の検出の仕方によっては、上記方法によってもコントローラ7の移動方向を算出することが可能である。
なお、上記方法では、移動方向を正確に認識できないおそれがある点に留意する。例えば、上記移動期間の開始時点における加速度ベクトルと終了時点における加速度ベクトルとがほぼ同じ値となる場合には、移動方向を正確に認識できないおそれがある。開始時点における加速度ベクトルと終了時点における加速度ベクトルとが同じ値になれば、差分ベクトルの総和は「0」になるからである。図15に示した例では、開始時点における加速度ベクトル(点p1)と終了時点における加速度ベクトル(点p19)とが大きく離れている。しかし、第1および第2閾値の設定の仕方によっては、開始時点における加速度ベクトルと終了時点における加速度ベクトルとがほぼ同じ値となることがある。2つの加速度ベクトルがほぼ同じ値になれば、差分ベクトルの総和を示すベクトルの方向は、必ずしも移動方向に応じた方向とはならない。
そこで、上記実施形態では、差分ベクトルに所定の重みを付けて総和を算出している。これによって、仮に上記2つのベクトルが同じ値になっても、総和を示すベクトルは「0」にはならず、各差分ベクトルのうち、特徴的な部分である大きさが大きい差分ベクトルの成分が大きく反映されるように当該総和によって表される。すなわち、当該総和を示すベクトルはコントローラ7の移動方向を表すものとなる。以上より、上記ステップS25においては、重みを付けずに単に差分ベクトルの総和を算出するようにしてもよいが、上記重みを付けて総和を算出することが好ましい。
(補助線に関する変形例)
なお、上記実施形態では、加速度データを補正するための補助線として、ベジェ曲線を用いることとした。ここで、他の実施形態においては、補助線はベジェ曲線に限らず、加速度データが限界値をとる間における実際の加速度値を推測するものであればよい。すなわち、補助線は、加速度センサ37の検出範囲外を通る線であればよい。なお、補助線は、その全てが当該検出範囲外を通る必要はなく、その少なくとも一部が当該検出範囲外を通るものであればよい。
例えば、上記補助線として、ベジェ曲線に代えて、カージナルスプライン曲線やBスプライン曲線を用いてもよい。これらの曲線は、1以上の制御点を含む関数によって表される。このような関数によって表される曲線を用いる場合、制御点を決めることによって複雑な曲線の形状を決定することができるので、複雑な曲線によって加速度の推定を詳細に行うことができるとともに、曲線を容易に算出することができる。
また、上記補助線は、曲線に限らず、複数の線分からなる折れ線によって構成されてもよい。図22は、補助線の他の例を示す図である。図22においては、補助線L’は、線分L1および線分L2によって構成される。線分L1は、上記直前加速度データの点p4と当該直前加速度データの1つ前に取得された加速度データの点p3とを結ぶ線分を点p4の外側へ延ばした線分である。線分L2は、上記直後加速度データの点p8と当該直後加速度データの1つ後に取得された加速度データの点p9とを結ぶ線分を点p8の外側へ延ばした線分である。上記補助線L’を用いる場合には、上記のような制御点によって決められる曲線を用いる場合に比べて、補助線を算出する処理を簡易化することができる。なお、上記線分L1の傾きは、上記第1方向ベクトルV1によって決められても良いし、上記線分L2の傾きは、上記第2方向ベクトルV2によって決められても良い。
(加速度データの次数に関する変形例)
上記実施形態においては、2次元の加速度ベクトルを用いる場合を例として詳細な処理を説明したが、他の実施形態においては、加速度データにより示される加速度は3次元の加速度値であってもよいし、1次元の加速度値に対しても適用可能である。3次元の加速度ベクトルを用いる場合には、上記2次元のxy座標系の場合に準じて、3次元のxyz座標系において補助線を算出することができる。
また、1次元の加速度値を用いる場合には、加速度データにより示される加速度値と時間とを各軸とする2次元座標を用いることにより、上記2次元のxy座標系の場合と同様にして補助線を算出することができる。図23は、1次元の加速度値を用いる場合における座標系を示す図である。図23に示す座標系は、横軸が時間(t)を表し、縦軸が加速度値(s)を表す。点q1〜点q9は、加速度センサによって検出される加速度を示している。図23に示す点線Cは、加速度センサの検出可能な範囲の限界値を示している。
図23においては、点q3〜点q7が限界値を示している。このとき、ゲーム装置3は、上記実施形態と同様の方法で補助線Lを算出し、補助線L上の値となるように点q3〜点q7の加速度値を補正する。なお、上記実施形態における変数xを変数tに置き換え、変数yを変数sに置き換えれば、上記実施形態と同様の方法で補助線Lを算出することができる。なお、図23に示す点q3’〜点q7’は、補正後の加速度値を示している。以上のように補正した加速度データ群を用いてコントローラ7の状態を算出することによって、補正前の加速度データ群を用いてコントローラ7の状態を算出する場合に比べて、正確に算出を行うことができ、1軸に関する加速度に関しても、加速度の推移をより正確に算出することができる。