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