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