(57)【要約】【課題】入力装置の移動方向を正確に算出する。【解決手段】移動方向算出装置は、入力装置に搭載される多軸加速度センサから出力される加速度データを逐次取得する。次に、取得される加速度データに基づいて、入力装置が動き始めてから動きが終了するまでの期間を移動期間として検出する。次に、移動期間内に取得される複数の加速度データ毎に、加速度データに対応する加速度ベクトルと当該加速度データの次に取得された加速度データに対応する加速度ベクトルとの差分ベクトルを算出する。次に、移動期間内に取得される各加速度データについて算出された各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和を算出し、当該総和が示すベクトルの方向を移動方向とする。【選択図】図１６
2007295990.tif 000002
【特許請求の範囲】
【請求項１】
入力装置の移動方向を算出する移動方向算出装置であって、
前記入力装置に搭載される多軸加速度センサから出力される加速度データを逐次取得する取得手段と、
取得される前記加速度データに基づいて、前記入力装置が動き始めてから動きが終了するまでの期間を移動期間として検出する期間検出手段と、
前記加速度データにより示される各軸に関する加速度値のうちの複数の軸に関する加速度値を各成分とするベクトルを加速度ベクトルとするとき、前記移動期間内に取得される複数の加速度データ毎に、加速度データに対応する加速度ベクトルと当該加速度データの次に取得された加速度データに対応する加速度ベクトルとの差分ベクトルを算出する差分算出手段と、
前記移動期間内に取得される各加速度データについて算出された各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和を算出し、当該総和が示すベクトルによって決められる方向を前記移動方向とする移動方向算出手段と、を備える、移動方向算出装置。
【請求項２】
前記期間検出手段は、
前記取得される加速度データにより示される各軸に関する加速度値のうちの所定の１軸に関する加速度値が第１閾値を上回った時点を前記移動期間の開始時点に設定する開始設定手段と、
前記取得される加速度データにより示される各軸に関する加速度値のうちの所定の１軸に関する加速度値が第２閾値を下回った時点を前記移動期間の終了時点に設定する終了設定手段とを含む、請求項１に記載の移動方向算出装置。
【請求項３】
前記多軸加速度センサは３軸加速度センサであって、
前記差分算出手段は、前記加速度データにより示される各軸に関する加速度値のうちの、前記所定の１軸以外の２軸に関する加速度値を各成分とするベクトルを前記加速度ベクトルとして用いる、請求項２に記載の移動方向算出装置。
【請求項４】
前記移動期間内に取得される複数の加速度データに対応する各加速度ベクトルの総和を示すベクトルを、前記入力装置に加わる重力方向として算出する重力方向算出手段と、
前記移動方向と前記重力方向とに基づいて所定のゲーム処理を実行するゲーム処理手段と、をさらに備える請求項１に記載の移動方向算出装置。
【請求項５】
入力装置の移動方向を算出する移動方向算出装置のコンピュータに実行させる移動方向算出プログラムであって、
前記入力装置に搭載される多軸加速度センサから出力される加速度データを逐次取得する取得ステップと、
取得される前記加速度データに基づいて、前記入力装置が動き始めてから動きが終了するまでの期間を移動期間として検出する期間検出ステップと、
前記加速度データにより示される各軸に関する加速度値のうちの複数の軸に関する加速度値を各成分とするベクトルを加速度ベクトルとするとき、前記移動期間内に取得される複数の加速度データ毎に、加速度データに対応する加速度ベクトルと当該加速度データの次に取得された加速度データに対応する加速度ベクトルとの差分ベクトルを算出する差分算出ステップと、
前記移動期間内に取得される各加速度データについて算出された各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和を算出し、当該総和が示すベクトルによって決められる方向を前記移動方向とする移動方向算出ステップと、を前記コンピュータに実行させる、移動方向算出プログラム。
【請求項６】
前記期間検出ステップは、
前記取得される加速度データにより示される各軸に関する加速度値のうちの所定の１軸に関する加速度値が第１閾値を上回った時点を前記移動期間の開始時点に設定する開始設定ステップと、
前記取得される加速度データにより示される各軸に関する加速度値のうちの所定の１軸に関する加速度値が第２閾値を下回った時点を前記移動期間の終了時点に設定する終了設定ステップとを含む、請求項５に記載の移動方向算出プログラム。
【請求項７】
前記多軸加速度センサは３軸加速度センサであって、
前記差分算出ステップにおいて、前記コンピュータは、前記加速度データにより示される各軸に関する加速度値のうちの、前記所定の１軸以外の２軸に関する加速度値を各成分とするベクトルを前記加速度ベクトルとして用いる、請求項６に記載の移動方向算出プログラム。
【請求項８】
前記移動期間内に取得される複数の加速度データに対応する各加速度ベクトルの総和を示すベクトルを、前記入力装置に加わる重力方向として算出する重力方向算出ステップと、
前記移動方向と前記重力方向とに基づいて所定のゲーム処理を実行するゲーム処理ステップと、をさらに備える請求項５に記載の移動方向算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、移動方向算出装置および移動方向算出プログラムに関し、より特定的には、入力装置の移動方向を算出する移動方向算出装置および移動方向算出プログラムに関する。
【背景技術】
【０００２】
特許文献１には、手にはめるグローブを模したコントローラの動きを検出する技術が記載されている。このコントローラは、加速度センサを備えており、加速度センサによって３軸方向に関する各加速度値を検出する。そして、検出された各加速度値の波形のパターンに基づいて、コントローラの動き（すなわち、パンチの種類）を判断する。
【特許文献１】特開２００２−１５３６７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記特許文献１に記載のコントローラは、波形のパターンによってパンチを数種類に分類することしかできず、コントローラの移動方向を詳細に判断することはできない。そのため、プレイヤが入力可能の操作の種類は数種類に限られることからゲームの内容も単純になってしまい、ゲームの面白みに欠けるおそれがあった。
【０００４】
それ故、本発明の目的は、入力装置の移動方向を正確に算出することが可能な移動方向算出装置および移動方向算出プログラムを提供することである。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００６】
第１の発明は、入力装置（コントローラ７）の移動方向を算出する移動方向算出装置（ゲーム装置３）である。移動方向算出装置は、取得手段（ステップＳ２を実行するＣＰＵ１０等。以下、この欄において同様の場合にはステップ番号のみを記載する。）と、期間検出手段（Ｓ４，Ｓ７）と、差分算出手段（Ｓ２３）と、移動方向算出手段（Ｓ２４）と、を備えている。取得手段は、入力装置に搭載される多軸加速度センサ（３７）から出力される加速度データ（６２１）を逐次取得する。期間検出手段は、取得される加速度データに基づいて、入力装置が動き始めてから動きが終了するまでの期間を移動期間として検出する。差分算出手段は、加速度データにより示される各軸に関する加速度値のうちの複数の軸に関する加速度値を各成分とするベクトルを加速度ベクトルとするとき、移動期間内に取得される複数の加速度データ（選出加速度データ群６３１）毎に、加速度データに対応する加速度ベクトルと当該加速度データの次に取得された加速度データに対応する加速度ベクトルとの差分ベクトルを算出する。移動方向算出手段は、移動期間内に取得される各加速度データについて算出された各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和を算出し、当該総和が示すベクトルによって決められる方向を移動方向とする。
【０００７】
第２の発明において、期間検出手段は、開始設定手段（Ｓ４）と、終了設定手段（Ｓ７）とを含んでいてもよい。開始設定手段は、メモリに記憶された加速度データにより示される各軸に関する加速度値のうちの所定の１軸（ｚ軸）に関する加速度値が第１閾値を上回った時点を移動期間の開始時点に設定する。終了設定手段は、メモリに記憶された加速度データにより示される各軸に関する加速度値のうちの所定の１軸に関する加速度値が第２閾値を下回った時点を移動期間の終了時点に設定する。
【０００８】
第３の発明において、多軸加速度センサは３軸加速度センサであってもよい。このとき、差分算出手段は、加速度データにより示される各軸に関する加速度値のうちの、所定の１軸以外の２軸に関する加速度値を各成分とするベクトルを加速度ベクトルとして用いる。
【０００９】
第４の発明において、移動方向算出装置は、重力方向算出手段（Ｓ２５）と、ゲーム処理手段（Ｓ９）と、をさらに備えていてもよい。重力方向算出手段は、移動期間内に取得される複数の加速度データに対応する各加速度ベクトルの総和を示すベクトルを、入力装置に加わる重力方向として算出する。ゲーム処理手段は、移動方向と重力方向とに基づいて所定のゲーム処理を実行する。
【００１０】
また、本発明は、上記の動作を移動方向算出装置のコンピュータに実行させるための移動方向算出プログラム（ゲームプログラム６１）の形態で提供されてもよい。
【発明の効果】
【００１１】
第１の発明によれば、移動期間内に取得された各加速度データについて差分ベクトルが算出される。そして、差分ベクトルに重みを付けて総和を算出することによって移動方向が算出される。ここで、重みを付けずに差分ベクトルの総和を算出する方法では、所定期間の検出結果によっては、第１移動方向を正確に認識できないおそれがある。例えば、所定期間内において最初に取得された加速度データの値と、最後に取得された加速度データの値とがほぼ同じになる場合には、総和がほぼ「０」になってしまうため、第１移動方向を正確に認識できない。これに対して、第１の発明によれば、上記重みを考慮して総和を算出するので、所定期間内において最初および最後に取得された２つの加速度データの値が同じになる場合であっても、総和を示すベクトルは「０」にはならない。第１の発明によれば、各差分ベクトルのうちで大きさが相対的に大きい差分ベクトルの成分が当該総和によって表されることとなり、第１移動方向を正確に算出することができる。
【００１２】
第２の発明によれば、入力装置が移動している期間の開始時点および終了時点を容易に検出することができる。
【００１３】
第３の発明によれば、３軸加速度センサの所定の１軸に関する加速度値を用いて、上記移動期間を容易に検出することができるとともに、所定の１軸以外の２軸に関する加速度値を用いて、当該２軸方向に関する移動方向を容易に算出することができる。
【００１４】
第４の発明によれば、移動方向だけでなく、入力装置に加わる重力方向が算出される。すなわち、入力装置から取得された加速度データから、移動方向および重力方向という、入力装置の状態を示す２種類の情報が算出される。そして、ゲーム装置は、これら２種類の情報をゲーム操作に反映してゲーム処理を行う。したがって、第４の発明によれば、センサが１つという簡易な構成でありながら、入力装置の２種類の状態に基づいた複雑なゲーム操作をプレイヤに行わせることが可能となる。
【発明を実施するための最良の形態】
【００１５】
図１を参照して、本発明の一実施形態に係る移動方向算出装置の一例であるゲーム装置を含むゲームシステム１について説明する。図１は、当該ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、ゲーム装置およびゲームプログラムについて説明する。
【００１６】
図１において、ゲームシステム１は、家庭用テレビジョン受像機等のスピーカを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作データを与えるコントローラ７によって構成される。また、モニタ２の周辺（図では画面の上側）には、２つのマーカ８ａおよび８ｂが設置される。マーカ８ａおよび８ｂは、具体的には赤外ＬＥＤであり、それぞれモニタ２の前方に向かって赤外光を出力する。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される操作データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。なお、他の実施形態においてはコントローラ７とゲーム装置３とは有線で接続されてもよい。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００１７】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００１８】
コントローラ７は、その内部に備える通信部３６（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて操作データを無線送信する。コントローラ７は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、直線方向の加速度を検出する加速度センサ３７（後述）を備えている。加速度センサ３７によって検出された加速度を示すデータは上記操作データの一部としてゲーム装置３へ送信される。ゲーム装置３は、当該加速度を示すデータに基づいてコントローラ７の動き及び／又は姿勢を算出し、動き等に応じた処理を適宜実行することができる。また、コントローラ７は、当該コントローラ７から見た画像を撮像するための撮像情報演算部３５（後述）を備えている。撮像情報演算部３５は、モニタ２の周辺に配置された各マーカ８ａおよび８ｂを撮像対象として、各マーカ８ａおよび８ｂの画像を撮像する。ゲーム装置３は、この画像に基づいた演算処理によってコントローラ７の位置および姿勢に応じた処理を実行することができる。
【００１９】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００２０】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）１０を備える。ＣＰＵ１０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ１３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ１０には、メモリコントローラ１１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２、メインメモリ１３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）１５が接続される。また、メモリコントローラ１１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）１６、ビデオＩ／Ｆ１７、外部メモリＩ／Ｆ１８、オーディオＩ／Ｆ１９、およびディスクＩ／Ｆ２１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２２、およびディスクドライブ２０が接続されている。
【００２１】
ＧＰＵ１２は、ＣＰＵ１０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ１２は、図示しない画像処理専用のメモリやメインメモリ１３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ１２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ１１およびビデオＩ／Ｆ１７を介してモニタ２に出力する。
【００２２】
メインメモリ１３は、ＣＰＵ１０で使用される記憶領域であって、ＣＰＵ１０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ１３は、ＣＰＵ１０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ１３に記憶されたゲームプログラムや各種データ等がＣＰＵ１０によって実行される。
【００２３】
ＤＳＰ１４は、ゲームプログラム実行時にＣＰＵ１０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ１５が接続される。ＡＲＡＭ１５は、ＤＳＰ１４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ１４は、ＡＲＡＭ１５に記憶されたサウンドデータを読み出し、メモリコントローラ１１およびオーディオＩ／Ｆ１９を介してモニタ２に備えるスピーカ２２に出力させる。
【００２４】
メモリコントローラ１１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ１６は、例えば４つのコントローラＩ／Ｆで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ１６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの操作データを受信し、コントローラＩ／Ｆ１６を介して当該操作データをＣＰＵ１０へ出力する。なお、他の実施形態においては、ゲーム装置３は、受信ユニット６に代えて、コントローラ７から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した操作データは、所定のバスを介してＣＰＵ１０に出力される。ビデオＩ／Ｆ１７には、モニタ２が接続される。外部メモリＩ／Ｆ１８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ１９にはモニタ２に内蔵されるスピーカ２２が接続され、ＤＳＰ１４がＡＲＡＭ１５から読み出したサウンドデータや、ディスクドライブ２０から直接出力されるサウンドデータがスピーカ２２から出力される。ディスクＩ／Ｆ２１には、ディスクドライブ２０が接続される。ディスクドライブ２０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ１９に出力する。
【００２５】
次に、図３〜図８を参照して、コントローラ７について説明する。図３〜図４は、コントローラ７の外観構成を示す斜視図である。図３Ａは、コントローラ７の上側後方から見た斜視図であり、図３Ｂは、コントローラ７を下側後方から見た斜視図である。図４は、コントローラ７を前方から見た図である。
【００２６】
図３Ａ〜図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すｚ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ７を用いることによって、それに設けられたボタンを押下すること、コントローラ７自体を動かすこと、および、コントローラ７自体の位置や姿勢を変えることによってゲーム操作を行うことができる。例えば、プレイヤは、コントローラ７の傾きを変化させたり、コントローラ７を動かしたりする（例えば、コントローラ７を任意の方向に振る）ことによって、ゲーム空間に登場する操作対象に対する操作を行うことができる。また、例えば、プレイヤは、長手方向を軸としてコントローラ７を回転させたり、コントローラ７によって指し示される画面上の位置を変えたりする操作によって、操作対象に対する操作を行うことができる。ここで、「コントローラ７によって指し示される画面上の位置」とは、理想的には、コントローラ７の前端部から上記長手方向に延ばした直線とモニタ２の画面とが交わる位置であるが、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置３によって算出することができればよい。以下では、コントローラ７によって指し示される画面上の位置を「コントローラ７の指示位置」と呼ぶ。また、コントローラ７（ハウジング３１）の長手方向を、「コントローラ７の指示方向」と呼ぶことがある。
【００２７】
ハウジング３１には、複数の操作キーが設けられる。ハウジング３１の上面には、十字キー３２ａ、Ｘボタン３２ｂ、Ｙボタン３２ｃ、Ａボタン３２ｄ、セレクトスイッチ３２ｅ、メニュースイッチ３２ｆ、およびスタートスイッチ３２ｇが設けられる。一方、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＢボタン３２ｉが設けられる。これらの各操作キー（ボタン）は、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないためここでは詳細な説明を省略する。また、ハウジング３１の上面には、遠隔からゲーム装置３本体の電源をオン／オフするための電源スイッチ３２ｈが設けられる。
【００２８】
また、コントローラ７は撮像情報演算部３５（図５Ｂ）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射面３５ａが設けられる。一方、ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、例えば３２ピンのエッジコネクタであり、コントローラ７に他の機器を接続するために利用される。また、ハウジング３１上面の後面側には複数のＬＥＤ３４が設けられる。ここで、コントローラ７には、他のコントローラ７と区別するためにコントローラ種別（番号）が付与される。ＬＥＤ３４は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ操作データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ３４のいずれか１つが点灯する。
【００２９】
次に、図５Ａおよび図５Ｂを参照して、コントローラ７の内部構造について説明する。図５Ａおよび図５Ｂは、コントローラ７の内部構造を示す図である。なお、図５Ａは、コントローラ７の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂは、コントローラ７の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂに示す斜視図は、図５Ａに示す基板３００を裏面から見た斜視図となっている。
【００３０】
図５Ａにおいて、ハウジング３１の内部には基板３００が固設されており、当該基板３００の上主面上に操作キー３２ａ〜３２ｈ、加速度センサ３７、ＬＥＤ３４、水晶振動子４６、無線モジュール４４、およびアンテナ４５等が設けられる。そして、これらは、基板３００等に形成された配線（図示せず）によってマイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２（図６参照）に接続される。また、無線モジュール４４およびアンテナ４５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子４６は、後述するマイコン４２の基本クロックを生成する。
【００３１】
一方、図５Ｂにおいて、基板３００の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ７の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０（例えばＣＭＯＳイメージセンサやＣＣＤイメージセンサ）、および画像処理回路４１によって構成されおり、それぞれ基板３００の下主面に取り付けられる。また、基板３００の下主面上の後端縁にコネクタ３３が取り付けられる。そして、撮像情報演算部３５の後方であって基板３００の下主面上にＡボタン３２ｉが取り付けられていて、それよりさらに後方に電池４７が収容される。電池４７とコネクタ３３との間の基板３００の下主面上には、バイブレータ４８が取り付けられる。このバイブレータ４８は、例えば振動モータやソレノイドであってよい。バイブレータ４８が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
【００３２】
なお、図３Ａ〜図５Ｂに示したコントローラ７の形状や、各操作キーの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。例えば、加速度センサをＸ軸の正負いずれかの方向にずらせばＺ軸周りの回転を算出しやすくできたり、バイブレータをコントローラ先端側に配置すればコントローラ全体が揺れやすくできるなどの効果も想定できる。また、コントローラ７における撮像情報演算部３５の位置（撮像情報演算部３５の光入射面３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ７の指示方向」は、光入射面に垂直な方向、すなわち、撮像素子４０の撮像方向となる。
【００３３】
図６は、コントローラ７の構成を示すブロック図である。コントローラ７は、操作部３２（各操作キー）、撮像情報演算部３５、通信部３６、および加速度センサ３７を備えている。なお、本実施形態において、コントローラ７は、加速度検出手段（加速度センサ３７）を備えていればよく、操作部３２および撮像情報演算部３５を備えていない構成であってもよい。
【００３４】
加速度センサ３７は、コントローラ７の加速度（重力加速度を含む）を検出する、すなわち、コントローラ７に加わる力（重力を含む）を検出する。加速度センサ３７は、当該加速度センサ３７の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度の値を検出する。例えば、２軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度（直線加速度）をそれぞれ検出する。例えば、３軸または２軸の加速度センサ３７は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能である種類のものでもよい。
【００３５】
本実施形態では、加速度センサ３７は、コントローラ７を基準とした上下方向（図３Ａおよび図３Ｂに示すｙ軸方向）、左右方向（図３Ａおよび図３Ｂに示すｘ軸方向）および前後方向（図３Ａおよび図３Ｂに示すｚ軸方向）の３軸方向に関してそれぞれ直線加速度を検出する。加速度センサ３７は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ３７からの出力は３軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ７を基準に設定されるｘｙｚ座標系における３次元のベクトルとして表される。以下では、加速度センサ３７によって検出される、複数の軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【００３６】
図７および図８は、コントローラ７の動きと加速度センサの出力との関係を示す図である。図７は、重力加速度（図７に示すベクトルＶＡ）がコントローラ７を基準とした下方向を向く状態を示している。なお、図７では、コントローラ７は水平で静止した状態にあるものとする。この状態においては、コントローラ７には常に重力（重力加速度）が加わっているので、加速度ベクトルＶＡは重力加速度のみを示すものとなる。例えば、図７に示す状態においては加速度ベクトルＶＡはｙ軸負方向を向く。つまり、加速度センサ３７のｙ軸負方向に１Ｇの重力加速度が加わり、ｘ軸およびｚ軸の加速度はほぼ０となる。なお、本実施形態においては、コントローラ７が静止している状態で加速度センサ３７によって検出される加速度の大きさ、すなわち、加速度センサ３７によって検出される加速度が重力加速度のみを表すときの当該加速度の大きさを、１と表す。例えば、図７に示す状態において検出される加速度ベクトルＶＡの各成分の値は、（ｘ，ｙ，ｚ）＝（０，−１，０）となる。
【００３７】
一方、図８は、コントローラ７を移動させている時の状態を示している。図８は、ｘｚ平面に平行であってかつｘ軸負方向側から正方向側の向きに、コントローラ７の前端部が後端部よりも大きい半径の円弧を描くように、コントローラ７が移動している状態を示している。コントローラ７が図８に示すように移動する場合とは、典型的には、コントローラ７の前面がプレイヤの前方方向に向くようにプレイヤが一方の手でコントローラ７を把持した状態で右から左にプレイヤがコントローラ７を振った（移動させた）場合である。図８に示す状態においては、加速度センサ３７には、重力の他に、コントローラ７の移動による慣性力が加えられる。したがって、加速度センサ３７は、コントローラ７に加わる重力に起因する加速度ＶＡ’と、コントローラ７の移動による慣性力に起因する加速度ＶＡ”（ｘ，ｙ軸成分の合成ベクトルとして現れる）とを合成した加速度ＶＡを検出する。詳細は後述するが、このように検出される加速度ＶＡに基づいて、ゲーム装置３はコントローラ７の振り方向を算出する。なお、本明細書において「振り方向」とは、重力方向に対するコントローラ７の移動方向（絶対的な方向）を指し、コントローラ７の向きを基準として表される移動方向（相対的な方向）と区別する。
【００３８】
また、加速度センサ３７には、その素子の特性によるが検出可能な加速度の大きさに限界がある。本実施形態では、各軸に関して加速度センサ３７で検出可能な範囲の限界値を“±２．２”とする。すなわち、加速度センサ３７は、実際の加速度が２．２よりも大きい値となる場合や、実際の加速度が−２．２よりも小さい値となる場合であっても、−２．２〜２．２までの範囲で加速度値を出力する。
【００３９】
加速度センサ３７が検出した加速度（加速度ベクトル）を示すデータ（加速度データ）は、通信部３６へ出力される。なお、本実施形態では、コントローラ７の通信部３６は、逐次（例えば０．５ｍｓに１回）に加速度データをゲーム装置３へ出力する。ゲーム装置３は、この加速度データからコントローラ７の振り方向を算出し、当該振り方向に応じたゲーム処理を実行する。なお、加速度センサ３７は、各軸に沿った直線成分の加速度を検出するものであるので、ゲーム装置３は、コントローラ７の振り方向を直接検出することはできない。このため、加速度センサ３７を搭載したデバイスの振り方向は、加速度センサの各軸毎に検出される加速度に所定の演算処理を施すことによって算出される。
【００４０】
図６の説明に戻り、撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ７の動きでも追跡して解析することができる。
【００４１】
撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８ａおよび８ｂは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ３８を設けることによってマーカ８ａおよび８ｂの画像をより正確に撮像することができる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ３９が集光した赤外線を撮像する。したがって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を算出する。
【００４２】
撮像画像が入力されると、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。ここで、所定条件とは、撮像対象の画像（対象画像）を特定するための条件である。所定条件の具体的な内容は、輝度が所定値以上の領域（高輝度領域）であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を特定するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。
【００４３】
対象画像の位置を算出する際、まず、画像処理回路４１は、撮像画像の領域から上記高輝度領域を対象画像の候補として特定する。撮像画像の画像データにおいて対象画像は高輝度領域として現れるからである。次に、画像処理回路４１は、特定された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する判定処理を行う。撮像画像には、対象画像である２つのマーカ８ａおよび８ｂの画像の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれている場合がある。この場合、マーカ８ａおよび８ｂの画像以外の画像も高輝度領域として現れてしまう。上記の判定処理は、対象画像であるマーカ８ａおよび８ｂの画像とそれ以外の画像とを区別し、対象画像を正確に特定するための処理である。具体的には、当該判定処理においては、特定された高輝度領域が予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
【００４４】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路４１は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子４０の解像度よりも詳細なスケールで算出することが可能である。例えば、撮像素子４０によって撮像された撮像画像の解像度が１２６×９６である場合でも、重心位置を１０２４×７６８のスケールで算出することが可能である。このとき、重心位置の座標は、（０，０）から（１０２４，７６８）までの整数値で表現される。
【００４５】
以上のようにして、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に算出する。画像処理回路４１は、算出された座標を通信部３６のマイコン４２へ出力する。この座標のデータは、マイコン４２によって操作データとしてゲーム装置３に送信される。この座標はコントローラ７自体の向き（姿勢）や位置に対応して変化するので、ゲーム装置３はこの座標値を用いてコントローラ７の向きや位置を算出することができる。なお、本実施形態では、上記座標のデータはゲーム処理に用いられないので、コントローラ７は撮像情報演算部３５を備えていない構成であってもよい。
【００４６】
操作部３２は、上述した十字キー３２ａ等の各操作キー３２ａ〜３２ｉに相当し、各操作キー３２ａ〜３２ｉに対する入力状態（各操作キー３２ａ〜３２ｉが押下されたか否か）を示すデータを通信部３６のマイコン４２へ出力する。
【００４７】
通信部３６は、マイコン４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理の際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータを無線送信する無線モジュール４４を制御する。
【００４８】
操作部３２および撮像情報演算部３５および加速度センサ３７からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。ここで、通信部３６から受信ユニット６への無線送信は所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。マイコン４２は、受信ユニット６への送信タイミングが到来すると、メモリ４３に格納されているデータを操作データとして無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ７から送信される。微弱電波信号はゲーム装置３側の受信ユニット６で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
【００４９】
上記コントローラ７を用いることによって、プレイヤは、各操作キーを押下する従来の一般的なゲーム操作に加えて、コントローラ７の姿勢を変化させたり、コントローラ７自身の位置を動かしたり、コントローラ７を回転させたりするというゲーム操作を行うことができる。
【００５０】
図９は、コントローラ７を用いてゲーム操作するときの状態を概説する図解図である。ゲームシステム１においてコントローラ７を用いてゲームをプレイする際、プレイヤは、図９に示すように一方の手でコントローラ７を把持する。本実施形態では、プレイヤは、把持したコントローラ７を任意の方向に振る（移動させる）ことによってゲーム操作を行う。
【００５１】
以下、上述したゲームシステム１を用いて行われるゲームの具体例について説明する。図１０および図１１は、本実施形態においてモニタ２に表示されるゲーム画面の一例を示す図である。図１０および図１１に示すように、モニタ２には、仮想の３次元ゲーム空間が表示される。ゲーム空間には、丸太を模したオブジェクト５１（以下、丸太オブジェクト５１と呼ぶ）、および、剣を模したオブジェクト５２（以下、剣オブジェクト５２と呼ぶ）が配置される。プレイヤは、コントローラ７を用いて剣オブジェクト５２を操作し、剣オブジェクト５２によって丸太オブジェクト５１を切って遊ぶ（図１１参照）。
【００５２】
剣オブジェクト５２の操作は、コントローラ７を任意の方向に振る動作によって行われる。すなわち、プレイヤは、剣オブジェクト５２を操作するためにコントローラ７を任意の方向に振る操作（振り操作）を行う。なお、本ゲームでは、プレイヤは、コントローラ７の長手方向がコントローラ７の振り方向と略垂直になるようにコントローラ７を把持する。また、コントローラ７の持ち方に関して、プレイヤは、コントローラ７の上面が上下左右のどの方向の向きになるように把持してもよい。つまり、コントローラ７はｚ軸回りの回転方向に関しては任意の姿勢で把持される。
【００５３】
プレイヤがコントローラ７を用いた上記振り操作を行うと、ゲーム装置３はまずコントローラ７の振り方向を算出する。本実施形態では、ゲーム装置３は、コントローラ７を基準としたｘｙｚ座標系（図３参照）におけるｘ軸およびｙ軸に関して、重力方向に対する振り方向を算出する。詳細は後述するが、本実施形態においては、ｚ軸回りの回転方向に関してコントローラ７がどのような向きで把持されても、重力方向に対するコントローラ７の移動方向（振り方向）を算出することが可能である。なお、他の実施形態では、ｘ軸、ｙ軸およびｚ軸の３軸に関して、重力方向に対する振り方向を算出するようにしてもよい。
【００５４】
振り方向を算出すると、ゲーム装置３は、画面内の剣オブジェクト５２を振り方向に応じた方向に移動させる。例えば、プレイヤが左から右にコントローラ７を振った場合、剣オブジェクト５２は画面の左から右に向かって移動する（図１１参照）。また、プレイヤが下から上にコントローラ７を振った場合、剣オブジェクト５２は画面の下から上に向かって移動する。
【００５５】
剣オブジェクト５２を移動させると、ゲーム装置３は、剣オブジェクト５２が丸太オブジェクト５１と接触したか否かを判断する。そして、剣オブジェクト５２が丸太オブジェクト５１と接触した場合、図１１に示すように、剣オブジェクト５２の軌道に沿って丸太オブジェクト５１を切断して表示する。このように、剣オブジェクト５２はコントローラ７の振り方向に応じて移動するので、プレイヤは、コントローラ７を所望の方向に振ることによって、あたかも剣オブジェクト５２を振っているかのような操作感を得ることができる。また、コントローラ７を振ってゲーム操作を行うという今までにないゲーム操作が可能となる。
【００５６】
次に、本実施形態においてゲーム装置３で実行されるプログラム処理について説明する。まず、ゲーム処理において用いられる主なデータについて図１２を用いて説明する。図１２は、ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図である。図１２に示すように、メインメモリ１３には、ゲームプログラム６１、操作データ６２、およびゲーム処理用データ６３等が記憶される。なお、メインメモリ１３には、図１２に示すデータの他、ゲームに登場するオブジェクトの画像データ等、ゲーム処理に必要なデータが記憶される。
【００５７】
ゲームプログラム６１は、ゲーム装置３に電源が投入された後の適宜のタイミングで光ディスク４からその一部または全部が読み込まれてメインメモリ１３に記憶される。ゲームプログラム６１には、後述するゲーム処理の実行に必要なプログラムが含まれている。
【００５８】
操作データ６２は、コントローラ７からゲーム装置３へ送信されてきて、メインメモリ１３に記憶される。操作データ６２には、加速度データ６２１が含まれる。本実施形態では、加速度データ６２１は、上記ｘ軸、ｙ軸、およびｚ軸の３軸に関する加速度値を示す。なお、操作データ６２には、加速度データ６２１の他、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を示すデータや、操作部３２の各ボタンに対して行われた操作内容を示すデータが含まれていてもよい。
【００５９】
ゲーム処理用データ６３は、後述するゲーム処理において用いられるデータである。ゲーム処理用データ６３は、選出加速度データ群６３１、補助線データ６３２、第１〜第４制御点データ６３３〜６３６、第１〜第３方向ベクトルデータ６３７〜６３９、差分ベクトルデータ群６４０、移動方向データ６４１、重力方向データ６４２、振り方向データ６４３、および操作フラグデータ６４４を含む。
【００６０】
選出加速度データ群６３１は、コントローラ７から逐次取得される加速度データのうちから所定の基準に従って選出された加速度データの集合である。所定の基準とは、コントローラ７から逐次取得される加速度データのうちで、移動期間内に取得されたことである。移動期間とは、コントローラ７が移動していると判断される期間である。具体的には、移動期間は、コントローラ７が動き始めたと判断される時点（開始時点）からコントローラ７の動きが終了したと判断される時点（終了時点）までの期間である。詳細は後述するが、移動期間の検出は、加速度センサ３７によって検出されるｚ軸方向の加速度を用いて行われる。なお、選出加速度データ群６３１に含まれる加速度データは１つのみであることもある。
【００６１】
図１３は、選出加速度データ群６３１の一例を示す図である。図１３においては、１つのブロックが１つの加速度データを示しており、加速度データが取得された順番に従って上からブロックを配置している。以下では、選出加速度データ群６３１に含まれる加速度データのうちで、ｉ番目（ｉは１以上の整数）に取得された加速度データにより示される加速度ベクトルを「ＶＡi 」と示す。
【００６２】
図１３に示すように、選出加速度データ群６３１としてメインメモリ１３に記憶される各加速度データは、上記ｘｙｚ座標系におけるｘ軸およびｙ軸に関する加速度値を各成分とする２次元の加速度ベクトルを示す。つまり、コントローラ７から取得された加速度データが選出加速度データ群６３１としてメインメモリ１３に記憶される場合、加速度データにより示される３軸に関する各加速度値のうちのｚ軸に関する加速度値は記憶されず、残りのｘ軸およびｙ軸に関する加速度値のみを示すデータが記憶される。なお、選出加速度データ群６３１に含まれる加速度データを２次元の加速度ベクトルを示すデータとする理由は、本実施形態ではｘ軸およびｙ軸に関する振り方向を算出することを目的とするため、振り方向の算出処理においてｚ軸に関する加速度値を用いないからである。つまり、本実施形態では、ゲーム装置３は上記２次元の加速度ベクトルを用いてコントローラ７の振り方向を算出する。
【００６３】
また、加速度センサ３７は、検出可能な加速度の値には限界があり、限界を超える加速度に対しては限界値が出力される。したがって、選出加速度データ群６３１には、加速度データにより示される加速度ベクトルの各成分のうちのいずれかが、加速度センサ３７で検出可能な範囲の限界値（＝±２．２）をとる加速度データが含まれ得る。以下では、このような加速度データを「限界加速度データ」と呼ぶ。また、選出加速度データ群６３１のうちで限界加速度データでない加速度データを、「非限界加速度データ」と呼ぶ。図１３では、第３番目の加速度ベクトルＶＡ3 から第５番目の加速度ベクトルＶＡ5 までの間、加速度ベクトルのｘ成分の値が、限界値である“−２．２”となる。したがって、第３番目から第５番目の加速度データが限界加速度データ群６３１’である。限界加速度データ群６３１’は、後述するデータ補正処理（ステップＳ２２）によって加速度値が補正される。詳細は後述するが、データ補正処理においては、限界加速度データにより示される２次元加速度ベクトルの各成分のうちの上記限界値をとる成分が補正される。
【００６４】
図１２の説明に戻り、補助線データ６３２は、上記限界加速度データ群６３１’の補正に用いる補助線を示すデータである。本実施形態では、補助線として３次のベジェ曲線を用いる。ベジェ曲線は、以下に示す、変数ｐと変数ｕとの関係式（１）によって定義される。
ｐ＝Ｐ０×（１−ｕ）3＋Ｐ１×３ｕ（１−ｕ）2＋Ｐ２×３ｕ2（１−ｕ）＋Ｐ３ｕ3   …（１）
上式（１）において、変数ｐは、上記２次元加速度ベクトルと同様、ｘ軸とｙ軸とからなるｘｙ座標系における座標値である。変数ｕは、０≦ｕ≦１の範囲内の値をとるスカラー値である。また、定数Ｐ０、Ｐ１、Ｐ２、およびＰ３は制御点である。これら４つの制御点の値を決めることでベジェ曲線の形状が決定される。
【００６５】
第１〜第４制御点データ６３３〜６３６は、上記ベジェ曲線の４つの制御点の値を示すデータである。すなわち、第１制御点データ６３３は上記制御点Ｐ０を示し、第２制御点データ６３４は上記制御点Ｐ１を示し、第３制御点データ６３５は上記制御点Ｐ２を示し、第４制御点データ６３６は上記制御点Ｐ３を示す。第１〜第４制御点Ｐ０〜Ｐ３は、上記ｘ軸とｙ軸とからなるｘｙ座標系における座標値で表現される。
【００６６】
第１〜第３方向ベクトルデータ６３７〜６３９は、上記４つの制御点Ｐ０〜Ｐ３を決定するために用いられる３つのベクトルを示す。すなわち、第１方向ベクトルデータ６３７は第１方向ベクトルＶ１を示し、第２方向ベクトルデータ６３８は第２方向ベクトルＶ２を示し、第３方向ベクトルデータ６３９は第３方向ベクトルＶ３を示す。第１〜第３方向ベクトルは、上記２次元加速度ベクトルと同様、上記ｘｙ座標系で表現される。第１〜第３方向ベクトルの算出方法については後述する。
【００６７】
差分ベクトルデータ群６４０は、選出加速度データ群６３１に含まれる各加速度データから算出される差分ベクトルデータの集合を示す。差分ベクトルデータは、選出加速度データ群６３１に含まれる各加速度データについて、加速度データにより示される加速度ベクトルと、その次に取得された加速度データにより示される加速度ベクトルとの差分のベクトルを示す。差分ベクトルデータ群６４０は、後述する移動方向ベクトルを算出するために用いられる。
【００６８】
移動方向データ６４１は、コントローラ７の向きを基準として表される当該コントローラ７の移動方向を示す。この移動方向は、上記ｘｙ座標系におけるベクトルによって表現される。以下では、この移動方向を表すベクトルを移動方向ベクトルと呼ぶ。移動方向ベクトルは、上記差分ベクトルデータ群６４０を用いて算出される。
【００６９】
重力方向データ６４２は、コントローラ７の向きを基準として表される、コントローラ７に加わる重力の方向を示す。重力方向は、上記ｘｙ座標系におけるベクトルによって表現される。以下では、重力方向を表すベクトルを重力方向ベクトルと呼ぶ。重力方向ベクトルは、上記選出加速度データ群６３１を用いて算出される。
【００７０】
振り方向データ６４３は、重力方向に対してコントローラ７が振られる方向（振り方向）を示す。振り方向は、重力方向を基準とした方向を表すためのＸＹ座標系（図２１参照）におけるベクトルによって表現される。以下では、振り方向を表すベクトルを振り方向ベクトルと呼ぶ。振り方向ベクトルは、上記移動方向ベクトルおよび上記重力方向ベクトルを用いて算出される。本実施形態では、直接的にはこの振り方向ベクトルに基づいてゲーム処理が実行される。すなわち、ゲーム装置３は、振り方向ベクトルの向きに応じた方向に剣オブジェクト５２をゲーム空間内において移動させる。
【００７１】
操作フラグデータ６４４は、プレイヤによって振り操作が行われている最中か否かを示す操作フラグのデータである。操作フラグは、振り操作が行われている時はオンに設定され、振り操作が行われていない時はオフに設定される。
【００７２】
次に、ゲーム装置３において行われる処理の詳細を、図１４〜図１８を用いて説明する。図１４は、ゲーム装置３において実行される処理の流れを示すメインフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ１３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ１３に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１４に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【００７３】
まず、ステップＳ１において、以降の処理において用いられるデータの初期化処理が実行される。すなわち、ＣＰＵ１０は、メインメモリ１３のゲーム処理用データ６３に含まれる各データ６３１〜６４３の内容をクリアする。また、操作フラグデータ６４４の内容をオフを示すデータに設定する。なお、この時点で仮想の３次元空間に丸太オブジェクト５１が配置される。ステップＳ１の実行後、ステップＳ２〜Ｓ１１の処理ループが繰り返されることによって、ゲームが進行していく。
【００７４】
ステップＳ２において、ＣＰＵ１０は、コントローラ７から操作データを取得する。すなわち、コントローラ７は所定時間間隔（例えば、１フレーム時間間隔以内）で操作データをゲーム装置３へ送信してくるので、ＣＰＵ１０は、送信されてきた操作データをメインメモリ１３に記憶する。この操作データには、少なくとも上記加速度データが含まれている。ＣＰＵ１０は、加速度データをメインメモリ１３に記憶する。なお、メインメモリ１３にすでに加速度データ６２１が記憶されている場合には、加速度データ６２１の内容は取得された加速度データの内容となるように更新して記憶される。本実施形態においてステップＳ２の処理は、ステップＳ８〜Ｓ１０の処理中を除いて１フレーム時間毎に実行されるので、ゲーム装置３は、加速度データを逐次取得することができる。
【００７５】
続くステップＳ３において、ＣＰＵ１０は、コントローラ７を振る操作がプレイヤによって行われている最中か否かを判定する。ステップＳ３の判定は、メインメモリ１３に記憶されている操作フラグデータ６４４を参照することによって行われる。すなわち、操作フラグがオンに設定されている場合、コントローラ７を振る操作が行われている最中であると判断され、操作フラグがオフに設定されている場合、コントローラ７を振る操作が行われていないと判断される。ステップＳ３の判定結果が否定である場合、ステップＳ４の処理が実行される。一方、ステップＳ３の判定結果が肯定である場合、後述するステップＳ７の処理が実行される。
【００７６】
ステップＳ４において、ＣＰＵ１０は、振り操作が開始されたか否かを判定する。ステップＳ４の判定は、メインメモリ１３に記憶されている加速度データ６２１に基づいて行われる。すなわち、加速度データ６２１により示されるｚ軸に関する加速度値が予め定められた第１閾値よりも大きい場合、振り操作が開始されたと判断され、当該ｚ軸に関する加速度値が当該第１閾値以下である場合、振り操作が開始されていないと判断される。
【００７７】
ここで、振り操作が行われている間は、図８に示したように、ｚ軸方向に関してコントローラ７に遠心力が加えられる。そのため、ある程度の速さで振り操作が行われている場合にはｚ軸に関する加速度値が第１閾値よりも大きくなる。したがって、上記ステップＳ４に示したように、ｚ軸に関する加速度値を参照し、当該加速度値が所定の値（第１閾値）よりも大きいか否かを判定することによって、振り操作が行われているか否かを容易に判定することができる。
【００７８】
ステップＳ４の判定結果が肯定である場合、ステップＳ５およびＳ６の処理が実行される。一方、ステップＳ４の判定結果が否定である場合、ステップＳ５およびＳ６の処理がスキップされて後述するステップＳ１１の処理が実行される。
【００７９】
ステップＳ５においては、操作フラグがオンに設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている操作フラグデータ６４４の内容をオンを示すデータに書き換える。これによって、ステップＳ２〜Ｓ１１のループ処理が次に行われるときにはステップＳ３の判定結果が肯定となる。
【００８０】
続くステップＳ６において、ＣＰＵ１０は、ステップＳ２で取得された加速度データを選出加速度データ群６３１として保存する。すなわち、選出加速度データ群６３１に含まれる加速度データに、メインメモリ１３に記憶されている加速度データ６２１が追加される。なお、上述したように、本実施形態では、加速度データ６２１により示される３軸に関する各加速度値のうちのｚ軸に関する加速度値は記憶されず、残りのｘ軸およびｙ軸に関する加速度値のみを示すデータが記憶される。つまり、図１３に示すように、２次元の加速度ベクトルを示すデータが記憶される。ステップＳ６の後、後述するステップＳ１１の処理が実行される。
【００８１】
一方、ステップＳ７において、ＣＰＵ１０は、振り操作が終了したか否かを判定する。ステップＳ７の判定は、メインメモリ１３に記憶されている加速度データ６２１に基づいて行われる。すなわち、加速度データにより示されるｚ軸に関する加速度値が予め定められた第２閾値以下である場合、振り操作が終了したと判断され、当該ｚ軸に関する加速度値が当該第２閾値よりも大きい場合、振り操作が終了していないと判断される。なお、振り操作が行われていない間は、図７に示したように、ｚ軸方向に関してコントローラ７に遠心力が加えられないので、ｚ軸に関する加速度値が第２閾値以下となる。したがって、上記のようにｚ軸に関する加速度値を参照し、当該加速度値が所定の値（第２閾値）以下であるか否かを判定することによって、振り操作が行われていないか否かを容易に判定することができる。なお、上記第１閾値および第２閾値は、同じ値であってもよいし、異なる値であってもよい。本実施形態では、例えば、第１閾値および第２閾値をともに“１．１”とする。ステップＳ７の判定結果が肯定である場合、後述するステップＳ８〜Ｓ１０の処理が実行される。一方、ステップＳ７の判定結果が否定である場合、上述のステップＳ６の処理が実行される。
【００８２】
図１５は、ある期間の間にステップＳ２で取得された加速度データの推移を示す図である。図１５は、当該取得された加速度データにより示される加速度ベクトルを、ｘ座標およびｙ座標からなる２次元座標系における座標として表している。図１５における各点ｐ１〜ｐ１９は各加速度ベクトルの終端の位置を示しており、各加速度ベクトルの始端の位置は原点である。例えば、点ｐ１により示される加速度ベクトルは、原点を始端とし、点ｐ１の位置を終端とするベクトルである。図１５では、取得された順に点ｐ１から、点ｐ２、点ｐ３、…、点ｐ１９までの１９個の加速度ベクトルを示している。なお、図１５において白丸で示される点は、その加速度ベクトルに対応する加速度データにより示されるｚ軸に関する加速度値が上記第１閾値（第２閾値）以下となる場合の加速度ベクトルを示す。また、図１５において黒丸で示される点は、その加速度ベクトルに対応する加速度データにより示されるｚ軸に関する加速度値が上記第１閾値（第２閾値）よりも大きい場合の加速度ベクトルを示す。
【００８３】
ゲーム開始直後において振り操作が開始されていない時（コントローラ７が十分な速度で振られていない時を含む）には、白丸の点ｐ１および点ｐ２で示されるような、ｚ軸に関する加速度値が第１閾値以下となる加速度データがステップＳ２で取得される。このとき、ステップＳ３およびＳ４の判定結果がともに否定となるので、加速度データは保存されない。そして、振り操作が開始されてある程度の速度でコントローラ７が振られると、黒丸の点ｐ３で示されるような、ｚ軸に関する加速度値が第１閾値よりも大きい加速度データがステップＳ２で取得される。このとき、ステップＳ３の判定結果が否定となるとともにステップＳ４の判定結果が肯定となる。これによって、ゲーム装置３は、振り操作が開始された時点、すなわち、上記移動期間の開始時点を検出したことになる。そして、振り操作が開始された時点から加速度データの保存が開始される（ステップＳ６）。図１５の例では、点ｐ３に対応する加速度ベクトルがメインメモリ１３に記憶される。
【００８４】
振り操作が継続する間は、黒丸の点ｐ４〜点ｐ１７のように、ｚ軸に関する加速度値が第１閾値よりも大きい加速度データがステップＳ２で取得される。このとき、ステップＳ３の判定結果が肯定となるとともにステップＳ７の判定結果が否定となるので、加速度データの保存（ステップＳ６）が継続して行われる。したがって、点ｐ３に続き、点ｐ４〜点ｐ１７に対応する加速度ベクトルが順次メインメモリ１３に記憶される。
【００８５】
コントローラ７の速度が落ちてきて振り操作が終了すると、白丸の点ｐ１８で示されるような、ｚ軸に関する加速度値が第１閾値以下となる加速度データがステップＳ２で取得される。このとき、ステップＳ３の判定結果が肯定となるとともにステップＳ７の判定結果が肯定となる。これによって、ゲーム装置３は、振り操作が終了された時点、すなわち、上記移動期間の終了時点を検出したことになる。そして、振り操作が終了された時点で加速度データの保存が終了され、ステップＳ８〜Ｓ１０の処理が実行される。以上のように、移動期間中に取得された加速度データにより示される加速度ベクトルのデータが選出加速度データ群６３１としてメインメモリ１３に記憶されることとなる。図１５の例においては、点ｐ３〜点ｐ１７に対応する加速度ベクトルのデータがメインメモリ１３に記憶される。
【００８６】
ステップＳ８〜Ｓ１０の処理は、振り操作が終了した直後に実行される。ステップＳ８〜Ｓ１０の処理においては、振り操作によるコントローラ７の振り方向が算出され（ステップＳ８）、算出された振り方向に基づいたゲーム処理（ステップＳ９）が実行される。以下、ステップＳ８〜Ｓ１０の処理の詳細を説明する。
【００８７】
まず、ステップＳ８において振り方向算出処理が実行される。振り方向算出処理は、直前に行われた振り操作によるコントローラ７の振り方向を算出するための処理である。以下、図１６を参照して振り方向算出処理の詳細について説明する。
【００８８】
図１６は、図１４に示す振り方向算出処理（ステップＳ８）の詳細を示すフローチャートである。振り方向算出処理においては、まずステップＳ２１において、ＣＰＵ１０は選出加速度データ群６３１から限界加速度データを選出する。上述したように、限界加速度データとは、加速度ベクトルの各成分のうちのいずれかが、加速度センサ３７で検出可能な範囲の限界値をとる加速度データである。図１５の例では、点ｐ５、点ｐ６、点ｐ７、点ｐ１３、点ｐ１４、および点ｐ１５が限界加速度データに対応する。なお、図１５に示す点線で囲まれる領域Ａは、加速度データが検出可能な範囲（−２．２≦ｘ≦２．２，−２．２≦ｙ≦２．２）を示している。
【００８９】
なお、上記ステップＳ２１においては、連続して取得された複数の限界加速度データの集合が、１つの限界加速度データ群６３１’として選出される。したがって、選出加速度データ群６３１のうちで、連続して取得された限界加速度データの集合が２つである場合には、２つの限界加速度データ群６３１’が別の集合として取り扱われる。図１５の例では、点ｐ５、点ｐ６、および点ｐ７に対応する限界加速度データの集合が１つの限界加速度データ群６３１’として選出されるとともに、点ｐ１３、点ｐ１４、および点ｐ１５に対応する限界加速度データの集合がもう１つの限界加速度データ群６３１’として選出される。
【００９０】
ステップＳ２２においてデータ補正処理が実行される。データ補正処理は、上記限界加速度データ群６３１’に含まれる各限界加速度データの値を補正する処理である。以下、図１７を参照してデータ補正処理の詳細について説明する。
【００９１】
図１７は、図１６に示すデータ補正処理（ステップＳ２２）の詳細を示すフローチャートである。データ補正処理においては、まずステップＳ３１において、ＣＰＵ１０は、メインメモリ１３に記憶されている限界加速度データ群６３１’のうちの１つを選択する。上述のように、ステップＳ２１において複数の限界加速度データ群６３１’が選出されることもあり得るからである。以下に示すステップＳ３２〜Ｓ４０の処理においては、ステップＳ３１で選択された限界加速度データ群６３１’を対象として補正が行われる。
【００９２】
続くステップＳ３２において、ＣＰＵ１０は、補助線の制御点を決めるための第３方向ベクトルを算出する。第３方向ベクトルは、例えば図１５に示すベクトルＶ３であり、メインメモリ１３に記憶されている選出加速度データ群６３１に基づいて算出される。具体的には、第３方向ベクトルＶ３は、次の式（２）に従って算出される。
【数１】
2007295990.tif 000003
上式（２）において、ベクトルＶＡt は、選出加速度データ群に含まれる第ｔ番目の加速度ベクトルを示す。また、変数ｋは、選出加速度データ群６３１に含まれる加速度ベクトルの数を示す。上式（２）から明らかなように、第３方向ベクトルＶ３は、（ａ）選出加速度データ群６３１に含まれる各加速度データについて、加速度データに対応する加速度ベクトル（ＶＡt ）と当該加速度データの次に取得された加速度データに対応する加速度ベクトル（ＶＡt+1 ）との差分ベクトル（ＶＡt+1 −ＶＡt ）をそれぞれ算出し、（ｂ）各差分ベクトルに対して差分ベクトルの大きさ（｜ＶＡt+1 −ＶＡt ｜）に応じた重み付けを行って当該各差分ベクトルの総和を算出することによって算出される。
【００９３】
以上によって算出された第３方向ベクトルＶ３を示すデータは、第３方向ベクトルデータ６３９としてメインメモリ１３に記憶される。なお、上式（２）においては、選出加速度データ群６３１に含まれる全ての加速度データを用いて第３方向ベクトルＶ３を算出したが、他の実施形態においては、選出加速度データ群６３１のうちの上記非限界加速度データのみを用いて第３方向ベクトルを算出するようにしてもよい。
【００９４】
続くステップＳ３３において、ＣＰＵ１０は、第３方向ベクトルの向きを補正する必要があるか否かを判定する。ステップＳ３３の判定は、第３方向ベクトルと、直前加速度ベクトルと、直後加速度ベクトルとに基づいて行われる。ここで、直前加速度ベクトルとは、非限界加速度データのうちで限界加速度データ（ステップＳ２１で選出されている限界加速度データ群）の直前に取得された加速度データにより示される加速度ベクトルである。また、直後加速度ベクトルとは、非限界加速度データのうちで限界加速度データ（ステップＳ２１で選出されている限界加速度データ群）の直後に取得された加速度データにより示される加速度ベクトルである。例えば図１５の例で言えば、点ｐ５〜点ｐ７により示される限界加速度データ群が選出されている場合、点ｐ５の直前に取得された点ｐ４に対応する加速度データが直前加速度データであり、点ｐ７の直後に取得された点ｐ８に対応する加速度データが直後加速度データである。
【００９５】
具体的には、上記ステップＳ３３の判定は、上記直前加速度ベクトルと直後加速度ベクトルとを加算したベクトルと、第３方向ベクトルとの内積を計算することによって行われる。すなわち、内積値が負になる場合、第３方向ベクトルの向きを補正する必要があると判断され、内積値が負にならない場合、第３方向ベクトルの向きを補正する必要がないと判断される。ステップＳ３３の判定結果が肯定である場合、ステップＳ３４の処理が実行される。一方、ステップＳ３３の判定結果が否定である場合、ステップＳ３４の処理がスキップされてステップＳ３５の処理が実行される。
【００９６】
ステップＳ３４においては、ステップＳ３２で算出された第３方向ベクトルが補正される。具体的には、ＣＰＵ１０は、当該第３方向ベクトルの向きが逆向きになるように第３方向ベクトルを補正する。このとき、メインメモリ１３に記憶されている第３方向ベクトルデータ６３９の内容は、補正後の内容を示すデータに書き換えられる。ステップＳ３４の後、ステップＳ３５の処理が実行される。
【００９７】
ステップＳ３５において、ＣＰＵ１０は、補助線の制御点を決めるための第１方向ベクトルＶ１を算出する。本実施形態では、第１方向ベクトルは、上記直前加速度データと、当該直前加速度データより１つ前に取得された非限界加速度データとに基づいて算出される。なお、これらの加速度データは、メインメモリ１３に記憶されている選出加速度データ群６３１に含まれている。具体的には、第１方向ベクトルＶ１は、次の式（３）に従って算出される。
Ｖ１＝ＶＡN −ＶＡN-1 …（３）
上式（３）において、ベクトルＶＡN は直前加速度データにより示される加速度ベクトルであり、ベクトルＶＡN-1 は直前加速度データの１つ前に取得された非限界加速度データにより示される加速度ベクトルである。上式（３）のように、第１方向ベクトルは、直前加速度データにより示される加速度ベクトルから、当該直前加速度データの１つ前に取得された非限界加速度データにより示される加速度ベクトルを減算したベクトルとして算出される。したがって、図１５の例においては、第１方向ベクトルＶ１は、点ｐ３を始点とし、点ｐ４を終点とするベクトルとなる。以上のように算出された第１方向ベクトルを示すデータは、第１方向ベクトルデータ６３７としてメインメモリ１３に記憶される。
【００９８】
なお、他の実施形態においては、第１方向ベクトルＶ１は、直前加速度データと、当該直前加速度データより前に取得された１以上の加速度データとに基づいて算出されてもよい。例えば、第１方向ベクトルＶ１は、直前加速度データと、当該直前加速度データより１つ前および２つ前に取得された加速度データとに基づいて算出されてもよい。このとき、ＣＰＵ１０は、これら３つの加速度データに対応する３つの加速度ベクトルの終点に関する近似直線を算出し、当該近似直線の傾きを示すベクトルを第１方向ベクトルとする。
【００９９】
ステップＳ３６において、ＣＰＵ１０は、補助線の制御点を決めるための第２方向ベクトルＶ２を算出する。本実施形態では、第２方向ベクトルは、上記直後加速度データと、当該直後加速度データより１つ後に取得された非限界加速度データとに基づいて算出される。なお、これらの加速度データは、メインメモリ１３に記憶されている選出加速度データ群６３１に含まれている。具体的には、第２方向ベクトルＶ２は、次の式（４）に従って算出される。
Ｖ２＝ＶＡQ −ＶＡQ+1 …（４）
上式（４）において、ベクトルＶＡQ は直後加速度データにより示される加速度ベクトルであり、ベクトルＶＡQ+1 は直後加速度データの１つ後に取得された非限界加速度データにより示される加速度ベクトルである。上式（４）のように、第２方向ベクトルは、直後加速度データにより示される加速度ベクトルから、当該直後加速度データの１つ後に取得された非限界加速度データにより示される加速度ベクトルを減算したベクトルとして算出される。したがって、図１５の例においては、第２方向ベクトルＶ２は、点ｐ９を始点とし、点ｐ８を終点とするベクトルとなる。以上のように算出された第２方向ベクトルを示すデータは、第２方向ベクトルデータ６３８としてメインメモリ１３に記憶される。なお、他の実施形態においては、第２方向ベクトルＶ２は、第１方向ベクトルと同様、直後加速度データと、当該直後加速度データより後に取得された１以上の加速度データとに基づいて算出されてもよい。
【０１００】
ステップＳ３７において、ＣＰＵ１０は、補助線の制御点を決めるための突出量ｎを算出する。突出量ｎは、メインメモリ１３に記憶されている選出加速度データ群６３１に含まれる限界加速度データ群６３１’に基づいて算出される。具体的には、突出量ｎは、ステップＳ３１で選出された限界加速度データ群６３１’に含まれる限界加速度データの数に設定される。なお、詳細は後述するが、突出量ｎは、補助線の形状に影響を与える。具体的には、突出量ｎの値が大きくなるほど、補助線が突出する度合いが大きくなる。
【０１０１】
続くステップＳ３８において、ＣＰＵ１０は、補助線の各制御点Ｐ０〜Ｐ３を決定する。図１８は、決定される各制御点および補助線の一例を示す図である。図１８においては、ｘｙ座標系の領域のうち、図１５に示す点ｐ３〜点ｐ９が含まれる領域を特に示している。図１８に示すように、ベジェ曲線の４つの制御点のうち、一方の端点である第１制御点Ｐ０は、上記直前加速度データにより示される加速度ベクトルを表す点ｐ４の位置に決定される。決定された第１制御点Ｐ０を示すデータは、第１制御点データ６３３としてメインメモリ１３に記憶される。また、他方の端点である第４制御点Ｐ３は、上記直後加速度により示される加速度ベクトルを表す点ｐ８の位置に決定される。決定された第４制御点Ｐ３を示すデータは、第４制御点データ６３６としてメインメモリ１３に記憶される。
【０１０２】
また、ベジェ曲線の４つの制御点のうち、一方の方向点である第２制御点Ｐ１は、第１方向ベクトルＶ１、第３方向ベクトルＶ３、突出量ｎ、および第１制御点Ｐ０に基づいて決定される。具体的には、ＣＰＵ１０は、次の式（５）に従って第２制御点Ｐ１の位置を算出する。
Ｐ１＝Ｐ０＋（Ｖ１＋Ｖ３×Ｋ０）×ｎ×Ｋ１  …（５）
上式（５）において、定数Ｋ０および定数Ｋ１は、適宜の値に予め定められるスカラー値である。算出された第２制御点Ｐ１を示すデータは、第２制御点データ６３４としてメインメモリ１３に記憶される。図１８に示すように、第２制御点Ｐ１は、図１８のベクトルＶ４の方向に、ベクトルＶ４の長さだけ第１制御点Ｐ０の位置を移動させた位置となる。なお、ベクトルＶ４は、第１方向ベクトルＶ１および第３方向ベクトルＶ３を成分とし、突出量ｎに応じた長さとなるベクトルである。
【０１０３】
また、ベジェ曲線の４つの制御点のうち、他方の方向点である第３制御点Ｐ２は、第２方向ベクトルＶ２、第３方向ベクトルＶ３、突出量ｎ、および第４制御点Ｐ３に基づいて決定される。具体的には、ＣＰＵ１０は、次の式（６）に従って第３制御点Ｐ２の位置を算出する。
Ｐ２＝Ｐ３＋（Ｖ２＋Ｖ３×Ｋ０）×ｎ×Ｋ１  …（６）
上式（６）によって算出された第３制御点Ｐ２を示すデータは、第３制御点データ６３５としてメインメモリ１３に記憶される。図１８に示すように、第３制御点Ｐ２は、図１８のベクトルＶ５の方向に、ベクトルＶ５の長さだけ第４制御点Ｐ３の位置を移動させた位置となる。なお、ベクトルＶ５は、第２方向ベクトルＶ２および第３方向ベクトルＶ３を成分とし、突出量ｎに応じた長さとなるベクトルである。以上によって、補助線であるベジェ曲線を決定するための各制御点Ｐ０〜Ｐ３が決定される。
【０１０４】
なお、他の実施形態においては、図１８に示すベクトルＶ４は、第１方向ベクトルＶ１および第３方向ベクトルＶ３のいずれか一方のみに基づいて算出されてもよい。また、図１８に示すベクトルＶ５は、第２方向ベクトルＶ２および第３方向ベクトルＶ３のいずれか一方のみに基づいて算出されてもよい。
【０１０５】
続くステップＳ３９において、ＣＰＵ１０は、メインメモリ１３に記憶されている各制御点データ６３３〜６３６に基づいて補助線を決定する。具体的には、上式（１）に各制御点Ｐ０〜Ｐ３の値を代入することによって、補助線であるベジェ曲線を表す関数が決定される。決定された関数を示すデータは、補助線データ６３２としてメインメモリ１３に記憶される。
【０１０６】
図１８に示す例においては、各制御点Ｐ０〜Ｐ３によって決定される補助線は曲線Ｌのようになる。具体的には、制御点Ｐ０における補助線Ｌの傾きは、制御点Ｐ０と制御点Ｐ１とを結ぶ線分の傾きとなり、制御点Ｐ３における補助線Ｌの傾きは、制御点Ｐ３と制御点Ｐ２とを結ぶ線分の傾きとなる。また、制御点Ｐ０から制御点Ｐ１までの距離が長いほど、補助線Ｌの長さは長くなり、加速度センサ３７が検出可能な範囲を示す領域Ａから最も離れた補助線Ｌ上の点Ｂから当該領域Ａまでの距離が大きくなる。同様に、制御点Ｐ３から制御点Ｐ２までの距離が長いほど、補助線Ｌの長さは長くなり、上記点Ｂから領域Ａまでの距離が大きくなる。
【０１０７】
続くステップＳ４０において、ＣＰＵ１０は、メインメモリ１３に記憶されている補助線データ６３２に基づいて、限界加速度データ群６３１’の値を補正する。限界加速度データの値は、補助線上の値となるように補正される。すなわち、ＣＰＵ１０は、限界加速度データにより示される加速度ベクトルのｘｙ座標値を、補助線上の座標値となるように補正する。本実施形態では、各限界加速度データの補正後の座標値は、各限界加速度データに対応する各座標位置によって補助線が等分されるように決定される。図１８を例にとって説明すると、限界加速度データに対応する点ｐ５〜ｐ７の補正後の点ｐ５’〜ｐ７’は、各点によって補助線Ｌを４等分する位置に決定される。具体的には、上式（１）において、変数ｕ＝０．２５としたときの変数ｐにより示される位置を点ｐ５’の位置とし、変数ｕ＝０．５としたときの変数ｐにより示される位置を点ｐ６’の位置とし、上式（１）において変数ｕ＝０．７５としたときの変数ｐにより示される位置を点ｐ７’の位置とする。なお、補正後の座標は補助線Ｌ上に設定されればよく、補助線Ｌは、領域Ａ内の制御点Ｐ０から領域Ａ外を通って領域Ａ内の制御点Ｐ３までを結ぶ曲線であるので、補正後の点ｐ５’〜ｐ７’は領域Ａ内の位置となり得る。ステップＳ４０において、メインメモリ１３に記憶されている限界加速度データ群６３１’の内容は、補正後の内容に書き換えられる。
【０１０８】
なお、図１８に示した補正方法によれば、各限界加速度データの補正後の各座標値を補助線上にバランス良く配置することができる。加速度データが限界値をとっている間における実際の加速度の間隔がほぼ一定であると想定できる場合には、図１８に示す補正方法が有効である。なお、補助線に従って行われる限界加速度データの補正方法は、上記補正方法に限らず、限界加速度データのｘｙ座標値を、補助線上の座標値となるように補正するものであればどのようなものであってもよい。図１９は、限界加速度データの補正方法の他の一例を示す図である。図１９に示す方法では、限界加速度データのｘ座標値のみが補正され、ｙ座標値については補正が行われない。このように、他の実施形態においては、限界加速度データの各成分のうちで限界値をとっている成分（図１９では、ｘ成分）についてのみ加速度値を補正するようにしてもよい。限界値をとっている成分以外の他の成分の加速度値が信頼できるものであると想定できる場合には、図１９に示す方法が有効である。
【０１０９】
ステップＳ４１において、ＣＰＵ１０は、全ての限界加速度データを補正したか否かを判定する。ステップＳ３１で選出されていない限界加速度データが残っている場合、補正していない限界加速度データがあると判断され、補正していない限界加速度データに関して、ステップＳ３１の処理が再度実行される。一方、ステップＳ３１で全ての限界加速度データが選出されている場合、全ての限界加速度データを補正したと判断され、ＣＰＵ１０は、図１７に示すデータ補正処理を終了する。
【０１１０】
以上に説明したデータ補正処理においては、補助線Ｌが算出され、加速度データにより示されるｘｙ座標が補助線Ｌ上の位置となるように加速度データの値が補正される。つまり、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移は、補助線Ｌによって推定される。これによって、上記移動期間全体における加速度の推移をより正確に知ることができ、選出加速度データ群６３１の値をより正確なものに補正することができる。
【０１１１】
また、上記実施形態においては、補助線（ベジェ曲線）Ｌの第１制御点Ｐ０における傾き（図１８に示すベクトルＶ４）は、第１方向ベクトルＶ１および第３方向ベクトルＶ３に基づいて算出される（上式（５）参照）。補助線（ベジェ曲線）Ｌの第４制御点Ｐ３における傾き（図１８に示すベクトルＶ５）は、第２方向ベクトルＶ２および第３方向ベクトルＶ３に基づいて算出される（上式（６）参照）。ここで、上記ステップＳ３５からわかるように、第１方向ベクトルＶ１は、加速度データが限界値をとる直前における加速度データの値の推移を示している。第２方向ベクトルＶ２は、加速度データが限界値をとる直後における加速度データの値の推移を示している。したがって、第１および第２方向ベクトルＶ１およびＶ２を反映して補助線Ｌの端点における傾きを決定することによって、限界値をとる前後における加速度データの値の推移を示す曲線と、補助線Ｌとをスムーズに（傾きの変化が連続するように）接続することができる。これによって、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移を、より実際の推移に近くなるように正確に推定することができる。
【０１１２】
また、図１５に示すように、第３方向ベクトルＶ３は、移動期間全体における加速度の推移を示している。したがって、第３方向ベクトルＶ３を反映して補助線Ｌの端点における傾きを決定することによって、移動期間中における加速度の全体的な推移傾向を反映するように当該傾きを決定することができる。これによって、限界値の範囲を超えたために実際の値を検出できなかった期間における加速度の推移を、より実際に近くなるように正確に推定することができる。例えば、第１および第２方向ベクトルＶ１およびＶ２のみに基づいて補助線Ｌの傾きを決定する方法においては、上記直前加速度データまたは直後加速度データの値が何らかの理由で不正確な値や不規則な値の場合、補助線Ｌを正確に推定することができなくなるおそれがある。これに対して、さらに第３方向ベクトルＶ３に基づいて補助線Ｌの傾きを決定することによって、加速度データのうちのいくつかが不正確な値や不規則な値を示す場合でも補助線Ｌを正確に推定することができる。
【０１１３】
さらに、上記実施形態においては、限界加速度データの数に応じて突出量ｎを算出し（ステップＳ３７）、第２および第３制御点を突出量ｎに基づいて決定する（上式（５）および上式（６））。上式（５）および上式（６）より、第２および第３制御点の位置は、突出量ｎの値が大きいほど、限界値の範囲を示す領域Ａから遠ざかる。つまり、領域Ａから最も離れた補助線Ｌ上の点Ｂから当該領域Ａまでの距離は、突出量ｎの値が大きいほど大きくなる。ここで、突出量ｎの値が大きいことは、限界加速度データの数が多いことを意味し、限界値の範囲を超えたために実際の値を検出できなかった期間が長いことを意味する。当該期間中における実際の加速度の値は、当該期間の長さに応じて大きくなると考えられる。したがって、補助線Ｌの点Ｂから領域Ａまでの距離を突出量ｎに応じて長くすることによって、加速度の実際の推移により近い補助線を算出することができる。
【０１１４】
図１６の説明に戻り、ステップＳ２２の次に、ステップＳ２３およびＳ２４において、補正後の選出加速度データ群６３１から移動方向ベクトルＶｍが算出される。移動方向ベクトルＶｍを算出する処理は、上記ステップＳ３２の処理と同様の演算である。つまり、ＣＰＵ１０は、上式（２）に基づいてｘｙ座標系における２次元ベクトルを算出する。ステップＳ２２が上記ステップＳ３２と異なる点は、それに含まれる限界加速度データ群６３１’が補正された選出加速度データ群６３１を用いて上式（２）の計算が行われる点である。補正後の選出加速度データ群６３１を用いることによって、移動方向ベクトルＶｍを正確に算出することができる。
【０１１５】
具体的には、まずステップＳ２３において、補正後の選出加速度データ群６３１から差分ベクトル群が算出される。ＣＰＵ１０は、選出加速度データ群６３１に含まれる各加速度データについて、加速度データにより示される加速度ベクトルと、その次に取得された加速度データにより示される加速度ベクトルとの差分（差分ベクトル）を加速度データ毎に算出する。なお、上式（２）の“（ＶＡt+1 −ＶＡt ）”がこの差分ベクトルに相当する。ステップＳ２３で算出された各差分ベクトルを示すデータは、差分ベクトルデータ群６４０としてメインメモリ１３に記憶される。次に、ステップＳ２４において、ＣＰＵ１０は、メインメモリ１３に記憶されている差分ベクトルデータ群６４０に基づいて、移動方向ベクトルを算出する。すなわち、各差分ベクトルに対して差分ベクトルの大きさに応じた重み付けを行って当該各差分ベクトルの総和が算出される。なお、上式（２）の“｜ＶＡt+1 −ＶＡt ｜”が各差分ベクトルに付される重みに相当する。また、上式（２）で算出された移動方向ベクトルＶｍは正規化される。すなわち、長さが“１”に補正される。以上の処理によって算出された移動方向ベクトルＶｍを示すデータは、移動方向データ６４１としてメインメモリ１３に記憶される。
【０１１６】
次に、ステップＳ２５において、補正後の選出加速度データ群６３１に基づいて重力方向ベクトルＶｇが算出される。具体的には、ＣＰＵ１０は、次の式（７）に従って重力方向ベクトルＶｇを算出する。
【数２】
2007295990.tif 000004
上式（７）に示すように、重力方向ベクトルＶｇは、選出加速度データ群６３１に含まれる加速度ベクトルＶＡの総和として算出される。また、上式（７）で算出された重力方向ベクトルＶｇは正規化される、すなわち、長さが“１”に補正される。以上の処理によって算出された重力方向ベクトルＶｇを示すデータは、重力方向データ６４２としてメインメモリ１３に記憶される。以上のように算出された重力方向ベクトルＶｇは、ｘｙ座標系における原点を基準点としたとき、選出加速度データ群６３１に含まれる各加速度ベクトルの、基準点に対する偏りを示している。本実施形態では、この偏りを算出することによって重力方向を算出している。なお、上記偏りは、加速度ベクトルＶＡの総和を算出する方法に代えて他の方法によって算出されてもよい。
【０１１７】
続くステップＳ２６において、ＣＰＵ１０は、メインメモリ１３に記憶されている移動方向データ６４１および重力方向データ６４２に基づいて、振り方向ベクトルを算出する。上述したように、振り方向ベクトルとは、重力方向に対してコントローラ７が移動する方向を示すベクトルである。具体的には、ＣＰＵ１０は、重力方向ベクトルＶｇが予め定められた基準方向を向くように、移動方向ベクトルＶｍおよび重力方向ベクトルＶｇに対して共に回転処理を行う。そして、回転させた移動方向ベクトルＶｍを振り方向ベクトルＶｓとする。なお、振り方向ベクトルＶｓは、重力方向を基準とした方向を表すためのＸＹ座標系で表現されるのに対して、移動方向ベクトルＶｍおよび重力方向ベクトルＶｇは、コントローラ７の向きを基準としたｘｙ座標系で表現される。したがって、上記回転処理はｘｙ座標系からＸＹ座標系への座標変換として行われる。具体的には、ＣＰＵ１０は、次の式（８）に従って振り方向ベクトルＶｓ＝（ＳＸ，ＳＹ）を算出する。
ＳＸ＝−ｇｙ×ｍｘ＋ｇｘ×ｍｙ
ＳＹ＝−ｇｘ×ｍｘ−ｇｙ×ｍｙ  …（８）
上式（８）においては、移動方向ベクトルＶｍを（ｍｘ、ｍｙ）とし、重力方向ベクトルＶｇを（ｇｘ、ｇｙ）とする。なお、本実施形態では、ＸＹ座標系は、コントローラ７の上面が鉛直上向きとなる時の重力方向をＹ軸負方向とする直交座標系である。したがって、ＸＹ座標系における上記基準方向は、Ｙ軸負方向の向きである。
【０１１８】
図２０は、ｘｙ座標系における移動方向ベクトルＶｍおよび重力方向ベクトルＶｇを示す図である。また、図２１は、ＸＹ座標系における振り方向ベクトルを示す図である。例えば、図２０に示す移動方向ベクトルＶｍおよび重力方向ベクトルＶｇが算出された場合、ＣＰＵ１０は、重力方向ベクトルＶｇがＹ軸負方向の向きとなるように、移動方向ベクトルＶｍおよび重力方向ベクトルＶｇを共に回転させる座標変換を行う。図２１に示すように、回転させられた後（座標変換後）の移動方向ベクトルＶｍが振り方向ベクトルＶｓとなる。
【０１１９】
以上のようにして得られた振り方向ベクトルＶｓを示すデータは、振り方向データ６４３としてメインメモリ１３に記憶される。ステップＳ２６の後、ＣＰＵ１０は振り方向算出処理を終了する。なお、本実施形態では振り方向をベクトルを用いて表現したが、他の実施形態では振り方向を角度で表現してもよい。例えば、振り方向は、移動方向ベクトルＶｍと重力方向ベクトルＶｇとのなす角の大きさとして表されてもよい。
【０１２０】
図１５の説明に戻り、ステップＳ８の次にステップＳ９の処理が実行される。すなわち、ステップＳ９において、ＣＰＵ１０は、ステップＳ８で算出された振り方向に応じたゲーム処理を実行する。具体的には、振り方向に応じた方向に剣オブジェクト５２が移動するアニメーションをモニタ２に表示させる（図１１参照）。また、ＣＰＵ１０は、ゲーム空間内において剣オブジェクト５２を移動させた結果、剣オブジェクト５２が丸太オブジェクト５１と接触したか否かを判断する。そして、剣オブジェクト５２が丸太オブジェクト５１と接触した場合、剣オブジェクト５２の軌道に沿って丸太オブジェクト５１が切断された様子を表示する（図１１参照）。また、図１５に示すフローチャートには示していないが、丸太オブジェクト５１が切断された場合には、切断された丸太オブジェクト５１が所定時間表示された後、新たな丸太オブジェクト５１が表示されるようにしてもよい。また、丸太オブジェクト５１をゲーム空間内において移動させるようにしてもよい。
【０１２１】
続くステップＳ１０において、操作フラグがオフに設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている操作フラグデータ６４４の内容をオフを示すデータに書き換える。これによって、ステップＳ２〜Ｓ１１のループ処理が次に行われるときにはステップＳ３の判定結果が否定となる。なお、ステップＳ９においては、メインメモリ１３に記憶されている各データ６３１〜６４３の内容がクリアされる。
【０１２２】
続くステップＳ１１において、ＣＰＵ１０はゲームを終了するか否かを判定する。ステップＳ１１の判定は、例えば、プレイヤがゲームを終了する指示を行ったか否かや、プレイヤがゲームをクリアしたか否かや、ゲームに制限時間が設けられている場合には当該制限時間が経過したか否かによって行われる。ステップＳ１１の判定結果が否定である場合、ステップＳ２の処理が再度実行され、以降、ゲームを終了すると判定されるまでステップＳ２〜Ｓ１１の処理ループが実行される。一方、ステップＳ１１の判定結果が肯定である場合、ＣＰＵ１０は図１４に示す処理を終了する。以上で、ゲーム装置３における処理の説明を終了する。
【０１２３】
以上のように、本実施形態によれば、コントローラ７から加速度データを取得し（ステップＳ１２）、取得した加速度データから、移動方向ベクトルＶｍおよび重力方向ベクトルＶｇという２種類のベクトルが算出される（ステップＳ２３〜Ｓ２５）。このように、本実施形態では、センサによって検出された１種類の情報から、コントローラ７の状態を示す２種類の情報を得ることができる。そして、ゲーム装置３は、これら２種類の情報をゲーム操作に反映してゲーム処理を行う（ステップＳ９）。これによって、センサが１つという簡易な構成でありながら、コントローラ７の２種類の状態に基づいた複雑なゲーム操作をプレイヤに行わせることが可能となる。
【０１２４】
また、本実施形態によれば、加速度データの値が限界値となる場合には、上記補助線を用いて限界加速度データ群の値が補正される（ステップＳ２２）。つまり、ゲーム装置３は、加速度センサ３７が実際の加速度値を検出できない場合には、補助線を用いて実際の加速度値を推定する。これによって、実際の加速度値が限界値を超える場合であっても、実際の加速度値を正確に算出することができる。ひいては、算出した加速度値を用いてコントローラ７の状態（例えば、振り方向）を算出する場合に、コントローラ７の状態をより正確に算出することができる。
【０１２５】
また、上記実施形態においては、ゲーム装置３は、移動期間中に検出される各加速度ベクトルの総和を算出することによって重力方向を算出する（ステップＳ２５）。ここで、移動期間中に検出される加速度ベクトルには、コントローラ７に加わる重力に起因する成分に加えて、コントローラ７の移動に起因する成分が含まれるので、移動期間中においては、検出される加速度そのものでは重力方向を正確に認識することができない。これに対して、本実施形態では、移動期間中に検出される各加速度ベクトルの総和を算出するので、各加速度ベクトルにおけるコントローラ７の移動に起因する成分を相殺し、常に検出されている、重力に起因する成分のみを抽出することができる。これは、特にゲームの場合にはプレイヤの１つの動作がどの様な動作であるかを認識することが重要であることからその動作の開始と終了があることに着目したものである。したがって、ステップＳ２５の処理によって、コントローラ７の移動を伴うプレイヤの１つの動作における当該コントローラに対する重力方向を認識することができる。
【０１２６】
また、上記実施形態においては、ゲーム装置３は、選出加速度データ群６３１の値の推移を示す差分ベクトルに基づいて移動方向ベクトルを算出する。具体的には、ゲーム装置３は、選出加速度データ群６３１について差分ベクトルを算出し、差分ベクトルに所定の重みを付けて総和を算出することによって、移動方向ベクトルを算出する（ステップＳ２３およびＳ２４）。所定の重みは、差分ベクトルの大きさに応じた値に設定される（上式（２））。差分ベクトルが大きい部分は、素早い振りが行われているということであって、振りの動きの特徴的な部分であるので、選出加速度データ群６３１から算出される各差分ベクトルのうちで大きさが大きい差分ベクトルを特徴的な部分として高く評価することによって、コントローラ７の移動方向を算出することができる。
【０１２７】
なお、移動方向を算出する方法としては、（重みを付けずに）単に差分ベクトルの総和を算出する方法も考えられる。この方法では、差分ベクトルの総和は、上記移動期間の開始時点における加速度ベクトルのｘｙ座標値を始点とし、終了時点における加速度ベクトルのｘｙ座標値を終点とするベクトルとなる。図１５に示す例で言えば、差分ベクトルの総和は、点ｐ０を始点とし、点ｐ１９を終点とするベクトルとなる。上記移動期間の開始時点および終了時点の検出の仕方によっては、上記方法によってもコントローラ７の移動方向を算出することが可能である。
【０１２８】
なお、上記方法では、移動方向を正確に認識できないおそれがある点に留意する。例えば、上記移動期間の開始時点における加速度ベクトルと終了時点における加速度ベクトルとがほぼ同じ値となる場合には、移動方向を正確に認識できないおそれがある。開始時点における加速度ベクトルと終了時点における加速度ベクトルとが同じ値になれば、差分ベクトルの総和は「０」になるからである。図１５に示した例では、開始時点における加速度ベクトル（点ｐ１）と終了時点における加速度ベクトル（点ｐ１９）とが大きく離れている。しかし、第１および第２閾値の設定の仕方によっては、開始時点における加速度ベクトルと終了時点における加速度ベクトルとがほぼ同じ値となることがある。２つの加速度ベクトルがほぼ同じ値になれば、差分ベクトルの総和を示すベクトルの方向は、必ずしも移動方向に応じた方向とはならない。
【０１２９】
そこで、上記実施形態では、差分ベクトルに所定の重みを付けて総和を算出している。これによって、仮に上記２つのベクトルが同じ値になっても、総和を示すベクトルは「０」にはならず、各差分ベクトルのうち、特徴的な部分である大きさが大きい差分ベクトルの成分が大きく反映されるように当該総和によって表される。すなわち、当該総和を示すベクトルはコントローラ７の移動方向を表すものとなる。以上より、上記ステップＳ２５においては、重みを付けずに単に差分ベクトルの総和を算出するようにしてもよいが、上記重みを付けて総和を算出することが好ましい。
【０１３０】
（補助線に関する変形例）
なお、上記実施形態では、加速度データを補正するための補助線として、ベジェ曲線を用いることとした。ここで、他の実施形態においては、補助線はベジェ曲線に限らず、加速度データが限界値をとる間における実際の加速度値を推測するものであればよい。すなわち、補助線は、加速度センサ３７の検出範囲外を通る線であればよい。なお、補助線は、その全てが当該検出範囲外を通る必要はなく、その少なくとも一部が当該検出範囲外を通るものであればよい。
【０１３１】
例えば、上記補助線として、ベジェ曲線に代えて、カージナルスプライン曲線やＢスプライン曲線を用いてもよい。これらの曲線は、１以上の制御点を含む関数によって表される。このような関数によって表される曲線を用いる場合、制御点を決めることによって複雑な曲線の形状を決定することができるので、複雑な曲線によって加速度の推定を詳細に行うことができるとともに、曲線を容易に算出することができる。
【０１３２】
また、上記補助線は、曲線に限らず、複数の線分からなる折れ線によって構成されてもよい。図２２は、補助線の他の例を示す図である。図２２においては、補助線Ｌ’は、線分Ｌ１および線分Ｌ２によって構成される。線分Ｌ１は、上記直前加速度データの点ｐ４と当該直前加速度データの１つ前に取得された加速度データの点ｐ３とを結ぶ線分を点ｐ４の外側へ延ばした線分である。線分Ｌ２は、上記直後加速度データの点ｐ８と当該直後加速度データの１つ後に取得された加速度データの点ｐ９とを結ぶ線分を点ｐ８の外側へ延ばした線分である。上記補助線Ｌ’を用いる場合には、上記のような制御点によって決められる曲線を用いる場合に比べて、補助線を算出する処理を簡易化することができる。なお、上記線分Ｌ１の傾きは、上記第１方向ベクトルＶ１によって決められても良いし、上記線分Ｌ２の傾きは、上記第２方向ベクトルＶ２によって決められても良い。
【０１３３】
（加速度データの次数に関する変形例）
上記実施形態においては、２次元の加速度ベクトルを用いる場合を例として詳細な処理を説明したが、他の実施形態においては、加速度データにより示される加速度は３次元の加速度値であってもよいし、１次元の加速度値に対しても適用可能である。３次元の加速度ベクトルを用いる場合には、上記２次元のｘｙ座標系の場合に準じて、３次元のｘｙｚ座標系において補助線を算出することができる。
【０１３４】
また、１次元の加速度値を用いる場合には、加速度データにより示される加速度値と時間とを各軸とする２次元座標を用いることにより、上記２次元のｘｙ座標系の場合と同様にして補助線を算出することができる。図２３は、１次元の加速度値を用いる場合における座標系を示す図である。図２３に示す座標系は、横軸が時間（ｔ）を表し、縦軸が加速度値（ｓ）を表す。点ｑ１〜点ｑ９は、加速度センサによって検出される加速度を示している。図２３に示す点線Ｃは、加速度センサの検出可能な範囲の限界値を示している。
【０１３５】
図２３においては、点ｑ３〜点ｑ７が限界値を示している。このとき、ゲーム装置３は、上記実施形態と同様の方法で補助線Ｌを算出し、補助線Ｌ上の値となるように点ｑ３〜点ｑ７の加速度値を補正する。なお、上記実施形態における変数ｘを変数ｔに置き換え、変数ｙを変数ｓに置き換えれば、上記実施形態と同様の方法で補助線Ｌを算出することができる。なお、図２３に示す点ｑ３’〜点ｑ７’は、補正後の加速度値を示している。以上のように補正した加速度データ群を用いてコントローラ７の状態を算出することによって、補正前の加速度データ群を用いてコントローラ７の状態を算出する場合に比べて、正確に算出を行うことができ、１軸に関する加速度に関しても、加速度の推移をより正確に算出することができる。
【産業上の利用可能性】
【０１３６】
以上のように、本発明は、入力装置の移動方向を詳細に算出すること等を目的として、例えばゲーム装置またはゲームプログラムとして利用することが可能である。
【図面の簡単な説明】
【０１３７】
【図１】本発明の一実施形態に係るゲーム装置を含むゲームシステムの外観図
【図２】ゲーム装置３の機能ブロック図
【図３Ａ】コントローラ７の斜視図
【図３Ｂ】コントローラ７の斜視図
【図４】コントローラ７を前方から見た図
【図５Ａ】コントローラ７の内部構造を示す図
【図５Ｂ】コントローラ７の内部構造を示す図
【図６】コントローラ７の構成を示すブロック図
【図７】コントローラ７の傾きと加速度センサの出力との関係を示す図
【図８】コントローラ７の傾きと加速度センサの出力との関係を示す図
【図９】コントローラ７を用いてゲーム操作を行うときの状態を概説する図解図
【図１０】本実施形態においてモニタ２に表示されるゲーム画面の一例を示す図
【図１１】本実施形態においてモニタ２に表示されるゲーム画面の一例を示す図
【図１２】ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図
【図１３】選出加速度データ群６３１の一例を示す図
【図１４】ゲーム装置３において実行される処理の流れを示すメインフローチャート
【図１５】ある期間の間にステップＳ２で取得された加速度データの推移を示す図
【図１６】図１４に示す振り方向算出処理（ステップＳ８）の詳細を示すフローチャート
【図１７】図１６に示すデータ補正処理（ステップＳ２２）の詳細を示すフローチャート
【図１８】決定される各制御点および補助線の一例を示す図
【図１９】限界加速度データの補正方法の他の一例を示す図
【図２０】ｘｙ座標系における移動方向ベクトルＶｍおよび重力方向ベクトルＶｇを示す図
【図２１】ＸＹ座標系における振り方向ベクトルＶｓを示す図
【図２２】補助線の他の例を示す図
【図２３】１次元の加速度値を用いる場合における座標系を示す図
【符号の説明】
【０１３８】
１  ゲームシステム
２  モニタ
３  ゲーム装置
４  光ディスク
５  外部メモリカード
７  コントローラ
８ａ，８ｂ  マーカ
１０  ＣＰＵ
１３  メインメモリ
３２  操作部
３５  撮像情報演算部
３６  通信部
３７  加速度センサ
４０  撮像素子
５１  丸太オブジェクト
５２  剣オブジェクト
６１  ゲームプログラム
【図１】
2007295990.tif 000005
【図２】
2007295990.tif 000006
【図３Ａ】
2007295990.tif 000007
【図３Ｂ】
2007295990.tif 000008
【図４】
2007295990.tif 000009
【図５Ａ】
2007295990.tif 000010
【図５Ｂ】
2007295990.tif 000011
【図６】
2007295990.tif 000012
【図７】
2007295990.tif 000013
【図８】
2007295990.tif 000014
【図９】
2007295990.tif 000015
【図１０】
2007295990.tif 000016
【図１１】
2007295990.tif 000017
【図１２】
2007295990.tif 000018
【図１３】
2007295990.tif 000019
【図１４】
2007295990.tif 000020
【図１５】
2007295990.tif 000021
【図１６】
2007295990.tif 000022
【図１７】
2007295990.tif 000023
【図１８】
2007295990.tif 000024
【図１９】
2007295990.tif 000025
【図２０】
2007295990.tif 000026
【図２１】
2007295990.tif 000027
【図２２】
2007295990.tif 000028
【図２３】
2007295990.tif 000029