(57)【特許請求の範囲】
【請求項１】
仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法において、
物体重心の接触面への運動方向の投影点Ｑと、該物体と面の接触点Ｐ１ 〜Ｐｎとからなる各ベクトル〈ＱＰ１〉〜〈ＱＰｎ〉と、該各ベクトルにつき前記投影点Ｑの内側判定に有効に使用されたか否かを表す使用フラグＵＦ１ 〜ＵＦｎとをそれぞれ関連付けて記憶したデータテーブルと、
前記データテーブルより抽出した２つのベクトルの外積と、前記接触面の法線ベクトル〈Ｎ〉との内積を求める第１の演算手段と、
前記データテーブルの情報及び第１の演算手段を使用した所定の処理により前記投影点Ｑが前記接触点Ｐ１〜Ｐｎにより構成される最大面積の多角形の領域内にあるか否かを判定する制御手段とを備え、該制御手段は、
（１）ベクトル〈ＱＰ１〉〜〈ＱＰｎ〉の使用フラグＵＦ１〜ＵＦｎを未使用に初期化すると共に、任意最初のベクトルＱＰ(ｋ) を選択してその使用フラグＵＦ(ｋ）を使用となし、かつｉ＝ｋとする処理と、
（２）ｉ≠ｊの条件で、前記第１の演算手段によりベクトル〈ＱＰ(ｉ) 〉，〈ＱＰ(ｊ) 〉の外積と、法線ベクトル〈Ｎ〉との内積を求め、その演算結果が内側判定の符号（例えば＞０）となるベクトル〈ＱＰ(ｊ)〉を探査する処理と、
（３）前記（２）の条件を満たすベクトル〈ＱＰ(ｊ) 〉が存在しないことにより、投影点Ｑが接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域外にあると判定する処理と、を備えることを特徴とする仮想物体の運動生成方法。
【請求項２】
前記制御手段は、
（４）前記（２）の演算結果が内側判定の符号であることにより、その際のｊが指す使用フラグＵＦ（ｊ）を使用となし、かつ前記第１の演算手段により該ベクトル〈ＱＰ(ｊ)〉と前記（１）で選択した最初のベクトル〈ＱＰ(ｋ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、
（５）前記（４）の演算結果が内側判定の符号であることにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域内にあると判定する処理と、
（６）前記（４）の演算結果が内側判定の符号ではないこと（例えば≦０）により、その際のｉにｊの内容を転送し、かつ該ｊの内容を次の未使用ベクトルを指す値に更新して前記（２）に戻る処理と、を更に備えることを特徴とする請求項１に記載の仮想物体の運動生成方法。
【請求項３】
制御の流れを変えるための制御フラグＭＦを更に備え、
前記制御手段は、
（７）前記（２）の演算結果が内側判定の符号ではないことにより、その際のベクトル〈ＱＰ(ｊ)〉の使用フラグＵＦ（ｊ）を未使用にし、かつｊの内容を前記未使用ベクトルを指すためのレジスタｍに保持すると共に、前記制御フラグＭＦを真となし、かつ前記ｊの内容を次の未使用ベクトルを指す値に更新して前記（２）に戻る処理と、
（８）前記（４）の演算結果が内側判定の符号ではなく、かつ制御フラグＭＦが真により、その時点のｊよりも以前の未使用ベクトルを指すレジスタｍを探査し、かつ前記第１の演算手段により当該ベクトル〈ＱＰ(ｊ)〉と該探査したベクトル〈ＱＰ(ｍ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、
（９）前記（８）の演算結果が内側判定の符号であることにより、前記第１の演算手段によりその際のベクトル〈ＱＰ(ｍ)〉と前記（１）で選択した最初のベクトル〈ＱＰ(ｋ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、
（１０）前記（９）の演算結果が内側判定の符号であることにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域内にあると判定する処理と、を更に備えることを特徴とする請求項２に記載の仮想物体の運動生成方法。
【請求項４】
前記制御手段は、
（１４）前記（９）の演算結果が内側判定の符号ではなく、かつデータテーブルに未使用ベクトルが存在しないことにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域外にあると判定する処理、を更に備えることを特徴とする請求項３に記載の仮想物体の運動生成方法。
【請求項５】
２つのベクトルの内積を求める第２の演算手段を更に備え、
前記制御手段は、前記投影点Ｑが前記接触点Ｐ１ 〜Ｐｎで構成される最大面積の多角形の領域外に在ると判定したことにより、
（１１）任意の整数ｉ，ｊ（１≦ｉ＜ｊ≦ｎ）に対し、前記第２の演算手段によるベクトル〈ＱＣｉｊ〉，〈Ｐｉ Ｐｊ〉の内積が０を満たす線分ＰｉＰｊ上の点Ｃｉｊであって、距離｜ＱＣｉｊ｜が最小となる点Ｃｍｎを求め、該点Ｃｍｎを物体の回転中心の座標となす処理、を更に備えることを特徴とする請求項１又は４に記載の仮想物体の運動生成方法。
【請求項６】
前記制御手段は、
（１２）前記接触点Ｐ１〜Ｐｎの中で、前記投影点Ｑに最も近い点Ｐｋとの間の距離｜ＱＰｋ｜を求める処理と、
（１３）２点Ｑ，Ｃｍｎ間の距離｜ＱＣｍｎ｜と前記距離｜ＱＰｋ｜の小さい方に対応する点Ｃｍｎ又はＰｋを物体の回転中心の座標となす処理と、を更に備えることを特徴とする請求項５に記載の仮想物体の運動生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は仮想物体の運動生成方法に関し、更に詳しくは、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法に関する。
ゲーム機等におけるＣＧアニメーションでは、ゲームの進行により、画面の仮想上の物体が仮想上の面（地面や対戦相手の面等）と接触（衝突）する場合も少なくない。係る場合の物体の運動の画像を、予め想定したゲームのシナリオに従って複数用意しておくと、自然な動きが得られないばかりか、用意する画像の量も膨大となる。一方、高性能なコンピュータ等を使用すれば、運動のシミュレーション画像をリアルタイムに生成することも可能となるが、パーソナルコンピュータやゲーム機等でこれを実現するのは極めて困難である。そこで、少ない情報と簡単な演算で、物体の物理法則に準じた自然な運動を自動生成することの可能な仮想物体の運動生成方法の提供が望まれる。
【０００２】
【従来の技術】
図１３は従来技術を説明する図である。
図１３（Ａ）において、例えばある描画時刻ｔ0 では、物体ａが地面に向かって速度ｖで落下している。図１３（Ｂ）において、次の描画時刻ｔ1 では、物体ａが地面に速度ｖで衝突した。係る場合に、従来の、特にゲーム機等では、図１３（Ｂ）の状態で物体ａの運動が停止していた。
【０００３】
【発明が解決しようとする課題】
しかし、このような物体ａの運動は物理的に不自然であり、ＣＧアニメーションの質、ひいてはゲームの質を低下させる。一方、予め図１３（Ａ），（Ｂ）のような事態が生じるのを想定して、予めゲームシナリオの中に図１３（Ｃ）の様な画面を用意しておくことが可能である。しかし、シナリオ毎に図１３（Ｃ）の様な画面を用意しても、自然な動きが得られないばかりか、用意する画像の量が膨大となる。
【０００４】
本発明の目的は、少ない情報と簡単な演算で物体の物理法則に準じた自然な運動を高速に自動生成可能な仮想物体の運動生成方法を提供することにある。
【０００５】
【課題を解決するための手段】
上記の課題は例えば図１（Ａ）の構成により解決される。即ち、本発明（１）の運動生成方法は、仮想の物体が仮想の面と接触した際の該物体の運動を生成する仮想物体の運動生成方法において、物体重心の接触面への運動方向の投影点Ｑと、該物体と面の接触点Ｐ１ 〜Ｐｎとからなる各ベクトル〈ＱＰ１〉〜〈ＱＰｎ〉と、該各ベクトルにつき前記投影点Ｑの内側判定に有効に使用されたか否かを表す使用フラグＵＦ１ 〜ＵＦｎとをそれぞれ関連付けて記憶したデータテーブルと、前記データテーブルより抽出した２つのベクトルの外積と、前記接触面の法線ベクトル〈Ｎ〉との内積を求める第１の演算手段と、前記データテーブルの情報及び第１の演算手段を使用した所定の処理により前記投影点Ｑが前記接触点Ｐ１〜Ｐｎにより構成される最大面積の多角形の領域内にあるか否かを判定する制御手段とを備え、該制御手段は、（１）ベクトル〈ＱＰ１〉〜〈ＱＰｎ〉の使用フラグＵＦ１〜ＵＦｎを未使用に初期化すると共に、任意最初のベクトルＱＰ(ｋ) を選択してその使用フラグＵＦ(ｋ）を使用となし、かつｉ＝ｋとする処理と、（２）ｉ≠ｊの条件で、前記第１の演算手段によりベクトル〈ＱＰ(ｉ) 〉，〈ＱＰ(ｊ) 〉の外積と、法線ベクトル〈Ｎ〉との内積を求め、その演算結果が内側判定の符号（例えば＞０）となるベクトル〈ＱＰ(ｊ)〉を探査する処理と、（３）前記（２）の条件を満たすベクトル〈ＱＰ(ｊ) 〉が存在しないことにより、投影点Ｑが接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域外にあると判定する処理と、を備えるものである。
【０００６】
本発明（１）の処理は、面と接触する物体に回転モーメントが発生するか否の前判定を行う処理に位置し、点Ｑが点Ｐ1 〜Ｐn で構成される最大面積の多角形の領域外に在る場合は回転モーメントが発生し、それ以外の場合は回転モーメントが発生しないとする物理的な着想に基づいている。従って、物体と面との接触面の形状等には一切関知せず、点Ｑ（即ち、物体の重心Ｇ）及び接触点Ｐ1 〜Ｐn の座標等からなる、単純で、かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた自然な運動を高速に自動生成可能となる。
【０００７】
本発明（１）においては、例えば図９（Ｂ）に示す様な場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ3 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ5 〉＜０
▲５▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ6 〉＜０
で終了し、点Ｑは最大面積の５角形（Ｐ1 Ｐ2 Ｐ3 Ｐ5 Ｐ6 ）の外側にある。この場合に、図のハッチングで示した様な物体と面との接触面の形状は問わない。従って、この判定処理のみならず、その前後の処理における必要な座標データの準備、取扱及び演算が大幅に単純化され、処理が軽減される。
【０００８】
ところで、もし点Ｑの内側判定が先に得られれば、点Ｑの外側判定を待たなくても、物体に回転モーメントが発生しないと判定できる。
そこで、好ましくは、本発明（２）においては、上記本発明（１）において、前記制御手段は、（４）前記（２）の演算結果が内側判定の符号であることにより、その際のｊが
指す使用フラグＵＦ（ｊ）を使用となし、かつ前記第１の演算手段により該ベクトル〈ＱＰ(ｊ)〉と前記（１）で選択した最初のベクトル〈ＱＰ(ｋ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、（５）前記（４）の演算結果が内側判定の符号であることにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域内にあると判定する処理と、（６）前記（４）の演算結果が内側判定の符号ではないこと（例えば≦０）により、その際のｉにｊの内容を転送し、かつ該ｊの内容を次の未使用ベクトルを指す値に更新して前記（２）に戻る処理と、を更に備える。
【０００９】
本発明（２）によれば、例えば図７（Ａ）に示す様な場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＞０
で終了し、点Ｑは３角形（Ｐ1 ，Ｐ2 ，Ｐ3 ）の内側に含まれる。即ち、最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。従って、本発明（２）によれば、物体に回転モーメントを発生させるか否かの判定を、点Ｑと点Ｐ1 〜Ｐn との相対位置に応じて、能率良く、より早く判定できる。
【００１０】
ところで、上記図７（Ａ）の場合の様に、処理（２）の演算について毎回＞０の結果が得られる場合は良いが、必ずしもそうなるとは限らない。これを図８（Ａ）の例で説明する。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＜０
となり、次に、
▲３▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉＜０
となる。即ち、この場合のベクトル〈ＱＰ4 〉は点Ｑの内側判定には当面は有用では無い。そこで、次のベクトル〈ＱＰ5 〉を選択し、処理を進めると、
▲４▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉＞０→〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉＜０
となる。即ち、点Ｑの内側判定に有用な新たなベクトル〈ＱＰ5 〉が得られたが、この時点では点Ｑの最終的な内側判定は得られていない。
【００１１】
しかるに、上記一旦有用でないとされたベクトル〈ＱＰ4 〉であっても、この新たなベクトル〈ＱＰ5 〉との関係で調べると、点Ｑの内側判定に有用となるかも知れない。そこで、このベクトル〈ＱＰ4 〉を再度検査し、
▲５▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ4 〉＞０
の結果を得る。しかも、その内側判定では、
〈Ｎ〉・〈ＱＰ4 〉×〈ＱＰ1 〉＞０
となり、この時点で、点Ｑは５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ4 ）の内側に含まれる。従って、最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。
【００１２】
そこで、好ましくは、本発明（３）においては、上記本発明（２）において、制御の流れを変えるための制御フラグＭＦを更に備え、前記制御手段は、（７）前記（２）の演算結果が内側判定の符号ではないことにより、その際のベクトル〈ＱＰ(ｊ)〉の使用フラグＵＦ（ｊ）を未使用にし、かつｊの内容を前記未使用ベクトルを指すためのレジスタｍに保持すると共に、前記制御フラグＭＦを真となし、かつ前記ｊの内容を次の未使用ベクトルを指す値に更新して前記（２）に戻る処理と、（８）前記（４）の演算結果が内側判定の符号ではなく、かつ制御フラグＭＦが真により、その時点のｊよりも以前の未使用ベクトルを指すレジスタｍを探査し、かつ前記第１の演算手段により当該ベクトル〈ＱＰ(ｊ)〉と該探査したベクトル〈ＱＰ(ｍ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、（９）前記（８）の演算結果が内側判定の符号であることにより、前記第１の演算手段によりその際のベクトル〈ＱＰ(ｍ)〉と前記（１）で選択した最初のベクトル〈ＱＰ(ｋ)〉の外積と、法線ベクトル〈Ｎ〉との内積を求める処理と、（１０）前記（９）の演算結果が内側判定の符号であることにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域内にあると判定する処理と、を更に備える。
【００１３】
この様に、本発明（３）によれば、不使用ベクトルの早期再活用処理を設けたことにより、点Ｑの内側判定は接触点のより若い番号で得られる。従って、残りのベクトルの検査を行う必要は無く、判定処理が速い。
また好ましくは、本発明（４）においては、上記本発明（３）において、前記制御手段は、（１４）前記（９）の演算結果が内側判定の符号ではなく、かつデータテーブルに未使用ベクトルが存在しないことにより、前記投影点Ｑが前記接触点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域外にあると判定する処理、を更に備える。
また上記の課題は例えば図１（Ｂ）の構成により解決される。即ち、本発明（５）の運動生成方法は、上記本発明（１）又は（４）において、２つのベクトルの内積を求める第２の演算手段を更に備え、前記制御手段は、前記投影点Ｑが前記接触点Ｐ１ 〜Ｐｎで構成される最大面積の多角形の領域外に在ると判定したことにより、（１１）任意の整数ｉ，ｊ（１≦ｉ＜ｊ≦ｎ）に対し、前記第２の演算手段によるベクトル〈ＱＣｉｊ〉，〈Ｐｉ Ｐｊ〉の内積が０を満たす線分ＰｉＰｊ上の点Ｃｉｊであって、距離｜ＱＣｉｊ｜が最小となる点Ｃｍｎを求め、該点Ｃｍｎを物体の回転中心の座標となす処理、を更に備えるものである。
【００１４】
本発明（５）の処理は、上記点Ｑが点Ｐ１〜Ｐｎで構成される最大面積の多角形の領域外に在る場合に実行され、物体のどの部分を中心にして回転モーメントを発生させるかを決定する処理である。但し、ここでも物体と面との接触面の形状等には一切関知せず、点Ｑ及び接触点Ｐ１〜Ｐｎの座標からなる、単純かつ少ない情報と、簡単な演算とにより物体の物理法則に準じた回転の中心座標を高速に求め得る。
【００１５】
図１１（Ａ）を参照して一例の回転中心位置決定処理を具体的に説明する。
上記処理（１１）において、ベクトル〈ＱＣij〉≠０，〈Ｐi Ｐj 〉≠０とする場合に、〈ＱＣij〉・〈Ｐi Ｐj 〉＝０を満たすベクトル〈ＱＣij〉，〈Ｐi Ｐj 〉は互いに直交するベクトルである。この処理（１１）を図１１（Ａ）に適用すると、例えば〈Ｐ1 Ｐ2 〉と〈ＱＣ12〉とは直交するが、その交点Ｃ12は線分Ｐ1 Ｐ2 上には無いので除外される。一方、例えば〈Ｐ2 Ｐ3 〉と〈ＱＣ23〉とは直交し、かつその交点Ｃ23は線分Ｐ2 Ｐ3 上に在るので保持される。こうして全ての場合を検査し、最終的に交点Ｃ16，Ｃ23，Ｃ35，Ｃ46等が保持される。
【００１６】
更に、距離｜ＱＣij｜が最小となる点Ｃmnを求め、該点Ｃmnを物体の回転中心の座標Ｒとなす。図１１（Ａ）の例では、距離｜ＱＣ16｜が最小となり、回転中心の座標Ｒ＝Ｃ16である。これは、物体の図示の一例の接触面形状から見ても合理的な回転の中心であり、この接触面形状が他のどの様な形をしていても合理性を損なわない。
【００１７】
ところで、点Ｑと接触点Ｐとの間には例えば図１１（Ｂ）に示すような関係も生じ得る。即ち、ここでは点Ｑが３角形の一つの頂点Ｐ1 付近に存在している。係る場合に、もし交点Ｃ23が物体の回転中心の座標Ｒに選ばれると、物理的に不合理な回転モーメントが生成されてしまう。
そこで、好ましくは、本発明（６）においては、上記本発明（５）において、前記制御手段は、（１２）前記接触点Ｐ１〜Ｐｎの中で、前記投影点Ｑに最も近い点Ｐｋとの間の距離｜ＱＰｋ｜を求める処理と、（１３）２点Ｑ，Ｃｍｎ間の距離｜ＱＣｍｎ｜と前記距離｜ＱＰｋ｜の小さい方に対応する点Ｃｍｎ又はＰｋを物体の回転中心の座標となす処理と、を更に備える。
【００１８】
これにより、図１１（Ｂ）の例では、点Ｑとの距離が小さい方の、点Ｐ１が物体の回転中心の座標Ｒに選ばれる。従って、係る場合でも運動の合理性を損なわない。
また、好ましくは、上記本発明（１）乃至（６）の何れか１に記載の処理をコンピュータが実施するためのプログラムとして記憶媒体に記録する。
【００１９】
従って、より高度で高品質のＣＧアニメーションを生成するようなゲームソフト等を、低価格、低容量で提供できる。
【００２０】
【発明の実施の形態】
以下、添付図面に従って本発明に好適なる実施の形態を詳細に説明する。
なお、以下の説明では、記号〈〉はベクトル、記号｜｜は絶対値（距離，大きさ等）、記号×はベクトル積、記号・はスカラー積、記号＊はスカラーの掛け算、記号←は代入を夫々表すものとする。
【００２１】
図２は実施の形態によるのゲーム機の構成を示す図で、図において、１は本ゲーム機の本体、２はユーザが操作するための十字キー、Ａ，Ｂボタン、スタートボタン等を有するコンソール部（ＣＳＬ）、３はＣＲＴ等による表示装置（ＤＩＳＰ）、４は本実施の形態による仮想物体の運動生成方法等をプログラムで記憶しているコンパクトディスク（ＣＤ）、１００はネットワーク（公衆網等）、５はゲーム等に関する様々な通信サービスをオンラインで提供するサーバ、６は他のゲーム機である。
【００２２】
ゲーム機本体１において、１１は本ゲーム機の主制御・処理を行うＣＰＵ、１２はＣＰＵ１１が実行するプログラムやデータであって、例えば図３〜図５，図１０に示す物体の運動生成に係る処理等を記憶するＲＡＭ，ＲＯＭ，ＥＥＰＲＯＭ等よりなる主メモリ（ＭＥＭ）、１３は表示装置３を制御する表示制御部（ＤＩＳＰＣ）、１４はコンソール部２をＣＰＵ１１に接続するインタフェース部（ＩＦ）、１５はＣＤ４の着脱、駆動及びデータ読取を行うＣＤ駆動部（ＣＤＤ）、１６はゲーム機本体１をネットワーク１００に接続する通信制御部（ＮＣＣ）、１７はＣＰＵ１１の共通バスである。
【００２３】
ゲームを行う時は、ゲーム機本体１及び表示装置３に電源投入し、ゲーム用のＣＤ４をＣＤ駆動部１５に装填する。更に、ＣＤ４から必要なプログラムやデータを主メモリ１２にロードし、ゲームをスタートする。そして、表示装置３の生成アニメーション画像を見ながら、コンソール部２を操作してゲームを楽しむ。なお、ＣＤ４に代えて、ＲＯＭカードやフロッピーディスク等の他の２次記憶装置を使用しても良い。また、サーバ５から所望のゲームソフトをダウンロードしても良い。更に、他のゲーム機６とオンラインで対戦ゲームを行っても良い。
【００２４】
図３は実施の形態による仮想物体の運動生成処理のフローチャートである。
例えば、ゲームの実行中に物体が面（壁、地面等）と接触（衝突）したような事態に至ると、この処理に入力する。ここで必要となる情報は、面の法線ベクトル〈Ｎ〉、物体と面の接触点Ｐ1 〜Ｐn の座標、物体の重心Ｇの座標、及び該重心Ｇの面への運動方向の投影点Ｑの座標（但し、これは他の情報から求められる）である。
【００２５】
ステップＳ１では、接触点Ｐが３個以上か否かを判別する。３個以上の場合は、３角形以上が構成されるので、後述するステップＳ２の処理に進み、点Ｑと点Ｐ1 〜Ｐn で構成される多角形との間で内外判定処理を行う。
ステップＳ３では、点Ｑが多角形の外側判定か否かを判別する。外側判定の場合は、物体に回転モーメントが生じるので、後述するステップＳ４の処理に進み、物体の回転中心の座標Ｒの抽出処理を行う。
【００２６】
ステップＳ５では、〈Ｎ〉×〈ＲＱ〉を軸として物体に回転モーメントを発生する。但し、〈ＲＱ〉がゼロベクトルの場合（即ち、点Ｑと回転中心の座標Ｒとが重なる場合）は回転モーメントを発生しない。回転モーメントの大きさＭは、例えば次式で与えられる。
Ｍ＝α＊（ｖ＋１）＊ｃｏｓθ
但し、α：物体の慣性モーメント
ｖ：物体の面方向の速度
θ：〈ＲＱ〉と〈ＲＧ〉とのなす角度
なお、上式右辺（）内の＋１は、接触面が地面の場合に、重力による速度成分を考慮したものである。この式によれば、θが小の時は、比較的大きな回転モーメントが発生し、物体は地面に速く倒れる。またθが大の時は、比較的小さな回転モーメントが発生し、物体はゆっくりと地面に倒れる。
【００２７】
ステップＳ６では、接触面の法線方向にリバウンド力（跳ね返り慣性モーメント）を発生する。跳ね返り慣性モーメント（イナーシャ）の大きさＫは、例えば次式で与えられる。
Ｋ＝β＊ｖ＊ｓｉｎθ
但し、β：面又は物体の弾性係数
ｖ：物体の面方向の速度
θ：〈ＲＱ〉と〈ＲＧ〉とのなす角度
この式によれば、θが小の時は、比較的小さな跳ね返り慣性モーメントが発生し、物体は僅かに跳ね返る。またθが大の時は、比較的大きな跳ね返り慣性モーメントが発生し、物体はより大きく跳ね返る。
【００２８】
なお、実際はステップＳ５の回転モーメントとステップＳ６の跳ね返り慣性モーメントとが合成処理され、物体に物理法則に準じたより自然な運動を生成することになる。
また、上記ステップＳ３の判別で点Ｑが内側判定の場合は、物体に回転モーメントは発生しないので、上記ステップＳ４，Ｓ５の回転処理をスキップし、ステップＳ６のリバウンド発生処理に進む。
【００２９】
また、上記ステップＳ１の判別で接触点Ｐが３個未満の場合は、多角形が構成されないので、上記ステップＳ２，Ｓ３の処理をスキップし、ステップＳ４の処理に進む。なお、この場合のステップＳ４の処理は、図１０の説明に関連して後述する。
図４，図５は実施の形態による点と多角形の内外判定処理のフローチャート（１），（２）で、図６は実施の形態による点と多角形の内外判定処理を説明する図である。
【００３０】
図６（Ａ）は物体が平面（例えば地面Ｚ＝０）に落下した場合を示している。この場合に、内外判定処理が使用する情報は、物体と面との接触点Ｐ1 〜Ｐ6 の座標と、物体の重心Ｇを平面に投影した点Ｑの座標である。即ち、ここでは物体がどの様な面形状で地面と接触しているかの情報は必要無い。従って、例えば図６（Ｂ）に示す如く、点Ｑが接触面（ハッチング部分）に含まれていない場合も有るし、また図６（Ｃ）に示す如く、点Ｑが接触面に含まれている場合も有る。図示しないが、他にも様々な接触面の形状が考えられる。
【００３１】
しかるに、物理法則によれば、点Ｑが、点Ｐ1 〜Ｐ6 により形成される最大面積の多角形（破線で示す）に含まれる場合は、物体に回転モーメントは発生せず、また含まれない場合にのみ、回転モーメントが発生することが理解できる。
なお、点Ｑが最大面積の多角形の境界線上に在る場合がある。この場合は、回転モーメントを発生させても良いし、また発生させなくても良い。この点、本実施の形態では、上記ステップＳ５の処理で〈ＲＱ〉＝０となるため、回転モーメントは発生しないこととしている。
【００３２】
この内外判定処理は、基本的には、点Ｑが最大面積の多角形の内側（境界線を含まない）に在るとする内側判定を能率良く求めるように構成されており、それ以外の場合は外側判定となる。その結果、内外判定又は外側判定が高速に得られる。以下、図６（Ａ）を参照しつつ、内外判定処理を具体的に説明する。
図４は本判定処理の基本部分を示している。
【００３３】
ステップＳ１１では必要な初期化処理を行う。例えば判定演算で使用するデータテーブルを初期化する。図５（Ｂ）に一例のデータテーブルを示す。
このテーブルには、図６（Ａ）の例に対応して、点Ｑから各接触点Ｐ1 〜Ｐ6 に向かうベクトル〈ＱＰ1 〉〜〈ＱＰ6 〉が昇順に記憶されている。各接触点の付加番号１〜６は予め物体に固有の番号でも良いし、この判定処理又は事前の処理で任意に付加しても良い。従って、最初の接触点Ｐ1 は実質的に任意に選択出来ることになる。コード「Ｎｕｌｌ」はデータテーブルの終わりを表す。
【００３４】
フラグ変数ＵＦはベクトル〈ＱＰ1 〉〜〈ＱＰ6 〉が点Ｑの内側判定に有効に使用されたか否かを表す使用フラグであり、最初は全て０（不使用）に初期化される。更に、図示しないが、外側判定結果を表すフラグＥＸＴＦ←０（内側判定）に初期化し、また判定演算の流れを制御するためのモードフラグＭＦ←０に初期化する。
【００３５】
ステップＳ１２では、各ポインタｉ←０，ｊ←１，ｋ←０，ｍ←０とする。ポインタｉは後述のステップＳ１４におけるベクトル外積演算の第１のベクトルを指すポインタ、ポインタｊは同じく第２のベクトルを指すポインタである。因みに、ステップＳ１４の処理は、第１のベクトル〈ＱＰ(i) 〉を基準として点Ｑの内側判定に有用な第２のベクトル〈ＱＰ(j) 〉を探す処理である。更に、後述のステップＳ１６の処理は、ステップＳ１４の処理で探した第２のベクトル〈ＱＰ(j) 〉と、ステップＳ１４で最初に選択した第１のベクトル〈ＱＰ(i) 〉｛即ち、〈ＱＰ1 〉｝とを使用して点Ｑの最終的な内側判定を行う処理である。このため、ポインタｋは常にテーブルの最初のベクトル〈ＱＰ1 〉を指している。
【００３６】
ところで、上記ステップＳ１４の処理で、点Ｑの内側判定に有用でないと判定されたような第２のベクトル〈ＱＰ(j) 〉は、当面の内側判定演算から除外される。即ち、その使用フラグＵＦ(j) ＝０（不使用）のままで残される。しかし、その後のステップＳ１４の処理で他の有用な第２のベクトル〈ＱＰ(j) 〉が見つかる場合があり、係る場合には、この第２のベクトルとの関係で前記不使用となったベクトル〈ＱＰ(j) 〉が有用となり、かつ続くステップＳ１６の処理でより早く最終的な内側判定に至る場合がある。ポインタｍは、この処理を実現するために設けられており、データテーブルの中から一旦不使用となった｛使用フラグＵＦ(m) ＝０の｝ベクトルを探すためのポインタとして使用される。
【００３７】
ステップＳ１３では、最初のベクトル〈ＱＰ1 〉は無条件で使用するので、その使用フラグＵＦ(i) ←１とする。ステップＳ１４では｛〈Ｎ〉・〈ＱＰ(i) 〉×〈ＱＰ(j) 〉｝の演算を行い、その結果が＞０か否かを判別する。この演算はスカラー３重積となっており、ベクトル〈Ｎ〉，〈ＱＰ(i) 〉，〈ＱＰ(j) 〉の各要素の行列演算により容易に求まる。なお、｛（〈ＱＰ(i) 〉×〈ＱＰ(j) 〉）・〈Ｎ〉｝演算を行い、その結果が＞０か否かを判別しても良い。
【００３８】
図６（Ａ）の例では、法線ベクトル〈Ｎ〉が紙面の手前側（Ｚ軸方向）に向いているとすると、最初の演算では｛〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉｝＞０となる。結果が＞０の場合は、２番目のベクトル〈ＱＰ2 〉は、点Ｑの内側判定に有用なベクトルとして使用されたので、ステップＳ１５に進み、その使用フラグＵＦ(j) ←１とする。
【００３９】
ステップＳ１６では｛〈Ｎ〉・〈ＱＰ(j) 〉×〈ＱＰ(k) 〉｝の演算を行い、結果が＞０か否かを判別する。結果が＞０の場合は、点Ｑが、これまでに領域判定した、より少ない面積の多角形の内側に含まれることになるので、内側判定（ＥＸＴＦ＝０）のままで処理を抜ける。
しかし、図６（Ａ）の例では｛〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉｝の演算結果は＜０となる。この場合は、ステップＳ１７でポインタｉにポインタｊの内容を転送し、次回のステップＳ１４の処理における第１のベクトルを〈ＱＰ1 〉から〈ＱＰ2 〉に変更する。
【００４０】
ステップＳ１８ではモードフラグＭＦ＝１か否かを判別する。この時点では不使用ベクトルが発生していないので、ＭＦ＝０のままである。ステップＳ１９ではポインタｊの内容をインクリメント（即ち、次の未検査のベクトルを指す様に更新）し、次回のステップＳ１４の処理における第２のベクトルを〈ＱＰ2 〉から〈ＱＰ3 〉に変更する。
【００４１】
ステップＳ２０では、〈ＱＰ(j) 〉＝Ｎｕｌｌか否かを判別し、Ｎｕｌｌでない場合は未だ未検査のベクトルが有るのでステップＳ１４に戻る。またＮｕｌｌの場合は、点Ｑの積極的な内側判定が得られずに全ベクトルの検査を終了したことになるので、ステップＳ２１で外側判定のフラグＥＸＴＦ←１となし、処理を抜ける。
【００４２】
また、上記ステップＳ１４の処理で｛〈Ｎ〉・〈ＱＰ(i) 〉×〈ＱＰ(j) 〉｝≦０の場合は、点Ｑの内側判定に有用では無いベクトル〈ＱＰ(j) 〉が検出されたので、ステップＳ２２に進み、モードフラグＭＦ←１とする。これを図６（Ａ）の例で言うと、ステップＳ１４で｛〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉｝＞０を行った後、次回のステップＳ１４で｛〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉｝を行った時点で結果が＜０となる。この場合のベクトル〈ＱＰ4 〉の使用フラグＵＦ（３）＝０（不使用）のままである。
【００４３】
ステップＳ１９ではポインタｊの内容をインクリメントする。これにより、次のステップＳ１４では｛〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉｝＞０となる。このベクトル〈ＱＰ5 〉は点Ｑの内側判定に有用な新たなベクトルである。これに伴い、ＵＦ（４）＝１となる。しかし、続くステップＳ１６では｛〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉｝＞０を満足しない。即ち、点Ｑの最終的な内側判定は得られない。ステップＳ１７ではポインタｉにポインタｊの内容を転送する。即ち、ｉ＝５となる。ステップＳ１８ではＭＦ＝１により、図５の処理▲１▼に進む。
【００４４】
図５（Ａ）は点Ｑの最終的な内側判定を早める付加的処理とも言える。
ステップＳ３１，Ｓ３２では最初の使用フラグＵＦ(m) ＝０となる不使用ベクトルを探す。ポインタｍは最初は「０」であったが、この例ではｍ＝３で最初の不使用ベクトル〈ＱＰ4 〉が検出される。ステップＳ３３ではポインタｊにポインタｍの内容を転送する。ステップＳ３４では｛〈Ｎ〉・〈ＱＰ(i) 〉×〈ＱＰ(j) 〉｝＞０か否かの判別を行う。図６（Ａ）の例では｛〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ4 〉｝＞０となる。即ち、この時点まで不使用であったベクトル〈ＱＰ4 〉は新たなベクトル〈ＱＰ5 〉との関係では点Ｑの内側判定に有用となった。ステップＳ３５ではＵＦ(j) ←１とし、不使用ベクトル〈ＱＰ4 〉を使用済みにする。
【００４５】
ステップＳ３６では｛〈Ｎ〉・〈ＱＰ(j) 〉×〈ＱＰ(k) 〉｝＞０か否かの判別を行う。図６（Ａ）の例では｛〈Ｎ〉・〈ＱＰ4 〉×〈ＱＰ1 〉｝＞０となり、この時点で点Ｑの最終的な内側判定が得られる。これによりフローは図４の処理▲３▼に戻り、本処理を抜ける。
また、上記ステップＳ３６の処理で｛〈Ｎ〉・〈ＱＰ(j) 〉×〈ＱＰ(k) 〉｝≦０の場合は、ステップＳ３７でポインタｊの内容をインクリメントする。ステップＳ３８ではｉ＝ｊか否かを判別する。ｉ＝ｊの場合は、この時点までに不使用であったベクトルを全て調べたので、フローは図４の処理▲２▼に戻る。またｉ≠ｊの場合は、更にステップＳ３９で使用フラグＵＦ(j) ＝０か否かの判別を行う。ＵＦ(j) ＝０の場合は、新たに選択したベクトル〈ＱＰ(j) 〉が不使用なので、ステップＳ３４に戻り、その有用性を調べる。また、ＵＦ(j) ≠０の場合は、選択したベクトル〈ＱＰ(j) 〉が使用済みなので、ステップＳ３７に戻り、次の不使用ベクトルを探す。
【００４６】
図７〜図９は点Ｑの様々な位置に対する内外判定例を説明する図（１）〜（３）である。なお、接触点Ｐ1 〜Ｐ6 の座標は全て図６（Ａ）と同一である。
図７（Ａ）は点Ｑが３角形（Ｐ1 ，Ｐ2 ，Ｐ3 ）の内側に在る場合を示している。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＞０
で高速に終了し、点Ｑは３角形（Ｐ1 ，Ｐ2 ，Ｐ3 ）の内側に含まれる。従って、最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。
【００４７】
図７（Ｂ）は点Ｑが４角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ）の内側に在る場合を示している。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉＞０→〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉＞０
で終了し、点Ｑは４角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ）の内側に含まれる。従って、最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。この場合でも、もし点Ｐ3 から判定処理を開始したら、より早く内側判定が得られることは明らかである。
【００４８】
図８（Ａ）は点Ｑが５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ4 ）の内側に在る場合を示している。なお、この点Ｑの位置は上記図６（Ａ）の場合と同一である。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉＞０→〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉＜０
▲５▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ4 〉＞０→〈Ｎ〉・〈ＱＰ4 〉×〈ＱＰ1 〉＞０
で終了し、点Ｑは５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ4 ）の内側に含まれる。従って、最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。このように、本実施の形態では図５の不使用ベクトルの早期再活用処理を設けたことにより、点Ｑの内側判定は接触点のより若い番号で得られる。本実施の形態では、接触点の若い番号はより早く使用されるので、判定処理が速い。
【００４９】
図８（Ｂ）は点Ｑが５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に在る場合を示している。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉＞０→〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉＜０
▲５▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ4 〉＜０
▲６▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ6 〉＞０→〈Ｎ〉・〈ＱＰ6 〉×〈ＱＰ1 〉＞０
で終了し、点Ｑは最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の内側に含まれる。
【００５０】
図９（Ａ）は点Ｑが最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の外側に在る場合を示している。なお、ここでは点Ｑが多角形の外側に在るイメージを分かり易くするために、一例の接触面形状をハッチングで塗りつぶしている。但し、この判定処理は接触面形状とは無関係に行われる。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＞０→〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ1 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ2 〉×〈ＱＰ3 〉＞０→〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ1 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ3 〉×〈ＱＰ5 〉＞０→〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ1 〉＜０
▲５▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ4 〉＜０
▲６▼〈Ｎ〉・〈ＱＰ5 〉×〈ＱＰ6 〉＞０→〈Ｎ〉・〈ＱＰ6 〉×〈ＱＰ1 〉＜０
▲７▼〈Ｎ〉・〈ＱＰ6 〉×〈ＱＰ4 〉＜０
で終了し、点Ｑは最大面積の５角形の外側にある。
【００５１】
図９（Ｂ）は点Ｑが最大面積の５角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の外側に在る他の場合を示している。この場合の演算は、
▲１▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ2 〉＜０
▲２▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ3 〉＜０
▲３▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ4 〉＜０
▲４▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ5 〉＜０
▲５▼〈Ｎ〉・〈ＱＰ1 〉×〈ＱＰ6 〉＜０
で終了し、点Ｑは最大面積の５角形の外側にある。なお、この例は本発明（１）の外側判定処理で高速に得られる。
【００５２】
因みに、図９（Ｂ）において、例えば点Ｑ´が線分Ｐ1 Ｐ2 上に存在する場合の演算は、
▲１▼〈Ｎ〉・〈Ｑ´Ｐ1 〉×〈Ｑ´Ｐ2 〉＝０
▲２▼〈Ｎ〉・〈Ｑ´Ｐ1 〉×〈Ｑ´Ｐ3 〉＜０
▲３▼〈Ｎ〉・〈Ｑ´Ｐ1 〉×〈Ｑ´Ｐ4 〉＜０
▲４▼〈Ｎ〉・〈Ｑ´Ｐ1 〉×〈Ｑ´Ｐ5 〉＜０
▲５▼〈Ｎ〉・〈Ｑ´Ｐ1 〉×〈Ｑ´Ｐ6 〉＜０
で終了し、点Ｑは最大面積の５角形の外側にある。
【００５３】
かくして、本実施の形態によれば、点Ｑと点Ｐ1 〜Ｐn の座標が与えられるだけで、点Ｑが点Ｐ1 〜Ｐn で囲まれる最大面積の多角形に含まれるか否か、即ち、衝突物体に回転モーメントを発生させるか否か、を能率良く判定できる。
次に、点Ｑが領域外の場合は、物体がどの様な軸の回りに回転するかを決定する必要がある。
【００５４】
図１０は実施の形態による回転の中心座標の抽出処理のフローチャートであり、図１１は回転の中心座標の抽出処理を説明する図である。
図１１（Ａ）は図９（Ａ）と同じ場合を示している。即ち、重心Ｇの投影点Ｑは最大面積の多角形（Ｐ1 ，Ｐ2 ，Ｐ3 ，Ｐ5 ，Ｐ6 ）の外側にあり、既に点Ｑの外側判定が得られている。なお、この状態をイメージし易い様に一例の接触面形状をハッチングで塗りつぶしてあるが、以下の抽出処理でも接触面の情報は必要無い。
【００５５】
図１０において、ステップＳ５１では必要な初期化処理を行う。ステップＳ５２では接触点Ｐ1 〜Ｐn の中で点Ｑに最も近い点Ｐk を求め、その距離｜ＱＰk ｜を保持する。図１１（Ａ）の例で言うと、Ｐk ＝Ｐ6 であり、その距離｜ＱＰ6 ｜を保持する。
ステップＳ５３では、任意のｉ，ｊ（但し、１≦ｉ＜ｊ≦ｎ）について、
〈ＱＣij〉・〈Ｐi Ｐj 〉＝０
を満たすような、線分Ｐi Ｐj 上の点Ｃijを求める。
【００５６】
これを図１１（Ａ）の例で具体的に説明する。例えば、先ず点Ｐ1 ，Ｐ2 を選択し、線分Ｐ1 Ｐ2 又はその延長線と直行するような直線ＱＣ12を求め、交点Ｃ12の座標を得る。しかし、この交点Ｃ12は線分Ｐ1 Ｐ2 上には無いので、除外される。次に点Ｐ1 ，Ｐ3 ，点Ｐ1 ，Ｐ4 ，…の如く昇順に選択して、同様の処理を行う。この流れの最後の点Ｐ1 ，Ｐ6 を選択した時は、交点Ｃ16が得られ、該交点Ｃ16は線分Ｐ1 Ｐ6 上に在るので、残される。次に、点Ｐ2 を基準として点Ｐ3 〜Ｐ6 を順に選択し、同様の処理を行う。ここでは交点Ｃ23等が残される。次に点Ｐ3 を基準として点Ｐ4 〜Ｐ6 を順に選択し、同様の処理を行う。ここでは交点Ｃ35が残される。以下同様にして進み、交点Ｃ46が残される。
【００５７】
ステップＳ５４では、上記残された点Ｃijの中で点Ｑに最も近い点Ｃmnを求め、その距離｜ＱＣmn｜を保持する。図１１（Ａ）の例では距離｜ＱＣ16｜が保持される。そして、ステップＳ５５では、距離｜ＱＰk ｜と距離｜ＱＣmn｜の内の小さい方を選択し、その点Ｐk 又は交点Ｃmnの座標を回転中心の座標Ｒとする。図１１（Ａ）の例では交点Ｃ16が回転中心の座標Ｒとなる。これは物理的に見ても妥当な回転の中心である。
【００５８】
ところで、例えば図１１（Ｂ）に示す様なケースが存在する。ここでは、点Ｑは３角形Ｐ1 ，Ｐ2 ，Ｐ3 の一つの頂点Ｐ1 の側に略対面している。この場合に、もし上記ステップＳ５３，Ｓ５４の処理のみで回転中心の座標Ｒを抽出したとすると、物体裏面側の交点Ｃ23が回転中心の座標Ｒとなり、これは物理的に不合理な回転モーメントを発生することになる。本実施の形態によれば、上記ステップＳ５２，Ｓ５５の処理を設けたことにより、このケースでは｜ＱＰ1 ｜＜｜ＱＣ23｜となり、点Ｐ1 が回転中心の座標Ｒとなる。これは合理的な回転中心である。
【００５９】
なお、上記図１０の処理では、先ず〈ＱＣij〉・〈Ｐi Ｐj 〉＝０を満たす線分Ｐi Ｐj 上の各交点Ｃijを求め、次に該交点Ｃijの中で距離｜ＱＣij｜を最小とするような交点Ｃmnを求める方法を述べたが、これに限らない。例えば、これとは逆に、先ず〈ＱＣij〉・〈Ｐi Ｐj 〉＝０を満たす各ベクトル〈ＱＣij〉の距離｜ＱＣij｜を求め、次に該距離｜ＱＣij｜が最小となるような線分Ｐi Ｐj 上の交点Ｃmnを求めても良い。
【００６０】
これを図１１（Ａ）の例で具体的に言うと、先ず距離｜ＱＣ12｜＝｜〈ＱＰ2 〉｜＊ｓｉｎθ12＝｜〈ＱＰ2 〉×〈Ｐ1 Ｐ2 〉｜／｜〈Ｐ1 Ｐ2 〉｜を求める。以下同様にして進み、距離｜ＱＣ16｜＝｜〈ＱＰ6 〉｜＊ｓｉｎθ16＝｜〈ＱＰ6 〉×〈Ｐ1 Ｐ6 〉｜／｜〈Ｐ1 Ｐ6 〉｜等を求める。この時点では距離のみを求めているので計算が速い。
【００６１】
こうして全ての組み合わせの距離を求め、次に距離｜ＱＣij｜が最小となるような線分Ｐi Ｐj 上の交点Ｃmnを求める。この場合に、もし距離｜ＱＣij｜を最小とする交点Ｃijが線分Ｐi Ｐj 上に無い時は、次に大きい距離｜ＱＣij｜について、該交点Ｃijが線分Ｐi Ｐj 上にあるか否かの判別を行う。しかるに、図１１（Ａ）の例からも分かるように、大抵の場合は、点Ｑは、接触点Ｐ1 〜Ｐn で囲まれる最大面積の多角形の何れか１辺に対面している。従って、通常は、最初の距離｜ＱＣij｜を最小とするような交点Ｃijは線分Ｐi Ｐj 上に在る。即ち、距離｜ＱＣ16｜を最小とするような交点Ｃ16は線分Ｐ1 Ｐ6 上にある。
【００６２】
従って、この方法によれば、交点Ｃijを求める計算処理と、該交点Ｃijが線分Ｐi Ｐj 上に在るか否かの判定処理とを大幅に削減でき、処理が速い。
ところで、上記図３のステップＳ１の判別で、接触点が３個未満の場合は、ステップＳ４の中心座標Ｒの抽出処理に直接入力することとした。そこで、図示しないが、以下、この場合における回転中心の抽出処理を上記図１０の処理（アイデア）に関連して概説する。
【００６３】
まず接触点Ｐが１個の場合は、Ｐ1 ＝Ｑの場合と、Ｐ1 ≠Ｑの場合とがある。Ｐ1 ＝Ｑの場合は、容易にＲ＝Ｐ1 （＝Ｑ）とできる。この場合は、図３のステップＳ５の処理で〈Ｎ〉×〈ＲＱ〉＝〈Ｎ〉×〈ＱＱ〉＝０となり、回転モーメントは発生しない。またＰ1 ≠Ｑの場合は、Ｒ＝Ｐ1 （≠Ｑ）となる。この場合は、ステップＳ５の処理で〈Ｎ〉×〈ＲＱ〉＝〈Ｎ〉×〈Ｐ1 Ｑ〉≠０となり、回転モーメントが発生する。
【００６４】
次に接触点Ｐが２個の場合は、点Ｑが線分Ｐ1 Ｐ2 上に在る場合と、無い場合とがある。点Ｑが線分Ｐ1 Ｐ2 上に在るとする判別は、例えば、〈ＱＰ1 〉×〈ＱＰ2 〉＝０，Ｐ1x≦Ｑx ≦Ｐ2x，Ｐ1y≦Ｑy ≦Ｐ2yを同時に満足すると言う条件で得られる。なお、ｘ，ｙは接触面上の座標である。点Ｑが線分Ｐ1 Ｐ2 上に在る場合は、常にＲ＝Ｑとなる。この場合は、ステップＳ５の処理で〈Ｎ〉×〈ＲＱ〉＝０となり、回転モーメントは発生しない。また点Ｑが線分Ｐ1 Ｐ2 上に無い場合は、常にＲ≠Ｑ（即ち、Ｒ＝Ｐ1 ／Ｐ2 ／線分Ｐ1 Ｐ2 上の交点Ｃ12）となる。この場合は、ステップＳ５の処理で〈Ｎ〉×〈ＲＱ〉≠０となり、回転モーメントが発生する。かくして本実施の形態によれば、接触点が任意のｎ個の場合における仮想物体の運動を合理的に生成できる。
【００６５】
図１２は実施の形態による一例の物体の運動を説明する図で、図１２（Ａ）は速度ｖで地面に落下した瞬間の物体ａの斜視図を示している。
例えば、地面をＺ＝０の平面とし、法線ベクトル〈Ｎ〉，地面との接触点の座標Ｐ1 〜Ｐ3 ，物体ａの重心座標Ｇ，重心Ｇの地面への投影点の座標Ｑを夫々、〈Ｎ〉＝（０，０，１），Ｐ1 （０，２，０），Ｐ2 （−１，０，０），Ｐ3 （０，−１，０），Ｇ（２，１，２），Ｑ（２，１，０）とする。
【００６６】
上記図３のステップＳ２（即ち、図４，図５）の処理によると、例えば、
（〈ＱＰ3 〉×〈ＱＰj 〉）・〈Ｎ〉＞０  （但し、１≦ｊ≦３，ｊ≠３）
を満たすｊは存在しないから、点Ｑは多角形（Ｐ1 ，Ｐ2 ，Ｐ3 ）の外側に存在する。
次に、ステップＳ４（即ち、図１０）の処理によると、先ず点Ｑに最も近い接触点はＰ1 （０，２，０）である。一方、点Ｑに最も近い線分Ｐi Ｐj 上の点はＣ13（０，１，０）である。よって、回転中心の座標Ｒは点Ｑから近い方のＣ13（０，１，０）となる。
【００６７】
次に、ステップＳ５では、〈Ｒ〉＝〈Ｎ〉×〈ＲＱ〉＝（０，２，０）を回転軸となし、物体ａに、大きさＭの回転モーメントを発生させる。大きさＭは、上記により、例えば、
Ｍ＝α＊（ｖ＋１）＊ｃｏｓθ
で与えられる。ここで〈ＲＱ〉と〈ＲＧ〉とのなす角θは、θ＝ｔａｎ-1｛｜〈ＲＱ〉×〈ＲＧ〉｜／〈ＲＱ〉・〈ＲＧ〉｝＝ｔａｎ-1｛｜（２，０，０）×（２，２，０）｜／（２，０，０）・（２，２，０）｝＝ｔａｎ-1（４／４）＝４５°と求まり、ｃｏｓθ＝１／√（２）となる。
【００６８】
次に、ステップＳ６では、更に、この物体ａに大きさＫの跳ね返り慣性モーメントを発生させる。大きさＫは、上記により、例えば、
Ｋ＝β＊ｖ＊ｓｉｎθ
で与えられる。ｓｉｎθ＝１／√（２）である。
図１２（Ｂ）は上記物体ａの運動を時系列に示す側面図である。
【００６９】
例えば、ゲームのユーザは、敵との対戦途中で、不用意にも自分の武器（例えばピストル等）を地面に落としてしまった。従来技術によれば、予め用意されたゲームのシナリオに従って、かつ予め用意された時刻ｔ0 〜ｔ2 の各画面が、逐次表示されるかも知れない。
しかし、本実施の形態においては、上記の少ない情報を利用して、かつ物理法則に従い、時刻ｔ0 〜ｔ2 の画面が自動生成される。即ち、時刻ｔ0 では、物体ａと地面との当たり判定により、その時の各接触点Ｐ1 〜Ｐ3 ，重心Ｇの座標情報を利用して、物体ａを回転させるための回転中心の座標Ｒが求められる。時刻ｔ1 では、落下時の速度ｖの情報を利用して、〈Ｎ〉×〈ＲＱ〉を軸とする回転モーメントＭによる回転運動と、跳ね返り慣性モーメントＫによるリバウンド運動とが同時に生成される。これにより、物体ａは地面から跳ね返りつつ、かつ衝突条件に応じた自然な動きで地面に倒れ掛かる。時刻ｔ2 では、物体ａが倒れた状態で静止している。
【００７０】
かくして、本実施の形態によれば、ゲームがどの様に展開しても、それに伴うこの種のアニメーション画像を予め用意することなく、各場面に応じた自然な運動を高速に自動生成できる。従って、より少ないゲームデータと簡単な処理で、質の高いゲームを安価に提供できる。
なお、上記実施の形態ではゲーム機への適用例を中心に述べたが、本発明はＣＰＵを使用して行われるあらゆるＣＧアニメーション処理に適用可能である。
【００７１】
また、上記実施の形態では面を平面（例えば地面）としたがこれに限らない。面は任意の方向を向いていても良いし、また面は曲面でも良い。なお、接触点で囲まれる最大面積の面が複雑な曲面（又は折れた段状の面）を成しているような場合には、その部分曲面の法線ベクトルの加重平均をとり、１つの法線ベクトルで複雑な曲面等を代表させることが可能である。
【００７２】
また、上記本発明に好適なる実施の形態を述べたが、本発明思想を逸脱しない範囲内で、各処理の構成、制御の流れ、及びこれらの組合せの様々な変更が行えることは言うまでも無い。
【００７３】
【発明の効果】
以上述べた如く本発明によれば、仮想物体に物理法則に準じた運動を生成することが、比較的少ないデータと計算量で、かつ高速に可能となり、よって、特にパーソナルコンピュータや専用のゲーム機等により実行されるゲームの、高機能化、高品質化、低価格化等に寄与する所が極めて大きい。
【図面の簡単な説明】
【図１】図１は本発明の原理的構成を説明する図である。
【図２】図２は実施の形態によるゲーム機の構成を示す図である。
【図３】図３は実施の形態による仮想物体の運動生成処理のフローチャートである。
【図４】図４は実施の形態による点と多角形の内外判定処理のフローチャート（１）である。
【図５】図５は実施の形態による点と多角形の内外判定処理のフローチャート（２）である。
【図６】図６は実施の形態による点と多角形の内外判定処理を説明する図である。
【図７】図７は点Ｑの様々な位置に対する内外判定例を説明する図（１）である。
【図８】図８は点Ｑの様々な位置に対する内外判定例を説明する図（２）である。
【図９】図９は点Ｑの様々な位置に対する内外判定例を説明する図（３）である。
【図１０】図１０は実施の形態による回転の中心座標の抽出処理のフローチャートである。
【図１１】図１１は実施の形態による回転の中心座標の抽出処理を説明する図である。
【図１２】図１２は実施の形態による一例の物体の運動を説明する図である。
【図１３】図１３は従来技術を説明する図である。
【符号の説明】
１  ゲーム機本体
２  コンソール部
３  表示装置
４  コンパクトディスク
５  サーバ
６  他のゲーム機
１１  ＣＰＵ
１２  主メモリ
１３  表示制御部
１４  インタフェース部
１５  ＣＤ駆動部
１６  通信制御部
１７  共通バス
１００  ネットワーク
【図１】
0003697321.tif 000002
【図２】
0003697321.tif 000003
【図３】
0003697321.tif 000004
【図４】
0003697321.tif 000005
【図５】
0003697321.tif 000006
【図６】
0003697321.tif 000007
【図７】
0003697321.tif 000008
【図８】
0003697321.tif 000009
【図９】
0003697321.tif 000010
【図１０】
0003697321.tif 000011
【図１１】
0003697321.tif 000012
【図１２】
0003697321.tif 000013
【図１３】
0003697321.tif 000014