(57)【要約】【課題】加速度センサを備えた入力装置を用いた操作入力において、当該入力装置の姿勢に対する自由度の高い操作を実現しながら当該入力装置の動きを判別することができる動き判別装置および動き判別プログラムを提供する。【解決手段】入力装置に備えられた加速度センサから出力される少なくとも２軸方向の加速度を示す加速度データを取得する。加速度データの推移に基づいて、入力装置に作用する重力加速度の方向を基準としたその入力装置の動き方向を判別する。判別された動き方向を少なくとも含む動きデータを出力する。【選択図】図９
2008269650.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２軸方向の加速度を検出する加速度センサを備えた入力装置の動きを判別する動き判別装置であって、
前記加速度センサから出力される加速度データを取得するデータ取得手段と、
前記データ取得手段によって取得された加速度データの推移に基づいて、前記入力装置に作用する重力加速度の方向を基準とした当該入力装置の動き方向を判別する動き方向判別手段と、
前記動き方向判別手段によって判別された動き方向を少なくとも含む動きデータ出力を出力する出力手段とを備える、動き判別装置。
【請求項２】
前記動き方向判別手段は、前記加速度データの２軸方向成分に基づいてそれぞれ座標軸が定義される２次元座標系において、前記入力装置に作用する重力加速度の方向を基準として前記加速度データが時系列的に推移する方向を判定する推移方向判定手段を含み、
前記動き方向判別手段は、前記推移方向判定手段が判定した推移方向に基づいて、前記入力装置に作用する重力加速度に対する当該入力装置の移動方向を判別し、
前記出力手段は、前記動き方向判別手段によって判別された移動方向を少なくとも含む動きデータを出力する、請求項１に記載の動き判別装置。
【請求項３】
前記加速度センサは、前記入力装置をユーザが把持して振ったときに生じる遠心力成分を少なくとも含む加速度を検出して前記加速度データを出力し、
前記動き方向判別手段は、前記データ取得手段によって取得された加速度データの推移のうち、前記遠心力成分の加速度が閾値を超えている期間に取得した加速度データを用いて前記入力装置の動き方向を判別する、請求項１に記載の動き判別装置。
【請求項４】
少なくとも２軸方向の加速度を検出する加速度センサを備えた入力装置の動きを判別する動き判別装置のコンピュータで実行される動き判別プログラムであって、
前記コンピュータに、
前記加速度センサから出力される加速度データを取得するデータ取得ステップと、
前記データ取得ステップで取得された加速度データの推移に基づいて、前記入力装置に作用する重力加速度の方向を基準とした当該入力装置の動き方向を判別する動き方向判別ステップと、
前記動き方向判別ステップで判別された動き方向を少なくとも含む動きデータを出力する出力ステップとを実行させる、動き判別プログラム。
【請求項５】
前記動き方向判別ステップは、前記加速度データの２軸方向成分に基づいてそれぞれ座標軸が定義される２次元座標系において、前記入力装置に作用する重力加速度の方向を基準として前記加速度データが時系列的に推移する方向を判定する推移方向判定ステップを含み、
前記動き方向判別ステップでは、前記推移方向判定ステップで判定した推移方向に基づいて、前記入力装置に作用する重力加速度に対する当該入力装置の移動方向が判別され、
前記出力ステップでは、前記動き方向判別ステップで判別された移動方向を少なくとも含む動きデータが出力される、請求項４に記載の動き判別プログラム。
【請求項６】
前記加速度センサは、前記入力装置をユーザが把持して振ったときに生じる遠心力成分を少なくとも含む加速度を検出して前記加速度データを出力し、
前記動き方向判別ステップでは、前記データ取得ステップで取得された加速度データの推移のうち、前記遠心力成分の加速度が閾値を超えている期間に取得した加速度データを用いて前記入力装置の動き方向が判別される、請求項４に記載の動き判別プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動き判別装置および動き判別プログラムに関し、より特定的には、加速度センサを備えた入力装置の動きを判別する動き判別装置および動き判別プログラムに関する。
【背景技術】
【０００２】
従来、加速度センサを備えた入力装置をユーザが操作し、当該加速度センサからの出力を利用して当該入力装置の動きを判別する装置が開発されている。例えば、グローブを模したゲームコントローラに３軸加速度センサを備え、当該加速度センサからの出力を利用してゲームを楽しむゲーム装置が開示されている（例えば、特許文献１参照）。
【０００３】
上記特許文献１に開示されたコントローラ（グローブ）は、センサＸ、センサＹ、およびセンサＺを有する３軸加速度センサを備えている。そして、ゲーム装置は、センサＹに対して急激に大きな値が入ってきた場合に、当該センサＹから得た出力波形を遡って値０前後の時点を時点ｔ０とする。そして、上記出力波形において急激に小さな値を得てから、その後に値０前後を得た時点を時点ｔ１とする。一方、時点ｔ０〜ｔ１の期間に検出された加速度をセンサＸおよびセンサＺの出力波形からそれぞれ抽出し、それぞれの成分の出力波形を用いてパンチの種類（例えば、ストレート、フック、アッパー等）を判定している。具体的には、上記ゲーム装置は、センサＸからの出力波形が若干正の値を示し、センサＺからの出力波形の変化がないとき、プレイヤがストレートパンチを放ったと判定する。また、上記ゲーム装置は、センサＸが動作開始時にその出力波形が負の値を示した後に正の値を示し、センサＺからの出力波形の変化がないとき、プレイヤがフックパンチを放ったと判定する。さらに、上記ゲーム装置は、センサＸからの出力波形が不定形を示し、センサＺからの出力波形が大きな負の値を示した後に正の値を示したとき、プレイヤがアッパーパンチを放ったと判定する。
【特許文献１】特開２００２−１５３６７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１に開示されたゲーム装置は、センサＸおよびセンサＺそれぞれの出力波形に対応付けてパンチの種類の判定を行っているので、それぞれのセンサの加速度検出方向に対する動きを動き判別の基準としている。つまり、パンチの種類の判定は、グローブ（コントローラ）の向き（姿勢）に依存する。したがって、プレイヤが装着するグローブの向きが変わると、正常な判定ができない。例えば、プレイヤがグローブを上下反対や左右反対に装着した場合等には、プレイヤが同じパンチを放ったとしても正確な判定ができなくなる。つまり、グローブの姿勢の影響を大きく受ける。さらに、ゲームコントローラは、上下方向の区別なくプレイヤが手に持つことができる形状であることが一般的であり、このようなゲームコントローラに３軸加速度センサを備えた場合、さらに上述した課題が顕著となる。このように、プレイヤが正確な判定を得るためには、コントローラを持つ方向（コントローラの姿勢）に対する自由度が低くなってしまう。
【０００５】
それ故に、本発明の目的は、加速度センサを備えた入力装置を用いた操作入力において、当該入力装置の姿勢に対する自由度の高い操作を実現しながら当該入力装置の動きを判別することができる動き判別装置および動き判別プログラムを提供することである。
【課題を解決するための手段】
【０００６】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００７】
第１の発明は、少なくとも２軸方向（ＸおよびＹ軸方向）の加速度を検出する加速度センサ（７０１）を備えた入力装置（７）の動きを判別する動き判別装置（３）である。動き判別装置は、データ取得手段（ＣＰＵ３０が実行するＳ６１、Ｓ６４、Ｓ７７、Ｓ９２；以下、ステップ番号のみを示す）、動き方向判別手段（Ｓ７１、Ｓ１０１、Ｓ１０２、Ｓ１０３）、および出力手段（Ｓ７５、Ｓ７６、Ｓ９１、Ｓ９４、Ｓ１０４、Ｓ１０６、Ｓ１０９）を備える。データ取得手段は、加速度センサから出力される加速度データ（Ｄａ）を取得する。動き方向判別手段は、データ取得手段によって取得された加速度データの推移（図９〜図１２、図１４）に基づいて、入力装置に作用する重力加速度の方向を基準としたその入力装置の動き方向を判別する。出力手段は、動き方向判別手段によって判別された動き方向を少なくとも含む動きデータ（Ｄｃ、Ｄｄ、Ｄｊ、Ｄｌ）を出力する。
【０００８】
第２の発明は、上記第１の発明において、動き方向判別手段は、推移周回方向判定手段（Ｓ６６、Ｓ７１）を含む。推移周回方向判定手段は、加速度データの２軸方向成分に基づいてそれぞれ座標軸（Ｘ軸、Ｙ軸）が定義され、重力加速度を含む加速度が加速度センサに作用していない状態の加速度データの値を原点とする２次元座標系（Ｘ−Ｙ座標系）において、その原点を軸として加速度データが時系列的に推移する周回方向（右回り、左回り）を判定する（図９〜図１２）。動き方向判別手段は、推移周回方向判定手段が判定した周回方向に基づいて、入力装置が移動した方向（左振り、右振り）を判別する。出力手段は、動き方向判別手段によって判別された移動方向を少なくとも含む動きデータを出力する。
【０００９】
第３の発明は、上記第２の発明において、推移周回方向判定手段は、２次元座標系において、原点からの距離が相対的に大きい加速度データに対して周回方向の判定に寄与する度合いを高くし、かつ、原点を軸とする周回方向に時系列的に推移する加速度データ（図１２の推移Ｒ）に対して周回方向の判定に寄与する度合いを高くする演算を用いて、周回方向を判定する。
【００１０】
第４の発明は、上記第３の発明において、推移周回方向判定手段は、２次元座標系において、時系列的に連続し、一方の前記周回方向に推移する２つの加速度データがそれぞれ示す座標点と原点とを頂点とする三角形の面積を時系列に沿って順次累積した第１累積面積（図１２の面積Ａ１３）を演算し、時系列的に連続し、逆方向の前記周回方向に推移する２つの加速度データがそれぞれ示す座標点と原点とを頂点とする三角形の面積を時系列に沿って順次累積した第２累積面積（図１２の面積Ａ３６）を演算し、その第１累積面積およびその第２累積面積のいずれか一方が閾値を超えたとき、加速度データがその累積面積を得た周回方向に時系列的に推移していると判定する。
【００１１】
第５の発明は、上記第２の発明において、動き判別装置は、記憶手段（３３）を、さらに備える。記憶手段は、データ取得手段が逐次取得する加速度データを記憶する。推移周回方向判定手段は、２次元座標系において、記憶手段に記憶された加速度データのうち、所定期間に取得された加速度データが時系列的に推移する周回方向を判定する。
【００１２】
第６の発明は、上記第５の発明において、加速度センサは、入力装置に対して互いに直交する３軸方向（Ｘ、Ｙ、Ｚ軸方向）の加速度を検出する。推移周回方向判定手段は、３軸方向に含まれる第１軸方向（Ｚ軸方向）の加速度が所定値を超えている期間を所定期間とする（Ｓ６２でＹｅｓ）。２次元座標系は、３軸方向に含まれる他の第２軸および第３軸方向（ＸおよびＹ軸方向）成分に基づいてそれぞれ座標軸が定義される。推移周回方向判定手段は、所定期間に取得されて記憶手段に記憶された他の第２軸および第３軸方向の加速度データが時系列的に推移する周回方向を判定する。
【００１３】
第７の発明は、上記第６の発明において、動き判別装置は、傾き判別手段（Ｓ６３、図１６、図１７）を、さらに備える。傾き判別手段は、所定期間より前に記憶手段に記憶された第１軸方向の加速度データ（Ｚａｖｅ）に基づいて、その所定期間直前における入力装置の傾き状態（ＵＤ）を判別する。
【００１４】
第８の発明は、上記第５の発明において、動き方向判別手段は、角度算出手段（Ｓ１０１）および回転方向判定手段（Ｓ１０２）を、さらに含む。角度算出手段は、２次元座標系において、記憶手段に記憶された加速度データのうち、所定期間の最初に取得された加速度データが示す座標点（始点Ｐｓ）に原点から向かうベクトルと、所定期間の最後に取得された加速度データが示す座標点（終点Ｐｅ）に原点から向かうベクトルとが成す角度（θ）を算出する。回転方向判定手段は、角度が第１の閾値（１２０°）を超えているとき、２軸に対して共に直交する方向（Ｚ軸方向）を回転軸として一方方向へ入力装置が回転したと判定し、角度が第２の閾値（７０°）未満のとき、回転軸に対して他方方向へ入力装置が回転したと判定する。出力手段は、回転方向判定手段によって判別された回転方向（Ｓ）をさらに含む動きデータを出力する。
【００１５】
第９の発明は、上記第１の発明において、動き方向判別手段は、推移方向判定手段（Ｓ７１）を含む。推移方向判定手段は、加速度データの２軸方向成分に基づいてそれぞれ座標軸が定義される２次元座標系において、入力装置に作用する重力加速度の方向を基準として加速度データが時系列的に推移する方向を判定する。動き方向判別手段は、推移方向判定手段が判定した推移方向に基づいて、入力装置に作用する重力加速度に対するその入力装置の移動方向を判別する。出力手段は、動き方向判別手段によって判別された移動方向を少なくとも含む動きデータを出力する。
【００１６】
第１０の発明は、上記第１の発明において、加速度センサは、入力装置をユーザが把持して振ったときに生じる遠心力成分を少なくとも含む加速度を検出して加速度データを出力する。動き方向判別手段は、データ取得手段によって取得された加速度データの推移のうち、遠心力成分の加速度が閾値を超えている期間に取得した加速度データを用いて入力装置の動き方向を判別する。
【００１７】
第１１の発明は、少なくとも２軸方向の加速度を検出する加速度センサを備えた入力装置の動きを判別する動き判別装置のコンピュータ（３０）で実行される動き判別プログラムである。動き判別プログラムは、データ取得ステップ、動き方向判別ステップ、および出力ステップを、コンピュータに実行させる。データ取得ステップは、加速度センサから出力される加速度データを取得する。動き方向判別ステップは、データ取得ステップで取得された加速度データの推移に基づいて、入力装置に作用する重力加速度の方向を基準としたその入力装置の動き方向を判別する。出力ステップは、動き方向判別ステップで判別された動き方向を少なくとも含む動きデータを出力する。
【００１８】
第１２の発明は、上記第１１の発明において、動き方向判別ステップは、推移周回方向判定ステップを含む。推移周回方向判定ステップは、加速度データの２軸方向成分に基づいてそれぞれ座標軸が定義され、重力加速度を含む加速度が加速度センサに作用していない状態の加速度データの値を原点とする２次元座標系において、その原点を軸として加速度データが時系列的に推移する周回方向を判定する。動き方向判別ステップでは、推移周回方向判定ステップで判定した周回方向に基づいて、入力装置が移動した方向が判別される。出力ステップでは、動き方向判別ステップで判別された移動方向を少なくとも含む動きデータを出力する。
【００１９】
第１３の発明は、上記第１２の発明において、推移周回方向判定ステップでは、２次元座標系において、原点からの距離が相対的に大きい加速度データに対して周回方向の判定に寄与する度合いを高くし、かつ、原点を軸とする周回方向に時系列的に推移する加速度データに対して周回方向の判定に寄与する度合いを高くする演算を用いて、周回方向が判定される。
【００２０】
第１４の発明は、上記第１３の発明において、推移周回方向判定ステップでは、２次元座標系において、時系列的に連続し、一方の前記周回方向に推移する２つの加速度データがそれぞれ示す座標点と原点とを頂点とする三角形の面積を時系列に沿って順次累積した第１累積面積が演算され、時系列的に連続し、逆方向の前記周回方向に推移する２つの加速度データがそれぞれ示す座標点と原点とを頂点とする三角形の面積を時系列に沿って順次累積した第２累積面積が演算され、その第１累積面積およびその第２累積面積のいずれか一方が閾値を超えたとき、加速度データがその累積面積を得た周回方向に時系列的に推移していると判定される。
【００２１】
第１５の発明は、上記第１２の発明において、動き判別プログラムは、記憶制御ステップを、さらにコンピュータに実行させる。記憶制御ステップは、データ取得ステップで逐次取得する加速度データをメモリ（３３）に記憶する。推移周回方向判定ステップでは、２次元座標系において、メモリに記憶された加速度データのうち、所定期間に取得された加速度データの時系列的に推移する周回方向が判定される。
【００２２】
第１６の発明は、上記第１５の発明において、加速度センサは、入力装置に対して互いに直交する３軸方向の加速度を検出する。推移周回方向判定ステップでは、３軸方向に含まれる第１軸方向の加速度が所定値を超えている期間を所定期間とされる。２次元座標系は、３軸方向に含まれる他の第２軸および第３軸方向成分に基づいてそれぞれ座標軸が定義される。推移周回方向判定ステップでは、所定期間に取得されてメモリに記憶された他の第２軸および第３軸方向の加速度データの時系列的に推移する周回方向が判定される。
【００２３】
第１７の発明は、上記第１６の発明において、動き判別プログラムは、傾き判別ステップを、さらにコンピュータに実行させる。傾き判別ステップは、所定期間より前にメモリに記憶された第１軸方向の加速度データに基づいて、その所定期間直前における入力装置の傾き状態を判別する。
【００２４】
第１８の発明は、上記第１５の発明において、動き方向判別ステップは、角度算出ステップおよび回転方向判定ステップを、さらに含む。角度算出ステップは、２次元座標系において、メモリに記憶された加速度データのうち、所定期間の最初に取得された加速度データが示す座標点に原点から向かうベクトルと、所定期間の最後に取得された加速度データが示す座標点に原点から向かうベクトルとが成す角度を算出する。回転方向判定ステップは、角度が第１の閾値を超えているとき、２軸に対して共に直交する方向を回転軸として一方方向へ入力装置が回転したと判定し、角度が第２の閾値未満のとき、回転軸に対して他方方向へ入力装置が回転したと判定する。出力ステップでは、回転方向判定ステップで判別された回転方向をさらに含む動きデータが出力される。
【００２５】
第１９の発明は、上記第１１の発明において、動き方向判別ステップは、推移方向判定ステップを含む。推移方向判定ステップは、加速度データの２軸方向成分に基づいてそれぞれ座標軸が定義される２次元座標系において、入力装置に作用する重力加速度の方向を基準として加速度データが時系列的に推移する方向を判定する。動き方向判別ステップでは、推移方向判定ステップで判定した推移方向に基づいて、入力装置に作用する重力加速度に対するその入力装置の移動方向が判別される。出力ステップでは、動き方向判別ステップで判別された移動方向を少なくとも含む動きデータが出力される。
【００２６】
第２０の発明は、上記第１１の発明において、加速度センサは、入力装置をユーザが把持して振ったときに生じる遠心力成分を少なくとも含む加速度を検出して加速度データを出力する。動き方向判別ステップでは、データ取得ステップで取得された加速度データの推移のうち、遠心力成分の加速度が閾値を超えている期間に取得した加速度データを用いて入力装置の動き方向が判別される。
【発明の効果】
【００２７】
上記第１の発明によれば、入力装置に作用する重力加速度の方向を基準とした動き方向を判別するため、正確に入力装置の動き方向を判別することができ、ユーザが入力装置を持つ方向（入力装置の姿勢）に対する自由度が非常に高くなる。
【００２８】
上記第２の発明によれば、得られた加速度データを時系列的に示す２次元座標系において、それら加速度データが推移する回転方向を判定することによって、ユーザが入力装置を持つ方向（入力装置の姿勢）に影響を受けず、重力加速度に対して入力装置が移動した方向を正確に判別することができ、当該移動方向を操作入力として用いることもできる。
【００２９】
上記第３の発明によれば、周回方向の判定に関して、信頼度の高い加速度データの寄与度が大きくなる評価を行うことにより、周回方向の判定の精度が向上する。
【００３０】
上記第４の発明によれば、順方向または逆方向の周回方向へ推移する加速度データと２次元座標系の原点とを結ぶ三角形の面積をそれぞれ評価することによって、周回方向の判定に関する信頼度を適切に判断することができる。
【００３１】
上記第５の発明によれば、所定期間に得られた加速度データを用いて判定することによって、判定には不要となるノイズ等の影響が減り、周回方向の判定精度が向上する。
【００３２】
上記第６の発明によれば、互いに直交する３軸のうち、第１軸の値が所定値を超える期間における残り２軸の加速度データを用いて判定する。したがって、ユーザが入力装置をスイングしたときの加速度が上記第１軸方向に影響するように設定することによって、入力装置が振られている期間を判定することができるため、振り始めから振り終わりまでにユーザが入力装置を振った移動方向を判定することができる。
【００３３】
上記第７の発明によれば、ユーザが入力装置をスイングする前の入力装置の傾き方向を判定することができるため、移動方向と傾き方向とを操作入力にすることもできる。
【００３４】
上記第８の発明によれば、ユーザが入力装置を回転させ（ひねり）ながら移動させた（振った）とき、入力装置の移動方向に加えて入力装置の回転方向も判定することができ、移動方向と回転方向とを操作入力にすることもできる。
【００３５】
上記第９の発明によれば、得られた加速度データを時系列的に示す２次元座標系において、それら加速度データによって得られる重力加速度の方向を基準として、当該加速度データの推移方向を判定することによって、ユーザが入力装置を持つ方向（入力装置の姿勢）に影響を受けず、重力加速度に対して入力装置が移動した方向を正確に判定することができる。
【００３６】
上記第１０の発明によれば、ユーザが入力装置をスイングしたときに生じる加速度が所定値を超えたときに得られた加速度データを用いて判定することによって、振り始めから振り終わりまでのみに得られる加速度データを用いた判定が可能となり、振り始めから振り終わりまでにユーザが入力装置を振った移動方向等を判定することができる。
【００３７】
本発明の動き判別プログラムによれば、上述した動き判別装置と同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００３８】
図１を参照して、本発明の一実施形態に係る動き判別装置について説明する。以下、説明を具体的にするために、当該動き判別装置を用いたゲームシステム１を一例として説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、本発明の動き判別装置に相当する据置型ゲーム装置を一例にして、当該ゲームシステム１について説明する。
【００３９】
図１において、当該ゲームシステム１は、家庭用テレビジョン受像機等のスピーカ２ａを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作情報を与えるコントローラ７によって構成される。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される送信データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００４０】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４１】
コントローラ７は、その内部に備える通信部７５（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて送信データを無線送信する。コントローラ７は、主にモニタ２に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ７は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって赤外光を出力する。なお、本実施例では、撮像情報演算部７４による撮像情報を用いないため、マーカ８Ｌおよび８Ｒを設置しなくてもかまわない。
【００４２】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００４３】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）３０を備える。ＣＰＵ３０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ３３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。なお、光ディスク４に記憶されているゲームプログラムが本発明の動き判別プログラムを含んでおり、ＣＰＵ３０は、上記ゲーム処理の中でコントローラ７の動きを判別するための動き判別処理も行っている。ＣＰＵ３０には、メモリコントローラ３１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３２、メインメモリ３３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）３５が接続される。また、メモリコントローラ３１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）３６、ビデオＩ／Ｆ３７、外部メモリＩ／Ｆ３８、オーディオＩ／Ｆ３９、およびディスクＩ／Ｆ４１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２ａ、およびディスクドライブ４０が接続されている。
【００４４】
ＧＰＵ３２は、ＣＰＵ３０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ３２は、図示しない画像処理専用のメモリやメインメモリ３３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ３２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ３１およびビデオＩ／Ｆ３７を介してモニタ２に出力する。
【００４５】
メインメモリ３３は、ＣＰＵ３０で使用される記憶領域であって、ＣＰＵ３０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ３３は、ＣＰＵ３０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ３３に記憶されたゲームプログラムや各種データ等がＣＰＵ３０によって実行される。
【００４６】
ＤＳＰ３４は、ゲームプログラム実行時にＣＰＵ３０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ３５が接続される。ＡＲＡＭ３５は、ＤＳＰ３４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ３４は、ＡＲＡＭ３５に記憶されたサウンドデータを読み出し、メモリコントローラ３１およびオーディオＩ／Ｆ３９を介してモニタ２に備えるスピーカ２ａに出力させる。
【００４７】
メモリコントローラ３１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ３６は、例えば４つのコントローラＩ／Ｆ３６ａ〜３６ｄで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ３６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの送信データを受信し、コントローラＩ／Ｆ３６を介して当該送信データをＣＰＵ３０へ出力する。ビデオＩ／Ｆ３７には、モニタ２が接続される。外部メモリＩ／Ｆ３８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ３９にはモニタ２に内蔵されるスピーカ２ａが接続され、ＤＳＰ３４がＡＲＡＭ３５から読み出したサウンドデータやディスクドライブ４０から直接出力されるサウンドデータをスピーカ２ａから出力可能に接続される。ディスクＩ／Ｆ４１には、ディスクドライブ４０が接続される。ディスクドライブ４０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ３９に出力する。
【００４８】
図３および図４を参照して、本発明の入力装置の一例であるコントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面後方から見た斜視図である。
【００４９】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００５０】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、矢印で示す４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【００５１】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に４方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー７２ａの代わりに設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。また、少なくとも４つの方向（前後左右）をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。
【００５２】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、Ｘボタン、Ｙボタン、およびＢボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、セレクトスイッチ、メニュースイッチ、およびスタートスイッチ等としての機能が割り当てられる。これら操作ボタン７２ｂ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５３】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５４】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７から受信ユニット６へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００５５】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＡボタンとして機能する操作部であり、シューティングゲームにおけるトリガスイッチや、プレイヤオブジェクトを所定オブジェクトに対して注目させる操作等に用いられる。
【００５６】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。また、ハウジング７０の後面には、コネクタ７３が設けられている。コネクタ７３は、例えば３２ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。なお、本発明では、この撮像情報演算部７４からの情報を用いないため、ここではこれ以上の説明を省略する。
【００５７】
ここで、説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（十字キー７２ａ等が設けらた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をＸ軸正方向とする。
【００５８】
次に、図５を参照して、コントローラ７の内部構造について説明する。なお、図５（ａ）は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を示す斜視図である。図５（ｂ）は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を示す斜視図である。ここで、図５（ｂ）に示す基板７００は、図５（ａ）に示す基板７００の裏面から見た斜視図となっている。
【００５９】
図５（ａ）において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、水晶振動子７０３、無線モジュール７５３、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１（図６参照）に接続される。加速度センサ７０１は、コントローラ７が配置された３次元空間における傾きや振動等の算出に用いることができる加速度を検出して出力する。
【００６０】
より詳細には、図６に示すように、コントローラ７は３軸の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、Ｘ軸とＹ軸（または他の対になった軸）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ７０１が提供されてもよい。
【００６１】
当業者には公知であるように、加速度センサ７０１に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００６２】
しかしながら、加速度センサ７０１から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度（重力加速度）が検知されると、加速度センサ７０１からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象（コントローラ７）の傾きを判定することができる。このように、加速度センサ７０１をマイコン７５１（または他のプロセッサ）と組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を判定することができる。同様に、加速度センサ７０１を備えるコントローラ７が例えば後述するようにユーザの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出することができる。他の実施例では、加速度センサ７０１は、信号をマイコン４２に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００６３】
また、無線モジュール７５３およびアンテナ７５４を有する通信部７５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子７０３は、後述するマイコン７５１の基本クロックを生成する。
【００６４】
一方、図５（ｂ）において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。そして、操作ボタン７２ｉが撮像情報演算部７４の後方の基板７００の下主面上に取り付けられていて、それよりさらに後方に、電池７０５が収容される。電池７０５とコネクタ７３との間の基板７００の下主面上には、バイブレータ７０４が取り付けられる。このバイブレータ７０４は、例えば振動モータやソレノイドであってよい。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。
【００６５】
次に、図６を参照して、コントローラ７の内部構成について説明する。なお、図６は、コントローラ７の構成を示すブロック図である。
【００６６】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００６７】
加速度センサ７０１は、上述したようにコントローラ７の上下方向（Ｙ軸方向）、左右方向（Ｘ軸方向）、および前後方向（Ｚ軸方向）の３軸成分に分けてそれぞれ加速度を検知して出力するセンサである。加速度センサ７０１が検知した３軸成分の加速度を示すデータは、それぞれ通信部７５へ出力される。この加速度センサ７０１から出力される加速度データに基づいて、コントローラ７の動きを判別することができる。なお、加速度センサ７０１は、特定のアプリケーションで必要なデータに応じて何れか２軸に対してそれぞれ加速度を検出する加速度センサが用いられてもかまわない。
【００６８】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。
【００６９】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を受信ユニット６へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から受信ユニット６への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、受信ユニット６への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置３の受信ユニット６でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ３０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Ｂｌｕｅｔｏｏｔｈ（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００７０】
次に、ゲーム装置３が行う具体的な処理を説明する前に、本ゲーム装置３で行うゲームの概要について説明する。図７に示すように、コントローラ７は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム１でコントローラ７を用いてゲームをプレイするためには、コントローラ７の前面がプレイヤの前方方向に向くようにプレイヤが一方の手（例えば右手）でコントローラ７を把持する。例えば、プレイヤは、親指をコントローラ７の左側面に添え、手のひらをコントローラ７の上面に添え、人差し指、中指、薬指、小指をコントローラ７下面に添えて、コントローラ７の前面がプレイヤの前方方向に露出させて、あたかもテニスラケットを握っているようにコントローラ７を把持する。
【００７１】
プレイヤは、モニタ２で表現されているゲーム画像に合わせて、コントローラ７を把持している腕を当該プレイヤから見て右から左へ振ったり（以下、「左振り」と記載する）、コントローラ７を把持している腕を当該プレイヤから見て左から右へ振ったり（以下、「右振り」と記載する）することによって、コントローラ７から操作情報（具体的には、Ｘ、Ｙ、およびＺ軸方向加速度データ）をゲーム装置３に与える。プレイヤは、上述した左振りや右振りに加えて、コントローラ７を下から上へ振り上げながらの左振りや右振り、コントローラ７を上から下へ振り下ろしながらの左振りや右振り、コントローラ７を右や左にひねりながらの左振りや右振り等を行うことによって、コントローラ７から様々なＸ、Ｙ、およびＺ軸方向加速度データをゲーム装置３に与えることができる。
【００７２】
図８に示すように、コントローラ７から受信したＸ、Ｙ、およびＺ軸方向加速度データに応じて、モニタ２にテニスゲーム等が表現される。具体的には、仮想ゲーム空間に設定されたテニスコートが３次元のゲーム画像としてモニタ２に表現される。そして、仮想ゲーム空間に、プレイヤが操作するプレイヤキャラクタＰＣ、当該プレイヤキャラクタＰＣの相手選手となる相手キャラクタＥＣ、およびテニスコート上で移動するテニスボールを示すボールキャラクタＢＣ等が配置されてモニタ２に表現される。以下、説明を具体的にするためにテニスゲームを表現するゲームプログラムが光ディスク４に記憶されており、ＣＰＵ３０がテニスゲーム処理の中でコントローラ７の動きを判別するための動き判別処理について説明する。
【００７３】
プレイヤキャラクタＰＣは、テニスラケットを持っており、仮想ゲーム空間に設定されたテニスコート上に配置される。そして、プレイヤがコントローラ７を振る動作に応じて、プレイヤキャラクタＰＣもテニスラケットを振るアニメーションが表現される。そして、到来するボールキャラクタＢＣをプレイヤキャラクタＰＣがテニスラケットで打ち返した場合、当該テニスラケットで打撃されたボールキャラクタＢＣが相手キャラクタＥＣ側のコートに向かって飛んでいく。つまり、プレイヤがコントローラ７を把持して振る動作を行うことによって、同様にテニスラケットを振る動作をプレイヤキャラクタＰＣが表現することになり、プレイヤはあたかもテニスラケットを振ってテニスをしているような仮想的なスポーツゲームを体験できる。
【００７４】
例えば、プレイヤキャラクタＰＣが右打ちのテニスプレイヤを表現している場合、プレイヤがコントローラ７を把持して「左振り」することによって、プレイヤキャラクタＰＣがフォアハンドでテニスラケットをスイングする。一方、プレイヤがコントローラ７を把持して「右振り」することによって、プレイヤキャラクタＰＣがバックハンドでテニスラケットをスイングする。つまり、プレイヤがコントローラ７を振る方向に応じて、プレイヤキャラクタＰＣが同じ方向にテニスラケットをスイングする動作を行う。
【００７５】
また、プレイヤがコントローラ７を振るタイミングや速度に応じて、プレイヤキャラクタＰＣがスイングしたテニスラケットで打撃されたボールキャラクタＢＣが飛ぶ方向や速度が変化する。さらに、プレイヤがコントローラ７を上下に振り上げ／振り下ろしながら左振りや右振りをすることによって、ボールキャラクタＢＣの軌道高さが変化する。また、プレイヤがコントローラ７を右や左にひねりながら振ることによって、いわゆるトップスピンやアンダースピンを加えたようなボールキャラクタＢＣを相手キャラクタＥＣに打ち返すことができる。後述により明らかとなるがこれらの動作は、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データによって区別することが可能であり、プレイヤがコントローラ７に加えた様々な動作を反映したテニスゲームを表現することができる。
【００７６】
まず、コントローラ７が振られたか否かを判定する方法について説明する。まず、Ｚ軸方向加速度データが閾値を超えるＺ軸正方向の値を示しているとき、ゲーム装置３は、プレイヤがコントローラ７を振ったと判定する。例えば、コントローラ７が静止状態である場合、加速度センサ７０１は、重力加速度９．８ｍ／ｓ2を超える加速度を検出することはない。一方、上述したようにプレイヤがコントローラ７を把持して腕を振った場合、コントローラ７の前端部が円弧状の軌跡を描いて移動するため、遠心力の影響によってＺ軸正方向（図３参照）の加速度が検出される。本実施例では、重力加速度以上の閾値を設定し、Ｚ軸方向加速度データが当該閾値を超える加速度を示している場合、プレイヤがコントローラ７を振っていると判定する。
【００７７】
次に、図９を参照して、コントローラ７を振られていると判定されているときに、ＸおよびＹ軸方向加速度データによって、コントローラ７が振られている方向を判定する方法について説明する。なお、図９（ａ）〜図９（ｄ）は、ＸおよびＹ軸方向加速度データがそれぞれ示す加速度の正負および大きさをＸ軸およびＹ軸としたグラフの一例である。そして、所得時間毎（例えば５ｍｓ毎）に同時に得られたＸおよびＹ軸方向加速度データが示す加速度を順にＸ−Ｙ座標系にプロットしている。図９（ａ）〜図９（ｄ）では、同時に得られたＸおよびＹ軸方向加速度データが示す加速度をそれぞれ点Ｐとして示しており、データが得られた順に矢印で結んで示している。また、図９（ａ）〜図９（ｄ）は、重力加速度を含む一切の加速度が加速度センサ７０１に付加されていない状態の加速度データの値を原点（Ｘ、Ｙ）＝（０，０）で示し、重力加速度の大きさを「１」（破線で示す位置に対応）として示している。
【００７８】
コントローラ７を把持して振った場合、振り始めは加速して振り終わりは減速となる。したがって、コントローラ７には、振り始めで振っている方向と同じ方向の加速度が生じた後、徐々に加速度の大きさが減少して、振り終わりで振っている方向とは逆の方向に加速度が生じる。一方、一般的に、加速度センサ７０１から出力される加速度ベクトル（あるいは、加速度の正負）は、コントローラ７の加速方向とは真逆のベクトルとなる。したがって、加速度センサ７０１は、コントローラ７の振り始めで振っている方向とは逆の方向に加速度を検出した後、徐々に加速度の大きさが減少して、振り終わりで振っている方向と同じ方向に加速度を検出する。
【００７９】
例えば、コントローラ７の上面を上に向けて水平に左振りで加速（つまり、コントローラ７の加速方向がＸ軸正方向）したとき、加速度センサ７０１から得られる加速度ベクトルとしてはＸ軸負方向のベクトルが得られることになる。したがって、振っている際に同時に得られたＸおよびＹ軸方向加速度データが示す加速度をＸ−Ｙ座標系にプロットしていくと、コントローラ７の振り始めの加速時はＸ軸負方向からプロットが始まる。そして、コントローラ７の振り終わりは減速となるためＸ軸正方向にプロットされる。さらに、加速度センサ７０１には、常に重力加速度が作用しているため、鉛直方向（ここでは、Ｙ軸負方向）に大きさ「１」の加速度を検出している。したがって、コントローラ７の上面を上に向けて水平に左振りしたとき、Ｘ軸方向の加速度がＸ軸負方向からＸ軸正方向（Ｘ＋方向）へ順次推移しながらＹ軸方向の加速度が「−１」で一定となった点Ｐが順にＸ−Ｙ座標系にプロットされる（図９（ａ））。
【００８０】
また、コントローラ７の上面をプレイヤから見て左９０°方向に向けて水平に左振りで加速（つまり、コントローラ７の加速方向がＹ軸正方向）したとき、加速度センサ７０１から得られる加速度ベクトルとしてはＹ軸負方向のベクトルが得られることになる。したがって、振っている際に同時に得られたＸおよびＹ軸方向加速度データが示す加速度をＸ−Ｙ座標系にプロットしていくと、コントローラ７の振り始めの加速時はＹ軸負方向からプロットが始まる。そして、コントローラ７の振り終わりは減速となるためＹ軸正方向にプロットされる。さらに、加速度センサ７０１には、常に重力加速度が作用しているため、鉛直方向（ここでは、Ｘ軸正方向）に大きさ「１」の加速度を検出している。したがって、コントローラ７の上面をプレイヤから見て左９０°方向に向けて水平に左振りしたとき、Ｘ軸方向の加速度が「＋１」一定でＹ軸方向の加速度がＹ軸負方向からＹ軸正方向（Ｙ＋方向）へ順次推移する点Ｐが順にＸ−Ｙ座標系にプロットされる（図９（ｂ））。
【００８１】
また、コントローラ７の上面を下に向けて水平に左振りで加速（つまり、コントローラ７の加速方向がＸ軸負方向）したとき、加速度センサ７０１から得られる加速度ベクトルとしてはＸ軸正方向のベクトルが得られることになる。したがって、振っている際に同時に得られたＸおよびＹ軸方向加速度データが示す加速度をＸ−Ｙ座標系にプロットしていくと、コントローラ７の振り始めの加速時はＸ軸正方向からプロットが始まる。そして、コントローラ７の振り終わりは減速となるためＸ軸負方向にプロットされる。さらに、加速度センサ７０１には、常に重力加速度が作用しているため、鉛直方向（ここでは、Ｙ軸正方向）に大きさ「１」の加速度を検出している。したがって、コントローラ７の上面を下に向けて水平に左振りしたとき、Ｘ軸方向の加速度がＸ軸正方向からＸ軸負方向（Ｘ−方向）へ順次推移しながらＹ軸方向の加速度が「＋１」で一定となった点Ｐが順にＸ−Ｙ座標系にプロットされる（図９（ｃ））。
【００８２】
さらに、コントローラ７の上面をプレイヤから見て右９０°方向に向けて水平に左振りで加速（つまり、コントローラ７の加速方向がＹ軸負方向）したとき、加速度センサ７０１から得られる加速度ベクトルとしてはＹ軸正方向のベクトルが得られることになる。したがって、振っている際に同時に得られたＸおよびＹ軸方向加速度データが示す加速度をＸ−Ｙ座標系にプロットしていくと、コントローラ７の振り始めの加速時はＹ軸正方向からプロットが始まる。そして、コントローラ７の振り終わりは減速となるためＹ軸負方向にプロットされる。さらに、加速度センサ７０１には、常に重力加速度が作用しているため、鉛直方向（ここでは、Ｘ軸負方向）に大きさ「１」の加速度を検出している。したがって、コントローラ７の上面をプレイヤから見て右９０°方向に向けて水平に左振りしたとき、Ｘ軸方向の加速度が「−１」一定でＹ軸方向の加速度がＹ軸正方向からＹ軸負方向（Ｙ−方向）へ順次推移する点Ｐが順にＸ−Ｙ座標系にプロットされる（図９（ｄ））。
【００８３】
このように、プレイヤがコントローラ７を把持して左振りを行ったとき、プレイヤがコントローラ７を把持する方向によって、ＸおよびＹ軸方向加速度データから得られる加速度の変化傾向が異なる。しかしながら、図９（ａ）〜図９（ｄ）を見れば明らかなように、プレイヤがコントローラ７を左振りしたとき、点Ｐが全てＸ−Ｙ座標系の原点を中心に右回りに推移している。一方、プレイヤがコントローラ７を右振りしたとき、加速度が左振りとは逆の傾向を示すことは明らかであり、点Ｐが全てＸ−Ｙ座標系の原点を中心に左回りに推移することになる。つまり、Ｘ−Ｙ座標系の原点を基準にプロット点Ｐが推移していく周回方向を算出すれば、プレイヤがコントローラ７を振っている方向（コントローラ７の移動方向）を判定することが可能となる。プロット点Ｐが推移していく周回方向とコントローラ７が振られている方向との関係は、座標軸の設定、加速度センサの特性、Ｘ−Ｙ座標系の設定等によって変わるものであり、適宜各設定に応じて関係を調整すればよい。具体的には、得られた加速度データに基づいた重力加速度の方向（図９（ａ）〜図９（ｄ）に示す破線矢印方向）を基準とし、当該重力加速度の方向に対する加速度データの推移方向を解析すれば、コントローラ７が振られている方向を正確に判定することができる。
【００８４】
しかしながら、現実にはプレイヤがコントローラ７を振る前に行うバックスイング（振りかぶり）やひねり等の影響によって、上記Ｘ−Ｙ座標系にプロットされる点Ｐの推移は、図１０に示すような複雑な曲線を描く場合が多い。例えば、図１０は左振りによる推移の一例であるが、振り始めに原点に対して左回りの推移（点Ｐ１〜点Ｐ３；推移Ｌ）が現れた後に、右回りの推移（点Ｐ３〜点Ｐ１０；推移Ｒ）が現れるため、推移Ｌの時点で振り方向を判定すると右振りと判定されてしまう。推移Ｌは、加速度の大きさが相対的に小さいデータ群であるが、これはバックスイングの振りの強さが弱いからである。また、原点から放射方向に近い推移をしているが、これは右振りや左振りとは異なる方向にコントローラ７が振られることによるものである。したがって、このように加速度の大きさが相対的に小さく、原点から放射方向に近い推移をするデータ群は、振り方向を判断するには信頼性の低いデータであるといえる。したがって、推移Ｒのように、加速度の大きさが相対的に大きいデータ群であり、原点を中心とした周回方向に近い推移を用いて判断すれば、正確に振り方向を判定できるといえる。換言すると、振り方向を判断するには、加速度の大きさが相対的に大きなデータほど信頼度が高く、原点を中心とした周回方向に近い推移ほど信頼度が高くなることになる。
【００８５】
上記信頼度を、時系列的に連続する２つの加速度データと原点とを結ぶ三角形の面積で表す。例えば、図１１に示すように、時系列的に隣接する点Ｐ４およびＰ５と原点とをそれぞれ結ぶ直線で囲まれた三角形の面積Ａ４５を考える。この場合、加速度の大きさが相対的に大きな点Ｐを用いて三角形を形成すると、面積Ａ４５が大きくなる。また、原点を中心とした周回方向に近い推移をする点Ｐを用いて三角形を形成すると、面積Ａ４５が大きくなる。つまり、面積Ａ４５の大きさによって、上記信頼度を表すことができることがわかる。
【００８６】
図１２は、図１０で示した時系列的に連続する点Ｐ１〜Ｐ３において、隣接するそれぞれの２点と原点とによって形成された三角形を累積した領域の面積Ａ１３と、点Ｐ３〜Ｐ６において、隣接するそれぞれの２点と原点とによって形成された三角形を累積した領域の面積Ａ３６（面積Ａ１３は、面積Ａ３６の一部に重複）とを示す図である。図１２に示すように、面積Ａ１３は、原点に対して左回りの推移を示す点Ｐ１〜Ｐ３を用いて算出された三角形の累積面積である。一方、面積Ａ３６は、原点に対して右回りの推移を示す点Ｐ３〜Ｐ６を用いて算出された三角形の累積面積である。図１２から明らかなように、面積Ａ１３は、面積Ａ３６より極めて小さくなっている。本実施例では、右回りの三角形の面積および左回りの三角形の面積を時系列に沿って累計し、一方の累計が閾値を超えた場合、当該超えた累計面積を形成している三角形に含まれる点Ｐの推移が右回りか左回りかに基づいて、振り方向を判定する。これによって、信頼度の低いデータの影響を排除しながら正確な振り方向を判定することができる。ここで、振り始めから振り終わりまでの全ての点Ｐを解析すれば、より正しい振り方向の判定が可能であると考えられるが、本実施例では、振り動作の途中の早い段階で振り方向の判定を行うために閾値を基準とした判定が行われる。
【００８７】
次に、プレイヤがコントローラ７を振る速度の判定について説明する。プレイヤがコントローラ７を速く振ると、加速から減速までの期間が相対的に短くなる。一方、プレイヤがコントローラ７を遅く振ると、加速から減速までの期間が相対的に長くなる。つまり、同じ振り幅でプレイヤがコントローラ７を振った場合、プレイヤがコントローラ７を速く振るほどＸ−Ｙ座標系にプロットされる点Ｐの間隔（以下、データ間隔と記載することがある）が広くなる。したがって、時系列的に連続する点Ｐの間隔をそれぞれ判定して、プレイヤがコントローラ７を振る速度を算出することができる。本実施例では、振り始めから振り終わりまでの全ての点Ｐを解析して、時系列的に連続する点Ｐの間隔のうち、最も間隔が広いものを抽出して振る速度を算出する。
【００８８】
次に、図１３〜図１５を参照して、コントローラ７が振られているときに、ＸおよびＹ軸方向加速度データによって、コントローラ７がひねられている方向を判定する方法について説明する。なお、図１３は、コントローラ７のひねり方向を説明するための斜視図である。図１４（ａ）〜図１４（ｃ）は、コントローラ７に加えられたひねりに応じて、ＸおよびＹ軸方向加速度データがそれぞれ示す加速度の値を示すグラフの一例である。図１５は、図１４（ａ）〜図１４（ｃ）の角度θに応じて算出されるスピンパラメータＳの一例を示すグラフである。なお、図１４（ａ）〜図１４（ｃ）は、図９と同様に点Ｐが得られた順に矢印で結んで示し、重力加速度を含む一切の加速度が加速度センサ７０１に付加されていない状態の加速度データの値を原点（Ｘ、Ｙ）＝（０、０）としている。
【００８９】
図１３において、プレイヤは、コントローラ７を把持して左振りまたは右振りでスイングするとき、さらにＺ軸を中心として「左ひねり」または「右ひねり」をコントローラ７に加えることができる。ここで、「左ひねり」とは、プレイヤから見てＺ軸を中心とした反時計方向にコントローラ７を回転させることを示している。また、「右ひねり」とは、プレイヤから見てＺ軸を中心とした時計方向にコントローラ７を回転させることを示している。これらのひねり判定の結果は、ボールキャラクタＢＣに加えられるスピン（トップスピンやバックスピン）に反映される。
【００９０】
ここで、コントローラ７が振られているときに、コントローラ７がひねられた角度を判定するには、振り始めから振り終わりまでのＸおよびＹ軸方向加速度データを解析する必要がある。本実施例では、振り始めに得られるＸおよびＹ軸方向加速度データを示す点Ｐｓ（つまり、Ｘ−Ｙ座標系へ最初にプロットする始点）と振り終わりに得られるＸおよびＹ軸方向加速度データを示す点Ｐｅ（つまり、Ｘ−Ｙ座標系へ最後にプロットする終点）とを用いて、コントローラ７がひねられた角度を判定する。
【００９１】
例えば、図１４（ａ）は、コントローラ７の上面を上に向けた状態を維持（つまり、「ひねりなし」）して水平に左振りしたときに、振り始めから振り終わりまでに得られるＸおよびＹ軸方向加速度データの一例を示している。そして、始点Ｐｓおよび原点を結ぶ直線から終点Ｐｅおよび原点を結ぶ直線までの間に形成される角度θ（以下、始点Ｐｓから終点Ｐｅまでの角度θと記載する）を算出し、当該角度θに応じたスピンパラメータＳを設定する。この場合、コントローラ７に作用する重力方向が一定であるため、中程度な角度θが得られる。ここで、角度θは、Ｘ−Ｙ座標系の原点から始点Ｐｓに向かうベクトルと原点から終点Ｐｅに向かうベクトルとが成す角度の絶対値を算出することによって求めることができる。
【００９２】
図１４（ｂ）は、コントローラ７の上面を上に向けた状態から「左ひねり」を加えながら水平に左振りしたときに、振り始めから振り終わりまでに得られるＸおよびＹ軸方向加速度データの一例を示している。この場合、コントローラ７に作用する重力方向がひねりに応じて右回りに変化していくため、「ひねりなし」で得られる角度θより「左ひねり」で得られる始点Ｐｓから終点Ｐｅまでの角度θが大きくなる。
【００９３】
図１４（ｃ）は、コントローラ７の上面を上に向けた状態から「右ひねり」を加えながら水平に左振りしたときに、振り始めから振り終わりまでに得られるＸおよびＹ軸方向加速度データの一例を示している。この場合、コントローラ７に作用する重力方向がひねりに応じて左回りに変化していくため、「ひねりなし」で得られる角度θより「右ひねり」で得られる始点Ｐｓから終点Ｐｅまでの角度θが小さくなる。
【００９４】
このように、始点Ｐｓから終点Ｐｅまでの角度θに注目すれば、振っているときにコントローラ７に加えられたひねり方向やひねり角度を判定することができる。例えば、コントローラ７が「左振り」されているとき、角度θが閾値より大きい場合「左ひねり」、角度θが閾値より小さい場合「右ひねり」と判定することができる。なお、コントローラ７が「右振り」されているときは、これらの傾向が逆に現れる。すなわち、コントローラ７が「右振り」されているとき、角度θが閾値より大きい場合「右ひねり」、角度θが閾値より小さい場合「左ひねり」と判定することができる。つまり、Ｘ軸方向加速度データおよびＹ軸方向加速度データがＸ−Ｙ座標系における座標点として示す始点Ｐｓおよび終点Ｐｅを用いて、Ｘ軸およびＹ軸に対して互いに直交するＺ軸を回転軸としたコントローラ７の回転動作を判別することができる。
【００９５】
また、「ひねりなし」で得られる角度θの大きさ（図１４（ａ））を基準とした角度θの大きさの差に応じて、プレイヤがコントローラ７をひねった回転の量を決定することができる。本実施例では、所定の変換テーブルを用いて、ひねり認識に用いた角度θを当該角度θの大きさに応じてスピンパラメータＳに置き換えて、その後のゲーム処理を行っている。スピンパラメータＳは、例えば角度θの大きさに応じて決定される−１．０〜１．０の浮動小数である。そして、ゲーム処理においては、Ｓ＝−１．０のときにバックスピンの最大効果を与え、Ｓ＝１．０のときにトップスピンの最大効果を与えるものとする。
【００９６】
例えば、図１５に示すように、角度θ≦３０°のときは、スピンパラメータＳ＝−１．０に変換する。３０°＜角度θ≦７０°のときは、スピンパラメータＳ＝−１．０〜０．０の間で線形に変化させて変換する。７０°＜角度θ≦１２０°のときは、スピンパラメータＳ＝０．０に変換する。１２０°＜角度θ≦１６０°のときは、スピンパラメータＳ＝０．０〜１．０の間で線形に変化させて変換する。１６０°＜角度θのときは、スピンパラメータＳ＝１．０に変換する。これらの変換テーブルを調整することによって、コントローラ７に対するひねりをゲーム処理に反映させる効果を調整することができる。
【００９７】
次に、図１６および図１７を参照して、コントローラ７が振り上げられているまたは振り下ろされている状態を判定する方法について説明する。なお、図１６（ａ）〜図１６（ｃ）は、コントローラ７の上下方向に傾けた状態とそれらの座標軸との関係を説明するための図である。図１７は、Ｚ軸方向加速度データに応じて算出される上下角度ＵＤの一例を示すグラフである。
【００９８】
本実施例では、振り始め前のコントローラ７の上下方向に基づいて、コントローラ７が振り上げられているまたは振り下ろされているかを判定している。例えば、プレイヤがコントローラ７を振り始める前に当該コントローラ７の前面を水平から所定の角度以上に下方向へ向けていたとき、プレイヤがコントローラ７を振り上げてスイングしたと判定する。一方、プレイヤがコントローラ７を振り始める前に当該コントローラ７の前面を水平から所定の角度以上に上方向へ向けていたとき、プレイヤがコントローラ７を振り下ろしてスイングしたと判定する。
【００９９】
具体的には、コントローラ７が振られていると判定されたとき、その直前の数フレームに対して得られたＺ軸方向加速度データに基づいて、振り始め前のコントローラ７の上下方向を判定する。例えば、図１６（ａ）に示すように、プレイヤがコントローラ７を振り始める前に当該コントローラ７が水平である場合、重力加速度がＹ軸負方向に作用するためＺ軸方向加速度データには当該重力加速度の影響が現れない。一方、図１６（ｂ）に示すように、プレイヤがコントローラ７を振り始める前に当該コントローラ７の前面を水平から上方向に向けている場合、重力加速度がＹ軸負方向およびＺ軸負方向に作用するためＺ軸方向加速度データが当該重力加速度の影響によってＺ軸負方向の加速度を示す。また、図１６（ｃ）に示すように、プレイヤがコントローラ７を振り始める前に当該コントローラ７の前面を水平から下方向に向けている場合、重力加速度がＹ軸負方向およびＺ軸正方向に作用するためＺ軸方向加速度データが当該重力加速度の影響によってＺ軸正方向の加速度を示す。つまり、プレイヤがコントローラ７を振り始める前のＺ軸方向加速度データを解析すれば、プレイヤがコントローラ７を振り始める前の上下方向が判定できる。
【０１００】
本実施例では、得られたＺ軸方向加速度データをメインメモリ３３に格納し、コントローラ７が振られていると判定されたときに、その直前の３０フレーム分に対して得られたＺ軸方向加速度データの平均値Ｚａｖｅをコントローラ７の上下角度ＵＤに変換し、その後のゲーム処理を行っている。
【０１０１】
例えば、図１７に示すように、平均値Ｚａｖｅ≦−０．２Ｇのときは、上下角度ＵＤ＝６０°に変換する。−０．２Ｇ＜平均値Ｚａｖｅ≦１．０Ｇのときは、上下角度ＵＤ＝６０°〜−６０°の間で線形に変化させて変換する。１．０Ｇ＜平均値Ｚａｖｅのときは、上下角度ＵＤ＝−６０°に変換する。ここで、平均値Ｚａｖｅに対して変換される上下角度ＵＤのバランスがＺ軸正方向に寄っているが、これは振り始めでは必ずＺ軸方向加速度データがＺ軸正方向に振れているため、その影響を考慮したためである。これらの変換テーブルを調整することによって、コントローラ７の振り始め前に得られたＺ軸方向加速度データをゲーム処理に反映させる効果を調整することができる。
【０１０２】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１８を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１８は、ゲーム装置３のメインメモリ３３に記憶される主なデータを示す図である。
【０１０３】
図１８に示すように、メインメモリ３３には、加速度データＤａ、上下角度データＤｂ、左回り累積面積データＤｃ、右回り累積面積データＤｄ、第１ボール軌道データＤｅ、第２ボール軌道データＤｆ、第１ダミーボールデータＤｇ、第２ダミーボールデータＤｈ、ボールキャラクタデータＤｉ、始点−終点角度データＤｊ、スピンパラメータＤｋ、最大プロット間隔データＤｌ、カウントデータＤｍ、および画像データＤｎ等が記憶される。なお、メインメモリ３３には、図１８に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタＰＣや相手キャラクタＥＣ等に関するデータ（位置データ等）や仮想ゲーム空間に関するデータ（地形データ等）等、ゲーム処理に必要なデータが記憶される。
【０１０４】
加速度データＤａは、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データであり、得られた加速度データを所定フレーム分（例えば、ゲーム処理間隔である１フレーム（１／６０秒）に対して３０フレーム分）格納する。加速度データＤａには、加速度センサ７０１がＸ、Ｙ、およびＺ軸の３軸成分に分けてそれぞれ検出したＸ軸方向加速度データＤａ１、Ｙ軸方向加速度データＤａ２、およびＺ軸方向加速度データＤａ３が含まれる。なお、ゲーム装置３に備える受信ユニット６は、コントローラ７から所定間隔例えば５ｍｓごとに送信される操作情報に含まれる加速度データＤａを受信し、受信ユニット６に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である１フレーム毎に読み出されてメインメモリ３３に記憶される。
【０１０５】
上下角度データＤｂは、振り始め前にコントローラ７から得られたＺ軸方向加速度データＤａ３に応じて算出された上下角度ＵＤ（図１６、図１７参照）を示すデータである。左回り累積面積データＤｃは、Ｘ−Ｙ座標系において、原点に対して左回りに推移する加速度データを用いて形成された三角形の面積（図１２参照）を累積したデータである。右回り累積面積データＤｄは、Ｘ−Ｙ座標系において、原点に対して右回りに推移する加速度データを用いて形成された三角形の面積（図１２参照）を累積したデータである。
【０１０６】
第１ボール軌道データＤｅは、後述するモーション認識処理における初期段階におけるデータに基づいて、ボールキャラクタＢＣが仮想ゲーム空間内を移動する軌道（第１ボール軌道ＴＲ１）を算出したデータである。第２ボール軌道データＤｆは、モーション認識処理の全期間において得られたデータに基づいて、ボールキャラクタＢＣが仮想ゲーム空間内を移動する軌道（第２ボール軌道ＴＲ２）を算出したデータである。第１ダミーボール位置データＤｇは、第１ダミーボール速度データＤｇ１および第１ダミーボール位置データＤｇ２を含み、第１ボール軌道データＤｅで示される軌道に沿って移動させる第１ダミーボールの速度および位置を示す仮想ゲーム空間に対する速度ベクトルデータおよび位置座標データである。第２ダミーボール位置データＤｈは、第２ダミーボール速度データＤｈ１および第２ダミーボール位置データＤｈ２を含み、第２ボール軌道データＤｆで示される軌道に沿って移動させる第２ダミーボールの速度および位置を示す仮想ゲーム空間に対する速度ベクトルデータおよび位置座標データである。ボールキャラクタデータＤｉは、ボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２を含み、ボールキャラクタＢＣの現在の速度および位置を示す仮想ゲーム空間に対する速度ベクトルデータおよび位置座標データである。
【０１０７】
始点−終点角度データＤｊは、上記Ｘ−Ｙ座標系において、始点Ｐｓから終点Ｐｅまでの角度θ（図１４参照）を示すデータである。スピンパラメータＤｋは、角度θを置き換えることによって得られるスピンパラメータＳ（図１５参照）を示すデータである。最大プロット間隔データＤｌは、モーション認識処理の全期間において得られたＸおよびＹ軸方向加速度データに基づいて、Ｘ−Ｙ座標系にプロットした場合に時系列的に連続する間隔が最大となるデータ間隔を示すデータである。カウントデータＤｍは、後述するフローチャートで用いられるカウント値を示すデータである。
【０１０８】
画像データＤｎは、プレイヤキャラクタ画像データＤｎ１およびボール画像データＤｎ２等を含み、仮想ゲーム世界にプレイヤキャラクタＰＣやボールキャラクタＢＣを配置してゲーム画像を生成するためのデータである。
【０１０９】
次に、図１９〜図２６を参照して、ゲーム装置３において行われるゲーム処理の詳細を説明する。なお、図１９は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。図２０は、図１９におけるステップ５１の初期モーション認識処理の詳細な動作を示すサブルーチンである。図２１は、図１９におけるステップ５２のアニメーション開始処理の詳細な動作を示すサブルーチンである。図２２は、図１９におけるステップ５３の第１挙動処理の詳細な動作を示すサブルーチンである。図２３は、図１９におけるステップ５４の第２挙動処理の詳細な動作を示すサブルーチンである。図２４は、モーション認識処理、アニメーション処理、およびボール挙動処理がそれぞれ行われるタイミングを示す図である。図２５は、スピンパラメータＳに応じて決定されるボール挙動の一例を示す図である。図２６は、第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２の一例を示す図である。なお、図１９〜図２３に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ７を振ることによるゲーム操作に基づいて行われるゲーム処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１９〜図２３では、ＣＰＵ３０が実行する各ステップを「Ｓ」と略称する。
【０１１０】
ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ３０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ３３に読み込まれ、ＣＰＵ３０によって当該ゲームプログラムの実行が開始される。図１２〜図１５に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１１１】
図１９において、ＣＰＵ３０は、初期モーション認識処理（ステップ５１）、アニメーション開始処理（ステップ５２）、第１挙動処理（ステップ５３）、および第２挙動処理（ステップ５４）を順に行う。なお、これらの詳細な動作内容については、後述する。そして、ＣＰＵ３０は、ゲームを終了するか否かを判断する（ステップ５５）。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件（例えば、プレイヤキャラクタがプレイするテニスゲームが終了する等）が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。ＣＰＵ３０は、ゲームを終了しない場合に上記ステップ５１に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【０１１２】
図２０を参照して、上記ステップ５１における初期モーション認識処理の動作について説明する。まず、ＣＰＵ３０は、コントローラ７から受信した操作情報に含まれる加速度データを取得し（ステップ６１）、処理を次のステップに進める。そして、ＣＰＵ３０は、取得した加速度データを加速度データＤａとしてメインメモリ３３に記憶する。ここで、ステップ６１で取得される加速度データには、加速度センサ７０１がＸ、Ｙ、およびＺ軸の３軸成分に分けてそれぞれ検出したＸ、Ｙ、およびＺ軸方向加速度データが含まれている。ここでは、通信部７５は、所定の時間間隔（例えば５ｍｓ間隔）で操作情報をゲーム装置３へ送信しており、受信ユニット６に備える図示しないバッファに少なくとも加速度データが蓄えられる。そして、ＣＰＵ３０は、ゲーム処理単位である１フレーム毎にバッファに蓄えられた加速度データを取得してメインメモリ３３に格納する。
【０１１３】
次に、ＣＰＵ３０は、取得した加速度データを用いて、コントローラ７がプレイヤによって振られたか否かを判断する（ステップ６２）。具体的には、ＣＰＵ３０は、上記ステップ６１で取得したＺ軸方向加速度データが閾値を超えたＺ軸正方向の値を示しているとき、プレイヤがコントローラ７を振ったと判定する。そして、ＣＰＵ３０は、コントローラ７が振られている場合、処理を次のステップ６３に進める。一方、ＣＰＵ３０は、コントローラ７が振られていない場合、上記ステップ６１に戻って処理を繰り返す。
【０１１４】
ステップ６３において、ＣＰＵ３０は、振り始め前のコントローラ７の上下方向を判定し、処理を次のステップに進める。具体的には、ＣＰＵ３０は、メインメモリ３３に格納されている過去数フレーム（例えば、３０フレーム）分のＺ軸方向加速度データＤａ３の平均値Ｚａｖｅを算出する。そして、ＣＰＵ３０は、平均値Ｚａｖｅを上下角度ＵＤに変換（図１７参照）して、当該上下角度ＵＤを示すデータを上下角度データＤｂとして格納する。
【０１１５】
次に、ＣＰＵ３０は、コントローラ７から受信した操作情報に含まれる加速度データをステップ６１と同様の処理によって取得し（ステップ６４）、当該取得した加速度データのＺ軸方向データが閾値以下であるかどうかに基づいてプレイヤがコントローラ７を振る動作を終了したか否かを判断する（ステップ６５）。そして、ＣＰＵ３０は、コントローラ７を振る動作が継続している場合、処理を次のステップ６６に進める。一方、ＣＰＵ３０は、コントローラ７を振る動作が終了している場合、上記ステップ５１に戻って処理を繰り返す。
【０１１６】
ステップ６６において、ＣＰＵ３０は、上記ステップ６４で所得した加速度データに基づいて、Ｘ−Ｙ座標系における原点との間で形成される三角形面積を累積し、処理を次のステップに進める。具体的には、図１２を参照して説明したように、上記ステップ６４で所得した加速度データがＸ−Ｙ座標系の原点に対して左回りに推移している場合、ＣＰＵ３０は、適宜形成された三角形の面積を左回り累積面積データＤｃに累積して格納する。一方、ＣＰＵ３０は、上記ステップ６４で所得した加速度データがＸ−Ｙ座標系の原点に対して右回りに推移している場合、適宜形成された三角形の面積を右回り累積面積データＤｄに累積して格納する。
【０１１７】
次に、ＣＰＵ３０は、上記ステップ６４で所得した加速度データによってＸ−Ｙ座標系にプロットされる間隔（データ間隔）を判定し（ステップ６７）、処理を次のステップに進める。具体的には、ＣＰＵ３０は、得られたデータ間隔が、現在最大プロット間隔データＤｌに格納されているデータ間隔より広い場合、当該最大プロット間隔データＤｌを得られたデータ間隔に更新する。一方、ＣＰＵ３０は、得られたデータ間隔が、現在最大プロット間隔データＤｌに格納されているデータ間隔と同じまたは狭い場合、そのまま処理を次のステップに進める。
【０１１８】
次に、ＣＰＵ３０は、左回り累積面積データＤｃが示す累積面積および右回り累積面積データＤｄが示す累積面積の何れか一方が閾値を超えたか否かを判断する（ステップ６８）。そして、ＣＰＵ３０は、累積面積の何れか一方が閾値を超えた場合、当該サブルーチンによる処理を終了して上記ステップ５２に処理を進める。一方、ＣＰＵ３０は、累積面積が何れも閾値を超えていない場合、上記ステップ６４に戻って処理を繰り返す。
【０１１９】
図２１を参照して、上記ステップ５２におけるアニメーション開始処理の動作について説明する。上記ステップ６８の処理の後、ＣＰＵ３０は、コントローラ７に対して振られた方向を判定し（ステップ７１）、処理を次のステップに進める。例えば、上記ステップ６８において、左回り累積面積データＤｃが示す累積面積が閾値を超えたと判定された場合、加速度データが上述したＸ−Ｙ座標系の原点を中心に左回りに推移しているとしてプレイヤがコントローラ７を「右振り」（図７参照）していると判定される。一方、上記ステップ６８において、右回り累積面積データＤｄが示す累積面積が閾値を超えたと判定された場合、加速度データが上述したＸ−Ｙ座標系の原点を中心に右回りに推移しているとしてプレイヤがコントローラ７を「左振り」（図７参照）していると判定する。
【０１２０】
これらステップ６８およびステップ７１による処理から明らかなように、上記ステップ７１は、左回り累積面積データＤｃが示す累積面積および右回り累積面積データＤｄが示す累積面積の何れか一方が閾値を超えた場合に実行され、プレイヤがコントローラ７を振り終わることによって実行される処理ではない。図２４に示すように、プレイヤがコントローラ７を振り始めてから振り終わるまでの動作を認識する処理（モーション認識処理）は、時刻Ｔ１〜Ｔ４まで行われている。一方、プレイヤキャラクタＰＣがテニスラケットを振るアニメーションを表現する処理（アニメーション処理）は、時刻Ｔ２以降に行われ、モーション認識処理の途中から開始される。つまり、コントローラ７に対する振り方向がコントローラ７を振り始めてから振り終わるまでの途中段階で判定されて、ゲーム画像に反映されることになる。ここで、上記ステップ５１の初期モーション認識処理は、モーション認識処理のうち、時刻Ｔ１〜Ｔ２で行われる処理となる。
【０１２１】
なお、閾値を超えた累積面積の区別とコントローラ７が振られている方向との関係は、コントローラ７における座標軸の設定、加速度センサの特性、Ｘ−Ｙ座標系の設定等によって変わるものであり、適宜各設定に応じて関係を調整すればよい。具体的には、得られた加速度データに基づいた重力加速度の方向を基準として、閾値を超えた累積面積の区別と振り方向との関係を解析すれば、コントローラ７が振られている方向を正確に判定することができる。
【０１２２】
次に、ＣＰＵ３０は、プレイヤキャラクタＰＣがボールキャラクタＢＣを打ち返す当たりを判定し（ステップ７２）、プレイヤキャラクタＰＣが空振りするか否かを判断する（ステップ７３）。ここで、ここまで実行したステップでは、プレイヤキャラクタＰＣがラケットを振る動作を開始していない。しかしながら、ＣＰＵ３０は、現時点のプレイヤキャラクタＰＣの位置およびその後の予想位置と、現時点のボールキャラクタＢＣの位置およびその後の予想軌道と、プレイヤキャラクタＰＣがテニスラケットを振る方向等とのデータから、到来するボールキャラクタＢＣを今回のスイングによって打ち返す当たりを予測して判定することが可能である。そして、ＣＰＵ３０は、プレイヤキャラクタＰＣが空振りすると予測される場合、プレイヤキャラクタＰＣが空振りするアニメーションをモニタ２に表示する処理を開始し（ステップ７６）、上記ステップ５５に進んで処理を行う。一方、ＣＰＵ３０は、プレイヤキャラクタＰＣがボールキャラクタＢＣを打ち返すと予測される場合、処理を次のステップ７４に進める。
【０１２３】
ステップ７４において、ＣＰＵ３０は、現時点からプレイヤキャラクタＰＣがボールキャラクタＢＣを打ち返すまでの時間ｔを算出し、カウントを開始してカウントデータＤｎを更新する。そして、ＣＰＵ３０は、プレイヤキャラクタＰＣがボールキャラクタＢＣを打ち返すアニメーションをモニタ２に表示する処理を開始し（ステップ７５）、処理を次のステップに進める。なお、打ち返すアニメーションは、上下角度ＵＤに応じたスイングで表現される。つまり、上下角度ＵＤで示される上下方向に向けてプレイヤキャラクタＰＣがテニスラケットを振り上げるまたは振り下ろすようなアニメーションが表現される。
【０１２４】
次に、ＣＰＵ３０は、コントローラ７から受信した操作情報に含まれる加速度データを取得し（ステップ７７）、当該取得した加速度データに基づいてプレイヤがコントローラ７を振る動作を終了したか否かを判断する（ステップ７８）。そして、ＣＰＵ３０は、コントローラ７を振る動作が継続している場合、処理を次のステップ７９に進める。一方、ＣＰＵ３０は、コントローラ７を振る動作が終了している場合、処理を次のステップ１０１に進める。なお、ステップ７７における加速度データの取得処理については、上述したステップ６１と同様であるため詳細な説明を省略する。また、ステップ７８における振り判定方法についても、ステップ７７で取得した加速度データを用いることを除いて上述したステップ６２と同様であるため、詳細な説明を省略する。
【０１２５】
ステップ７９において、ＣＰＵ３０は、上記ステップ７７で所得した加速度データによってＸ−Ｙ座標系にプロットされる間隔（データ間隔）を判定する。なお、ステップ７９におけるデータ間隔判定処理については、ステップ７７で取得した加速度データを用いることを除いて上記ステップ６７と同様であるため詳細な説明を省略する。次に、ＣＰＵ３０は、現在のカウントデータＤｎのカウント値が時間ｔに到達したか否かを判断する（ステップ８０）。そして、ＣＰＵ３０は、現在のカウント値が時間ｔに未到達である場合、カウントデータＤｎのカウント値を更新して（ステップ８１）、上記ステップ７７に戻って処理を繰り返す。一方、ＣＰＵ３０は、現在のカウント値が時間ｔに到達した場合、当該サブルーチンによる処理を終了して上記ステップ５３に処理を進める。
【０１２６】
図２２を参照して、上記ステップ５３における第１挙動処理の動作について説明する。上記ステップ８０の処理の後、ＣＰＵ３０は、ボールキャラクタＢＣを打ち返す初速度、方向、および位置を算出して当該位置にボールキャラクタＢＣを表示し（ステップ９１）、処理を次のステップに進める。具体的には、ＣＰＵ３０は、ボールキャラクタＢＣの速度および方向を速度ベクトル（ｖｘ、ｖｙ、ｖｚ）で示し、当該速度ベクトルを示すデータをボールキャラクタ速度データＤｉ１に格納する。ここで、速度ベクトル（ｖｘ、ｖｙ、ｖｚ）は、その大きさは固定値で設定される。そして、速度ベクトル（ｖｘ、ｖｙ、ｖｚ）の方向は、プレイヤがコントローラ７を振る方向、コントローラ７を振り始めたタイミングとボールキャラクタＢＣが到来するタイミングとの関係、および上下角度ＵＤ等に基づいて設定される。具体的には、ボールキャラクタＢＣが打ち返される左右方向は、プレイヤキャラクタＰＣがテニスラケットを振る左右方向（つまり、コントローラ７の振り方向）とボールキャラクタＢＣを打撃するタイミング（つまり、コントローラ７の振り始めのタイミング）で決定される。また、ボールキャラクタＢＣが打ち返される上下方向は、プレイヤキャラクタＰＣがテニスラケットを振る上下方向（つまり、上下角度ＵＤ）で決定される。例えば、上下角度ＵＤが正の角度であるときは振り下ろしであるため、ボールキャラクタＢＣの速度ベクトルが当該上下角度ＵＤの数値に応じた低い方向に設定される。また、上下角度ＵＤが負の角度であるときは振り上げであるため、ボールキャラクタＢＣの速度ベクトルが当該上下角度ＵＤの数値に応じた高い方向に設定される。また、ＣＰＵ３０は、ボールキャラクタＢＣがプレイヤキャラクタＰＣのテニスラケットで打撃された位置を仮想ゲーム空間の位置座標（ｘ、ｙ、ｚ）で示し、当該位置座標を示すデータをボールキャラクタ位置データＤｉ２に格納する。
【０１２７】
次に、ＣＰＵ３０は、コントローラ７から受信した操作情報に含まれる加速度データを取得する（ステップ９２）。そして、ＣＰＵ３０は、上記ステップ９２で所得した加速度データによってＸ−Ｙ座標系にプロットされる間隔（データ間隔）を判定して（ステップ９３）、処理を次のステップに進める。なお、ステップ９２における加速度データの取得処理については、上述したステップ６１と同様であるため詳細な説明を省略する。また、ステップ９３におけるデータ間隔判定処理については、ステップ９２で取得した加速度データを用いることを除いて上記ステップ６７と同様であるため詳細な説明を省略する。
【０１２８】
次に、ＣＰＵ３０は、現在のボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２に格納された速度ベクトル（ｖｘ、ｖｙ、ｖｚ）および位置座標（ｘ、ｙ、ｚ）に基づいて第１ボール軌道ＴＲ１を算出し、ボールキャラクタＢＣを当該第１ボール軌道ＴＲ１に沿って移動させてモニタ２に表示する（ステップ９４）。ＣＰＵ３０は、仮想ゲーム空間に現実世界の物理法則（例えば、重力、空気の抵抗、風の影響）を擬似的に、または厳密に定義し、速度ベクトル（ｖｘ、ｖｙ、ｖｚ）、位置座標（ｘ、ｙ、ｚ）、スピンパラメータＳ（ここでは、Ｓ＝０．０）、および当該物理法則に基づいて第１ボール軌道ＴＲ１を算出して第１ボール軌道データＤｅに格納する。そして、第１ボール軌道ＴＲ１に沿って移動するようにボールキャラクタＢＣの速度ベクトル（ｖｘ、ｖｙ、ｖｚ）および位置座標（ｘ、ｙ、ｚ）を新たに算出する。そして、ＣＰＵ３０は、新たな速度ベクトル（ｖｘ、ｖｙ、ｖｚ）および位置座標（ｘ、ｙ、ｚ）をボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２に格納して、位置座標（ｘ、ｙ、ｚ）にボールキャラクタＢＣをモニタ２に表示する。そして、ＣＰＵ３０は、処理を次のステップに進める。
【０１２９】
次に、ＣＰＵ３０は、上記ステップ９２で取得した加速度データに基づいてプレイヤがコントローラ７を振る動作を終了したか否かを判断する（ステップ９５）。そして、ＣＰＵ３０は、コントローラ７を振る動作が継続している場合、上記ステップ９２に戻って処理を繰り返す。一方、ＣＰＵ３０は、コントローラ７を振る動作が終了している場合、処理を次のステップ５４に進める。なお、ステップ９５における振り判定方法については、ステップ９２で取得した加速度データを用いることを除いて上述したステップ６２と同様であるため、詳細な説明を省略する。
【０１３０】
上記ステップ９１〜ステップ９５の処理から明らかなように、第１挙動処理とはボールキャラクタＢＣが打撃されてからプレイヤがコントローラ７を振り終わるまでの処理である。図２４に示すように、ボールキャラクタＢＣが打ち返される挙動を表現する処理（ボール挙動処理）は、時刻Ｔ３以降に行われ、モーション認識処理の途中から開始される。つまり、コントローラ７を振り始めてから振り終わるまでの途中段階で判定された操作情報（加速度データ）に基づいて、ボールキャラクタＢＣが打ち返される様子がゲーム画像に反映されることになる。ここで、上記ステップ５２のアニメーション開始処理は、アニメーション処理のうち、時刻Ｔ２〜Ｔ３で行われる処理となる。また、上記ステップ５３の第１挙動処理は、ボール挙動処理のうち、時刻Ｔ３〜Ｔ４で行われる処理となる。また、後述する第２挙動処理は、プレイヤがコントローラ７を振り終わった後にボールキャラクタＢＣが打ち返される挙動を表現する処理であり、ボール挙動処理のうち、時刻Ｔ４以降に行われる処理となる。
【０１３１】
図２３を参照して、上記ステップ５４における第２挙動処理の動作について説明する。上記ステップ９５の処理の後、ＣＰＵ３０は、始点Ｐｓから終点Ｐｅまでの角度θ（図１４参照）を算出し、始点−終点角度データＤｊに格納する（ステップ１０１）。次に、ＣＰＵ３０は、角度θをスピンパラメータＳに変換（図１５参照）し、スピンパラメータＤｋに格納する（ステップ１０２）。そして、ＣＰＵ３０は、最大プロット間隔データＤｌに格納されたデータ間隔に基づいて、第２ダミーボールの速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）を算出し、第２ダミーボール速度データＤｈ１に格納して（ステップ１０３）、処理を次のステップに進める。
【０１３２】
ここで、第２ダミーボールの速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）は、プレイヤキャラクタＰＣがテニスラケットでボールキャラクタＢＣを打撃した時点（図２４に示す時刻Ｔ３）まで遡り、上記データ間隔（つまり、コントローラ７を振った速度）による影響を加えてボールキャラクタＢＣの速度ベクトルを再算出するものである。したがって、速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）の大きさは、上記データ間隔に応じて設定される。具体的には、上記データ間隔が相対的に広いときは速度ベクトルの大きさを相対的に大きく設定し、上記データ間隔が相対的に狭いときは速度ベクトルの大きさを相対的に狭く設定する。そして、速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）の方向は、上記ステップ９１と同様に設定する。
【０１３３】
次に、ＣＰＵ３０は、上記ステップ７５で開始しているプレイヤキャラクタＰＣがボールキャラクタＢＣを打ち返すアニメーションを調整する処理を行ってモニタ２に表示し（ステップ１０４）、処理を次のステップに進める。これは、上記ステップ７５（図２４に示す時刻Ｔ２）ではプレイヤがコントローラ７を振った左右および上下方向および振るタイミングが判明しているだけであるため、それらの情報のみに基づいたアニメーションが開始されている。しかしながら、ステップ１０４（図２４に示す時刻Ｔ４）ではプレイヤがコントローラ７に加えたひねり角度やコントローラ７を振った速度がさらに判明しているため、より多くの情報に基づいたアニメーションを再現できる。つまり、上記ステップ１０４からは、上記ステップ７５から開始されているアニメーションを、ひねり角度から判明したトップスピンやバックスピンを加えるスイングや上記データ間隔から判明したスイング速度が反映されたアニメーションに調整してモニタ２に表示する。
【０１３４】
次に、ＣＰＵ３０は、ボールキャラクタ位置データＤｉ２を参照し、ボールキャラクタＢＣが仮想ゲーム空間における所定の空間まで到達したか否かを判断する（ステップ１０５）。ここで、所定の空間とは、例えば、仮想ゲーム空間に設定された相手コート上の空間やテニスコート外（アウト）の空間である。そして、ＣＰＵ３０は、ボールキャラクタＢＣが所定の空間まで到達していない場合、処理を次のステップ１０６に進める。一方、ＣＰＵ３０は、ボールキャラクタＢＣが所定の空間に到達している場合、処理を次のステップ１０９に進める。
【０１３５】
ステップ１０６において、ＣＰＵ３０は、第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２を算出し、第１ボール軌道ＴＲ１から第２ボール軌道ＴＲ２へボールキャラクタＢＣの軌道を補間する処理を行う。そして、ＣＰＵ３０は、補間された軌道に沿ってボールキャラクタＢＣを移動させてボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２を更新し、当該ボールキャラクタＢＣをモニタ２に表示して（ステップ１０７）、処理を次のステップ１０８に進める。
【０１３６】
図２５および図２６を参照して、第２ボール軌道ＴＲ２および補間処理について説明する。上記ステップ９４で算出される第１ボール軌道ＴＲ１は、初期モーション認識処理で認識された情報（コントローラ７の左右および上下振り方向、振るタイミング）のみで算出されたボールキャラクタＢＣの軌道である。一方、第２ボール軌道ＴＲ２は、モーション認識処理全体で認識可能な情報（コントローラ７へのひねり角度および振り速度）を加えて算出されるボールキャラクタＢＣの軌道である。
【０１３７】
第２ボール軌道ＴＲ２は、第１ボール軌道ＴＲ１と同様に仮想ゲーム空間に現実世界の物理法則を定義して、速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）、位置座標（ｘ２、ｙ２、ｚ２）、スピンパラメータＳ、および当該物理法則に基づいて算出され第２ボール軌道データＤｆに格納される。ＣＰＵ３０は、ボールキャラクタＢＣがプレイヤキャラクタＰＣのテニスラケットで打撃された位置を位置座標（ｘ２、ｙ２、ｚ２）および上記ステップ１０３で求められた速度ベクトル（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）を用いて、第１ボール軌道ＴＲ１と同様に算出される軌道にスピンパラメータＳの影響を加えて第２ボール軌道ＴＲ２を算出する。
【０１３８】
図２５に示すように、プレイヤがコントローラ７に「左ひねり」を加えながら「左振り」する、またはプレイヤがコントローラ７に「右ひねり」を加えながら「右振り」すると、スピンパラメータＳ＞０．０となって「トップスピン」が表現される。一方、プレイヤがコントローラ７に「右ひねり」を加えながら「左振り」する、またはプレイヤがコントローラ７に「左ひねり」を加えながら「右振り」すると、スピンパラメータＳ＜０．０となって「バックスピン」が表現される。ＣＰＵ３０は、スピンパラメータＳがトップスピンを示す場合（Ｓ＞０．０）、軌道が縦方向に急降下するように変化させる。また、ＣＰＵ３０は、スピンパラメータＳがバックスピンを示す場合（Ｓ＜０．０）、縦方向に飛距離が増加するように、かつ、振り方向に応じて横方向に曲がる（「左振り」では右に曲がり、「右振り」では左に曲がる）ように軌道を変化させる。そして、ＣＰＵ３０は、スピンパラメータＳがスピンなしを示す場合（Ｓ＝０．０）、軌道にスピンパラメータＳによる変化を加えない。
【０１３９】
図２４および図２６に示すように、第２ボール軌道ＴＲ２は、コントローラ７が振り終わった時刻Ｔ４で算出されるため、モニタ２に表示されているボールキャラクタＢＣが既に第１ボール軌道ＴＲ１に沿って移動している（図２６の時刻Ｔ３〜Ｔ４間の太線）。一方、プレイヤがコントローラ７をスイングして得られたデータを全て反映した軌道は第２ボール軌道ＴＲ２であるため、ボールキャラクタＢＣの軌道を第１ボール軌道ＴＲ１から第２ボール軌道ＴＲ２に変更して移動させるのが望ましい。したがって、プレイヤに違和感を与えずにボールキャラクタＢＣを第２ボール軌道ＴＲ２に沿って移動させるためには、第１ボール軌道ＴＲ１から第２ボール軌道ＴＲ２までスムーズに接続しなければならない（図２６の時刻Ｔ４〜Ｔ５間の太線）。本実施例では、第１ボール軌道ＴＲ１から第２ボール軌道ＴＲ２まで接続する過程（図１６に示す時刻Ｔ４〜Ｔ５）で、それぞれの軌道に沿って表示されないダミーボールを飛ばし、それらのダミーボール位置の間を補間する位置をボールキャラクタＢＣの位置としている。
【０１４０】
ＣＰＵ３０は、第１ボール軌道ＴＲ１に沿って飛ばすダミーボールを第１ダミーボールＢ１とし、第１ダミーボール速度（ｖ１ｘ、ｖ１ｙ、ｖ１ｚ）および第１ダミーボール位置（ｘ１、ｙ１、ｚ１）を第１ダミーボールのボールパラメータとする。また、ＣＰＵ３０は、第２ボール軌道ＴＲ２に沿って飛ばすダミーボールを第２ダミーボールＢ２とし、第２ダミーボール速度（ｖ２ｘ、ｖ２ｙ、ｖ２ｚ）および第２ダミーボール位置（ｘ２、ｙ２、ｚ２）を第２ダミーボールのボールパラメータとする。そして、補間に要する時間（図２６に示す時刻Ｔ５−Ｔ４）として補間時間Ｔｉを設定する。
【０１４１】
まず、時刻Ｔ４において、ＣＰＵ３０は、ボールキャラクタデータＤｉに格納されているボールキャラクタ速度（ｖｘ、ｖｙ、ｖｚ）およびボールキャラクタ位置（ｘ、ｙ、ｚ）をそれぞれ第１ダミーボール速度（ｖ１ｘ、ｖ１ｙ、ｖ１ｚ）および第１ダミーボール位置（ｘ１、ｙ１、ｚ１）として、第１ダミーボールデータＤｇに格納する。一方、第２ダミーボールデータＤｈに基づいて、第２ダミーボールＢ２を第２ボール軌道ＴＲ２に沿って時刻Ｔ４に相当する位置まで移動させ、第２ダミーボールデータＤｈを更新する。
【０１４２】
時刻Ｔ４〜Ｔ５の間の時刻Ｔｎにおいて、ＣＰＵ３０は、第１ダミーボールＢ１および第２ダミーボールＢ２それぞれのボールパラメータを物理計算で更新し、それぞれ第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２に沿ってフレーム毎に移動させる。そして、ＣＰＵ３０は、以下の数式を用いてそれらのダミーボールを補間する位置および速度を算出して、ボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２を更新する（図２６の時刻Ｔ４〜Ｔ５間の太線）。
ｒａｔｉｏ＝（Ｔｎ−Ｔ４）÷Ｔｉ
ｘ  ＝  ｘ２  ×  ｒａｔｉｏ  ＋  ｘ１  ×  （１．０  −  ｒａｔｉｏ）
ｙ  ＝  ｙ２  ×  ｒａｔｉｏ  ＋  ｙ１  ×  （１．０  −  ｒａｔｉｏ）
ｚ  ＝  ｚ２  ×  ｒａｔｉｏ  ＋  ｚ１  ×  （１．０  −  ｒａｔｉｏ）
ｖｘ  ＝  ｖ２ｘ  ×  ｒａｔｉｏ  ＋  ｖ１ｘ  ×  （１．０  −  ｒａｔｉｏ）
ｖｙ  ＝  ｖ２ｙ  ×  ｒａｔｉｏ  ＋  ｖ１ｙ  ×  （１．０  −  ｒａｔｉｏ）
ｖｚ  ＝  ｖ２ｚ  ×  ｒａｔｉｏ  ＋  ｖ１ｚ  ×  （１．０  −  ｒａｔｉｏ）このように、時刻Ｔ４〜Ｔ５の間のボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２は、経過時刻毎の第１ダミーボールＢ１および第２ダミーボールＢ２それぞれの速度および位置を所定割合で重み付けをして平均化して求められている。
【０１４３】
時刻Ｔ５以降では、ＣＰＵ３０は、第１ダミーボールＢ１および第２ダミーボールＢ２を破棄する。そして、ＣＰＵ３０は、現在のボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２に格納された速度ベクトル（ｖｘ、ｖｙ、ｖｚ）および位置座標（ｘ、ｙ、ｚ）に基づいて第２ボール軌道ＴＲ２を算出し、第２ボール軌道ＴＲ２に沿ってボールキャラクタＢＣを移動させてボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２を更新し、当該ボールキャラクタＢＣをモニタ２に表示する（図２６の時刻Ｔ５以降の太線）。
【０１４４】
図２３に戻り、ステップ１０８において、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返された、またはボールキャラクタＢＣがアウトになった（コート外に直接出る）か否かを判断する。そして、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返されておらず、アウトにもなっていない場合、上記ステップ１０６に戻って処理を繰り返す。一方、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返された。またはアウトになった場合、当該サブルーチンによる処理を終了して、上記ステップ５５に処理を進める。
【０１４５】
一方、上記ステップ１０５において、ボールキャラクタＢＣが所定の空間に到達している場合、ＣＰＵ３０は、ボールキャラクタＢＣを当該第１ボール軌道ＴＲ１に沿って移動させてモニタ２に表示し（ステップ１０９）、処理を次のステップに進める。ＣＰＵ３０は、現在のボールキャラクタ速度データＤｉ１およびボールキャラクタ位置データＤｉ２に格納された速度ベクトル（ｖｘ、ｖｙ、ｖｚ）および位置座標（ｘ、ｙ、ｚ）に基づいて第１ボール軌道ＴＲ１を算出し、ボールキャラクタＢＣを当該第１ボール軌道ＴＲ１に沿って移動させてモニタ２に表示する。このステップ１０９は、上記ステップ９４と同様の処理であるため、これ以上の説明を省略する。
【０１４６】
次に、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返された、またはボールキャラクタＢＣがアウトになった（コート外に直接出る）か否かを判断する（ステップ１１０）。そして、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返されておらず、アウトにもなっていない場合、上記ステップ１０９に戻って処理を繰り返す。一方、ＣＰＵ３０は、ボールキャラクタＢＣが相手キャラクタＥＣに打ち返された。またはアウトになった場合、当該サブルーチンによる処理を終了して、上記ステップ５５に処理を進める。
【０１４７】
このように、上記実施形態に係るゲーム装置３は、コントローラ７の前面がプレイヤの前方方向に向くようにプレイヤが一方の手でコントローラ７を把持していれば、当該コントローラ７が振られた方向（コントローラ７の移動方向）やひねり方向（コントローラ７のＺ軸を回転軸とした回転方向）等の動きを正確に判定することができる。また、プレイヤは、コントローラ７の上面をどのような方向に向けて把持して振ってもかまわない。したがって、プレイヤがコントローラ７を持つ方向（コントローラ７の姿勢）に対する自由度が非常に高くなる。また、コントローラ７本体に加えられた回転動作を判別することができ、プレイヤがコントローラ７を回転させながらスイングするような複数の動きが複合されたものについても判定できる。そして、このようなコントローラ７に加えられた回転動作を操作入力として用いることができるため、入力可能なコントローラ７の操作の種類が豊富となる。
【０１４８】
なお、上述した処理手順では、第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２の算出をフレーム毎に行う（つまり、ステップ９４、ステップ１０６、およびステップ１０９で処理ループの中で行う）ように説明したが、他の手順で軌道計算をしてもかまわない。例えば、１度算出された第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２をメモリに記憶しておき、適宜記憶された軌道データを利用してもかまわない。この場合、処理ループの前（例えば、ステップ９１の後、ステップ１０３の後）に第１ボール軌道ＴＲ１および／または第２ボール軌道ＴＲ２を算出しておけば、フレーム毎に軌道計算をする必要がなくなる。
【０１４９】
また、上述した説明では、コントローラ７から出力される３軸加速度データを用いてテニスゲームを行う例を説明したが、他のゲーム処理にも用いることができる。例えば、プレイヤキャラクタが何らかのオブジェクトを振るゲーム（卓球、バドミントン、野球、剣で斬る等）に適用できることは言うまでもない。また、上述した説明では、コントローラ７の動きを判別する動き判別装置をゲームシステム１に適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータなどの情報処理装置にも適用することができる。例えば、判別された入力装置の動きに応じて、情報処理装置が表示しているデータが移動したり、情報処理装置が情報を表示しているページを変更したり、図形を描いたりする等、動き判別装置による判別結果に基づいて様々な処理を行うことができる。さらに、動き判別装置は、判別した入力装置の動きに応じて、当該入力装置の動きを示す動きデータを作成して他の装置に出力してもかまわない。
【０１５０】
また、コントローラ７に設けられた加速度センサ７０１は、互いに直交する３軸成分に分けてそれぞれ検出して出力する３軸加速度センサを用いて説明したが、少なくとも直交する２軸成分をそれぞれ検出する加速度センサを用いれば本発明を実現することができる。例えば、コントローラ７が配置された３次元空間における加速度をＸおよびＹ軸（図３、図４参照）の２軸成分に分けてそれぞれ検出して出力する加速度センサを用いても、上述した左右振り方向の判定やひねり方向の判定を行うことができる。この場合、上述した説明でＺ軸成分の加速度を用いて判定していた振り始めおよび振り終わりの判定ができなくなるが、ＸおよびＹ軸に対する加速度成分から得られる左右振りによって生じる遠心力成分を用いて振り始めおよび振り終わりを判定してもいいし、加速度センサ７０１とは異なる他のセンサを用いて振り始めおよび振り終わりを判定してもかまわない。また、プレイヤがコントローラ７をスイングするときは操作ボタン７２の何れかを押下するようなゲームルールを設定して、当該操作ボタン７２の何れかが押下されている期間に応じて振り始めおよび振り終わりを判定してもかまわない。
【０１５１】
また、上述した説明では、コントローラ７とゲーム装置３とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置３とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置３の接続端子に接続する。
【０１５２】
また、コントローラ７から無線送信される送信データを受信する受信手段として、ゲーム装置３の接続端子に接続された受信ユニット６を用いて説明したが、ゲーム装置３の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ３０に出力される。
【０１５３】
また、上述したコントローラ７の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ７における撮像情報演算部７４の位置（撮像情報演算部７４の光入射口）は、ハウジング７１の前面でなくてもよく、ハウジング７１の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【産業上の利用可能性】
【０１５４】
本発明に係る動き判別装置および動き判別プログラムは、入力装置の姿勢に対する自由度の高い操作を実現しながら当該入力装置の動きを判別することができ、ゲームコントローラの動きに応じて操作されるゲーム装置やゲームプログラム等、入力装置の動きを判別する装置やプログラムとして有用である。
【図面の簡単な説明】
【０１５５】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置３の機能ブロック図
【図３】図３のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面後方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図３のコントローラ７の構成を示すブロック図
【図７】図３のコントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図８】図３のコントローラ７から受信したＸ、Ｙ、およびＺ軸方向加速度データに応じて、モニタ２に表現されたテニスゲーム画像の一例を示す図
【図９】ＸおよびＹ軸方向加速度データがそれぞれ示す加速度の正負および大きさをＸ軸およびＹ軸としたグラフの一例
【図１０】図９に示したグラフにおいて、左振りによる推移の一例
【図１１】図１０に示した時系列的に隣接する点Ｐ４およびＰ５と原点とをそれぞれ結ぶ直線で囲まれた三角形の面積Ａ４５を示す図
【図１２】図１０で示した時系列的に連続する点Ｐ１〜Ｐ３および原点によって形成された三角形を累積した面積Ａ１３と、点Ｐ３〜Ｐ６および原点によって形成された三角形を累積した面積Ａ３６とを示す図
【図１３】図３のコントローラ７のひねり方向を説明するための斜視図
【図１４】コントローラ７に加えられたひねりに応じて、ＸおよびＹ軸方向加速度データがそれぞれ示す加速度の値を示すグラフの一例
【図１５】図１４（ａ）〜図１４（ｃ）の角度θに応じて算出されるスピンパラメータＳの一例を示すグラフ
【図１６】コントローラ７の上下方向に傾けた状態とそれらの座標軸との関係を説明するための図
【図１７】Ｚ軸方向加速度データに応じて算出される上下角度ＵＤの一例を示すグラフ
【図１８】ゲーム装置３のメインメモリ３３に記憶される主なデータを示す図
【図１９】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図２０】図１９におけるステップ５１の初期モーション認識処理の詳細な動作を示すサブルーチン
【図２１】図１９におけるステップ５２のアニメーション開始処理の詳細な動作を示すサブルーチン
【図２２】図１９におけるステップ５３の第１挙動処理の詳細な動作を示すサブルーチン
【図２３】図１９におけるステップ５４の第２挙動処理の詳細な動作を示すサブルーチン
【図２４】モーション認識処理、アニメーション処理、およびボール挙動処理がそれぞれ行われるタイミングを示す図
【図２５】スピンパラメータＳに応じて決定されるボール挙動の一例を示す図
【図２６】第１ボール軌道ＴＲ１および第２ボール軌道ＴＲ２の一例を示す図
【符号の説明】
【０１５６】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
３０…ＣＰＵ
３１…メモリコントローラ
３２…ＧＰＵ
３３…メインメモリ
３４…ＤＳＰ
３５…ＡＲＡＭ
３６…コントローラＩ／Ｆ
３７…ビデオＩ／Ｆ
３８…外部メモリＩ／Ｆ
３９…オーディオＩ／Ｆ
４０…ディスクドライブ
４１…ディスクＩ／Ｆ
４…光ディスク
５…外部メモリカード
６…受信ユニット
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０５…電池
８…マーカ
【図１】
2008269650.tif 000003
【図２】
2008269650.tif 000004
【図３】
2008269650.tif 000005
【図４】
2008269650.tif 000006
【図５】
2008269650.tif 000007
【図６】
2008269650.tif 000008
【図７】
2008269650.tif 000009
【図８】
2008269650.tif 000010
【図９】
2008269650.tif 000011
【図１０】
2008269650.tif 000012
【図１１】
2008269650.tif 000013
【図１２】
2008269650.tif 000014
【図１３】
2008269650.tif 000015
【図１４】
2008269650.tif 000016
【図１５】
2008269650.tif 000017
【図１６】
2008269650.tif 000018
【図１７】
2008269650.tif 000019
【図１８】
2008269650.tif 000020
【図１９】
2008269650.tif 000021
【図２０】
2008269650.tif 000022
【図２１】
2008269650.tif 000023
【図２２】
2008269650.tif 000024
【図２３】
2008269650.tif 000025
【図２４】
2008269650.tif 000026
【図２５】
2008269650.tif 000027
【図２６】
2008269650.tif 000028