(57)【特許請求の範囲】
【請求項１】
親骨と子骨とが関節によって連結された骨格モデルにおいて，前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための方法であって，
前記関節を中心とする球の球面上に，前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定ステップであって，前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点１を通るものであり，前記子骨又は前記子骨の延長線と前記球面の交点２の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ，前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルｕ及び前記円錐の半頂角α，または，前記軸単位ベクトルｕ及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する，角度範囲境界円設定ステップと，
前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルｕと前記半頂角αとを得て，前記子骨の向きを表す単位ベクトルｖを用いて，ｕ・ｖ−ｃｏｓαの値を検査値として算出し，前記検査値に基づいて，前記子骨の角度が前記角度範囲の中にあるか否かを判定する，角度範囲判定ステップと，
を有する，方法。
【請求項２】
前記関節を原点とし，前記交点１から前記原点に向かう方向をｘ軸の正方向とする，三次元直交座標系（ｘ，ｙ，ｚ）から，
μ＝２ｔａｎ−１（−ｚ／（ｘ＋１））
ν＝２ｔａｎ−１（ｙ／（ｘ＋１））
の関係を有する，モノポーラ球面座標系（μ，ν）を用いて，
前記角度範囲境界円が，少なくともμ＝μｅ及びν＝νｅのうち何れか一方を満たす，
（ここにおいて，μｅ及びνｅは定数である），
請求項１記載の方法。
【請求項３】
前記交点２の前記モノポーラ球面座標を（μ，ν）とし，μの下限及び上限をそれぞれμ０，μ１とし，νの下限及び上限をそれぞれν０，ν１とした場合に，前記角度範囲が，
μ０＜μ＜μ１及びν０＜ν＜ν１
を満たすよう前記角度範囲境界円を設定する，
請求項２記載の方法。
【請求項４】
前記角度範囲境界円が，前記交点１を通らない補助角度範囲境界円を更に用いる，
請求項１乃至３のうちいずれか１項記載の方法。
【請求項５】
前記角度範囲判定ステップにおいて，
前記子骨の角度が前記角度範囲の中に無いと判定された場合，
前記交点２から前記角度範囲の中にあることを満たす球面上の点まで前記球面上に沿って測定した距離が最短となる前記球面上の点に，前記交点２を移動させることにより，前記子骨の角度を修正する，角度修正ステップ，
を更に有する請求項１乃至４のうちいずれか１項記載の方法。
【請求項６】
請求項１乃至５のうちいずれか１項記載の方法をコンピュータに実行させるための命令を含む，プログラム。
【請求項７】
親骨と子骨とが関節によって連結された骨格モデルにおいて，前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための装置であって，
前記関節を中心とする球の球面上に，前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定手段であって，前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点１を通るものであり，前記子骨又は前記子骨の延長線と前記球面の交点２の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ，前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルｕ及び前記円錐の半頂角α，または，前記軸単位ベクトルｕ及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する，角度範囲境界円設定手段と，
前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルｕと前記半頂角αとを得て，前記子骨の向きを表す単位ベクトルｖを用いて，ｕ・ｖ−ｃｏｓαの値を検査値として算出し，前記検査値に基づいて，前記子骨の角度が前記角度範囲の中にあるか否かを判定する，角度範囲判定手段と，
を有する，装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，骨格モデルにおける各々の骨の角度すなわち回転（曲げ，捻り等）の制御に関する。
【背景技術】
【０００２】
ＣＧキャラクタ等を動かしてポーズやアニメーションを作る際に，複数の骨を関節で繋いだ骨格モデル（スケルトンモデル）（図１（ａ））が使われる場合がある。このような骨格モデルは，仮想空間ばかりでなく，ロボット制御等の実空間における対象物を制御する場合にも用いられ得る。
【０００３】
本願明細書では，図１（ｂ）のように関節の両側の骨のうち一方を親骨，他方を子骨と呼ぶことにする。関節の回転（曲げ，捻り）の状態は，親骨を基準とした子骨の向きで表すことができる。骨の向きを表すために，各々の骨に対して図１（ｂ）のように座標系が定められる。図１（ｂ）の座標系では，ｘ軸回転が捻り，ｙ軸回転とｚ軸回転が曲げとなる。
【０００４】
三次元（３Ｄ）仮想空間又は実空間上で人体モデル，動物，構造物等の姿勢（ポーズ，動き等）を制御する際に用いられるこのような骨格モデルにおいては，図１（ａ）に示す各々の骨および関節の位置，角度，回転（曲げ，捻り）等を意図したとおりに制御することが必要となる。図１（ａ）に示される骨格モデルでは，各々の骨は関節で結合されており，各々の骨の動きが他の骨の動きに影響を与える。従来から，骨格をモデル化し，骨格モデルを制御するする手法として，種々のものが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−３０６１１６
【特許文献２】特開２００９−０７０３４０
【特許文献３】特開２０１０−１７０２７９
【特許文献４】米国特許公開公報２０１０１８２３２９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例示として，図１（ａ）の骨格モデルを用いた場合を想定する。この骨格モデルは，人間の骨格をモデル化したものである。したがって，例えば，肘から先の腕の可動範囲には，一定の制限がある。この制限を超えた角度（曲げ，捻り）に腕を曲げるポーズを取らせることは，現実の人間に対するモデルからかけ離れたものになる。人間として自然なポーズを取る骨格モデルを形成するためには，たとえば肘の関節から先の骨の可動範囲に対して，一定の制限を課すことが必要となる。
【０００７】
従来では，特許文献１に開示されるように，たとえば親骨に対する子骨の向きを親骨の座標系を基準とした３軸（ｘ，ｙ，ｚ）の各軸回りの回転角度で表現するものがある。
【０００８】
特許文献２には，関節を中心点とする球面上の所与の点を焦点とし，関節に対応する中心点と焦点とを結ぶ軸に直交する平面を射影面とし，関節の可動範囲を，射影面上において設定する技術が開示されている。
【０００９】
特許文献３及び特許文献４には，子骨の向きが，予め定められた可動範囲内に収まっていない場合には，可動範囲の形状に応じた条件を満たすように，前記親骨に対する前記子骨の向きを補正する発明が開示されている。
【００１０】
上述のような従来の骨格の制御方法では，設計者の意図とはかけ離れた可動範囲となってしまうという問題が指摘されていた。また，この問題をある程度解決する手法として，特許文献２，特許文献３及び特許文献４に開示された技術が提案されている。しかしながら，これらの技術においては，必要な計算量は比較的少ないものの，多関節のモデルをリアルタイムに動かす等の場合には，計算量の更なる軽減が求められる。
【００１１】
したがって，より多様な骨格モデルに柔軟に対応でき，より簡便な処理で，骨格モデルを制御する手法の実現が望まれている。本発明は，上述のような，従来技術の欠点を解決することを目的としている。なお，ここで取り上げた課題及び本願発明の目的は，例示的なものである。したがって，本願発明の目的が，上述の記載に限定されるものではない点に留意すべきである。
【００１２】
本願明細書では，便宜上，実施例として仮想空間上に形成され得る骨格モデルの制御を取り上げて説明を行う。しかしながら，本発明の適用範囲は，仮想空間に限られるものではない。たとえば，ロボットの制御等の物理的構造物の位置や角度（曲げ，捻り等を含む）の制御に利用することも当然に意図されている。すなわち，本発明は，仮想空間及び実空間の双方の骨格モデルを対象とするものであることに特に留意すべきである。また，本発明は，本願明細書で取り扱う特定の骨格モデルに限定されるものでもない。
【課題を解決するための手段】
【００１３】
本願発明は，親骨と子骨とが関節によって連結された骨格モデルにおいて，前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための方法であって，前記関節を中心とする球の球面上に，前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定ステップであって，前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点１を通るものであり，前記子骨又は前記子骨の延長線と前記球面の交点２の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ，前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルｕ及び前記円錐の半頂角α，または，前記軸単位ベクトルｕ及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する，角度範囲境界円設定ステップと，前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルｕと前記半頂角αとを得て，前記子骨の向きを表す単位ベクトルｖを用いて，ｕ・ｖ−ｃｏｓαの値を検査値として算出し，前記検査値に基づいて，前記子骨の角度が前記角度範囲の中にあるか否かを判定する，角度範囲判定ステップと，を有する，方法を提供する。なお，上記の式（ｖ・ｕ）の演算は，ベクトルｖとベクトルｕの内積を意味する。
【００１４】
また，本願発明は，更に  前記関節を原点とし，前記交点１から前記原点に向かう方向をｘ軸の正方向とする，三次元直交座標系（ｘ，ｙ，ｚ）から，
μ＝２ｔａｎ−１（−ｚ／（ｘ＋１））
ν＝２ｔａｎ−１（ｙ／（ｘ＋１））
の関係を有する，モノポーラ球面座標系（μ，ν）を用いて，前記角度範囲境界円が，少なくともμ＝μｅ及びν＝νｅのうち何れか一方を満たす（ここにおいて，μｅ及びνｅは定数）ようにしてもよい。
【００１５】
本願発明は，更に，前記交点２の前記モノポーラ球面座標を（μ，ν）とし，μの下限及び上限をそれぞれμ０，μ１とし，νの下限及び上限をそれぞれν０，ν１とした場合に，前記角度範囲が，μ０＜μ＜μ１及びν０＜ν＜ν１を満たすよう前記角度範囲境界円を設定してもよい。
【００１６】
本願発明は，更に，前記角度範囲境界円が，前記交点１を通らない補助角度範囲境界円を更に用いるようにしてもよい。すなわち，この補助角度範囲境界円を角度範囲判定ステップで用いてもよい。
【００１７】
本願発明は，前記角度範囲判定ステップにおいて，前記子骨の角度が前記角度範囲の中に無いと判定された場合，前記交点２から前記角度範囲の中にあることを満たす球面上の点まで前記球面上に沿って測定した距離が最短となる前記球面上の点に，前記交点２を移動させことにより，前記子骨の角度を修正する，角度修正ステップ，を更に有してもよい。
【００１８】
また，本願発明は，上記方法を実行する命令を有するプログラムとして実現されてもよい。あるいは，本願発明は，上記方法を実現する手段を有する装置として実現されてもよい。
【発明の効果】
【００１９】
本願発明により，骨格の角度を簡便な手法で制御することができる。なお，本願発明の効果は，この点に限定されるものではない。
【図面の簡単な説明】
【００２０】
【図１】スケルトンモデル，親骨，子骨，及び座標系を示す図。
【図２】モノポーラ球面座標を示す図（（ｂ）は，（ａ）を反対側から見た図）。
【図３】平面群と単位球面の交線が縦グリッドとなることを示す図。
【図４】平面群と単位球面の交線が横グリッドとなることを示す図。
【図５】平面の向きとφ，θとの関係を示す図。
【図６】ｘｚ平面上の点Ｐのφ，μを示す図。
【図７】ｘｙ平面上の点Ｐのθ，νを示す図。
【図８】矩形領域による角度制限を示す図。
【図９】小判型領域による角度制限（横長形状）を示す図。
【図１０】小判型領域による角度制限（縦長形状）を示す図。
【図１１】矩形領域の内外判定を模式的に示す図。
【図１２】小判型領域（横長）の補助円を示す図。
【図１３】小判型領域（縦長）の補助円を示す図。
【図１４】円領域Ｃに対する，点Ｐからの最近点Ｐｎを示す図。
【図１５】矩形領域の４頂点を示す図。
【図１６】球面上で互いに接する３円Ｃ２，Ｃ３，Ｃｔ０を示す図。
【図１７】球面３角形Ｏ２Ｏ３Ｏｔ０と内接円を示す図。
【図１８】矩形領域の内外判定の手順を示す図。
【図１９】横長の小判型領域の内外判定の手順を示す図。
【図２０】縦長の小判型領域の内外判定の手順を示す図。
【図２１】矩形領域に対する最近点を求める手順を示す図。
【図２２】横長の小判型領域に対する最近点求める手順を示す図。
【図２３】縦長の小判型領域に対する最近点求める手順を示す図。
【図２４】小判型領域形状が縦長か横長かを判定する手順を示す図。
【図２５】本発明の実施例の装置構成を示す図。
【図２６】本発明の実施例のハードウエア構成を示す図。
【図２７】本発明の実施例の手順を示す図。
【図２８】本発明の実施例の構成を示す図。
【図２９】曲げと捻りの修正の手順を示す図。
【発明を実施するための形態】
【００２１】
［１．モノポーラ球面座標］
上述のように，スケルトンモデル（図１（ａ））の骨の向きを表すために，各骨に対して図１（ｂ）のように座標系を定める。
【００２２】
関節を中心とする単位球面（半径１の球面）を作り，子骨のｘ軸（ｘ＞０の部分）と球面との交点をＰとすると，関節の曲げ状態は，球面上の点Ｐの位置で表すことができる。関節の回転（曲げ，捻り）を表現する方法の一つに，３軸の回転角（オイラー角）を使う方法がある。例として，親骨の座標系を基準にｘ軸回転，ｚ軸回転，ｙ軸回転の順に回転を掛けた場合，各軸の回転角と点Ｐの位置との関係に注目すると，ｙ軸回転角が経度に，ｚ軸回転角が緯度に相当する。そこで，ｙ軸回転角，ｚ軸回転角を等間隔にとって球面上にグリッドを作ると，地球儀の経線・緯線と同様の形状になる。北極と南極に相当する２点が角度表現上の特異点となるため，扱いにくいという問題がある。
【００２３】
これに対して，特異点を１個に減らす手法として，射影を用いる方法（特許文献２，特許文献３，特許文献４）が知られている。この手法の特性を球面上のグリッドで表すと図２のようになる。このグリッドは，球面上に作られた座標系と捉えることができる。極（特異点）が１個であることから，本願明細書では，この座標系を「モノポーラ球面座標」と呼ぶことにする。
【００２４】
以下，このモノポーラ球面座標に関して，次の項目について述べる。
・射影を使わずに球面上にモノポーラ球面座標系を構成する手法
・モノポーラ球面座標を使って関節の角度制限を行なう手法
［２．モノポーラ球面座標系の構成］
一般に２次元の座標系に目盛りをつけるとグリッド（格子）となる。以下の説明では，便宜上「グリッド」という用語を用いる場合があるが，その表すものは，単なる格子ではなく座標系の意味を含むものとする。
【００２５】
座標（−１，０，０）の点をＰ＊とし，「極」と呼ぶことにする。極Ｐ＊を通りｙ軸に平行な直線をｌｙとし，図３のように，ｌｙを含む等角度間隔の平面群を用意する。この平面群と単位球面との交線をグリッドの縦線とする。
【００２６】
同様に，極Ｐ＊を通りｚ軸に平行な直線をｌｚとし，図４のように，ｌｚを含む等角度間隔の平面群を用意する。この平面群と単位球面との交線をグリッドの横線とする。
【００２７】
図５のように，直線ｌｙを含む平面の向きを角度φで表し，直線ｌｚを含む平面の向きを角度θで表す。φ，θの符号は，図中に示す方向を正とする。球面上の点Ｐの位置は，φによって決まる平面，θによって決まる平面，および単位球面の３つの面の交点として決まる。μ≡２φ，ν≡２θとし，μ，νを使って球面上の位置を表す。
【００２８】
φ，θをそのまま使わずにμ，νを使うことにより，次のようなメリットがある。図６のように，点Ｐがｘｚ平面上にある（即ちν＝０である）場合を考える。子骨の向きはＯＰである。座標（１，０，０）の点をＱとする。
【００２９】
∠ＯＰ＊Ｐ＝∠ＯＰＰ＊＝φ
∠ＯＰ＊Ｐ＋∠ＯＰＰ＊＝∠ＱＯＰ
∴∠ＱＯＰ＝２φ＝μ
したがって，ν＝０の場合には，μは子骨のｙ軸回りの回転角となる。同様に，図７のように，点Ｐがｘｙ平面上にある（即ちμ＝０である）場合には，νは子骨のｚ軸回りの回転角となる。
【００３０】
このように，μ，νを使うと回転の状態（子骨の向き）を感覚的に把握しやすい。例えば図２は，μ，νの値を１０°間隔にとって作ったグリッドであるが，ｘｙ平面上およびｘｚ平面上ではグリッドが円周上で１０°ずつの等間隔になっていることが分かる。
【００３１】
［３．モノポーラ球面座標と子骨の向き］
子骨の向きを表す単位ベクトルをｖ≡（ｘ，ｙ，ｚ）とし，これをモノポーラ球面座標で表したものを（μ，ν）とする。両者の関係は次式で表される（本明細書においてｖはベクトルを表す）。
【００３２】
【数１】
0005486524.tif 000002
ただし，Ｍ，Ｎ，Ｔは次のとおりである。
【００３３】
【数２】
0005486524.tif 000003
式の導出方法については，後述する（［式の導出方法Ａ］を参照）。
【実施例】
【００３４】
以下，具体的な角度（曲げ，捻り）の制御について詳細に述べる。
【００３５】
［４．可動領域の設定］
［４．１  矩形領域による角度制限］
μ，νの値に上限，下限を設定することで，図８のように可動領域を設定できる。このような可動領域制限を矩形制限と呼ぶことにする。μの上下限値をそれぞれμ１，μ０とし，νの上下限値をそれぞれν１，ν０とする。
【００３６】
式μ＝μ０は単位球面上で１つの円を表す。この円をＣ０とする。円Ｃ０によって球の表面は２つの領域に分けられるが，このうち可動領域側（μ＞＝μ０の領域）を，円Ｃ０の「内側」と呼ぶことにする。球面上の円に対する内外判定の際に，後述のように円錐を使って判定を行なう。そこで，以下のように円錐パラメータを求めておく。
【００３７】
円Ｃ０と球の中心Ｏとを結んで作られる円錐をＯＣ０とし，円錐ＯＣ０の軸方向の単位ベクトルをｕ０≡（ａ０，ｂ０，ｃ０）とする（本明細書においてｕはベクトルを表す）。ｕ０の方向は可動領域側とする。また，円錐ＯＣ０の半頂角（軸ｕ０と円錐面のなす角）をα０とする。これらの値は次式により得られる。
【００３８】
【数３】
0005486524.tif 000004
同様に，式μ＝μ１，ν＝ν０，ν＝ν１が表す円を，それぞれＣ１，Ｃ２，Ｃ３とする。円錐ＯＣ１，ＯＣ２，ＯＣ３の中心軸をそれぞれｕ１≡（ａ１，ｂ１，ｃ１），ｕ２≡（ａ２，ｂ２，ｃ２），ｕ３≡（ａ３，ｂ３，ｃ３）とし，半頂角をそれぞれα１，α２，α３とする。これらの値は次式により得られる。
【００３９】
【数４】
0005486524.tif 000005
値の範囲が−π＜μ０＜μ１＜π，−π＜ν０＜ν１＜πなので，次式が成り立つ。
【００４０】
【数５】
0005486524.tif 000006
なお，今後扱う他の可動領域についても，球面上の円は可動領域側を「内側」とし，円錐の軸ベクトルの向きは可動領域側とする。
【００４１】
［４．２  小判型領域による角度制限］
矩形制限を用いて骨格モデルを動かすと，可動領域の角部に引っ掛かり，滑らかでない動きになることがある。この挙動を改善するために，以下のように小判型の可動領域を設定する。
【００４２】
［４．２．１  隅円の作成］
図９，図１０のように，矩形領域の３辺に接する隅円を作り，角部を取り除く。元の矩形領域の形状によって，図９のようにＣ２，Ｃ３の一部が残る場合と，図１０のようにＣ０，Ｃ１の一部が残る場合とがある。前者の形状を「横長」，後者の形状を「縦長」と呼ぶことにする。
【００４３】
横長形状の場合，図９のように，μ０側の隅円（Ｃ０，Ｃ２，Ｃ３に接する円）をＣｔ０とし，μ１側の隅円（Ｃ１，Ｃ２，Ｃ３に接する円）をＣｔ１とする。
【００４４】
縦長形状の場合，図１０のように，ν０側の隅円（Ｃ０，Ｃ１，Ｃ２に接する円）をＣｔ２とし，ν１側の隅円（Ｃ０，Ｃ１，Ｃ３に接する円）をＣｔ３とする。
【００４５】
［４．２．２  隅円の円錐パラメータ］                                                                                                                                                                                                                                                                                                                                
隅円の円錐パラメータは，以下の計算によって得られる。まず，次のようにｋ０，ｋ１，ｋ２，ｋ３を定義する。
【００４６】
【数６】
0005486524.tif 000007
−π＜μ０＜μ１＜π，−π＜ν０＜ν１＜πなので，ｋ０＜ｋ１，ｋ２＞ｋ３である。次式により領域形状の縦長・横長を決定する。
【００４７】
【数７】
0005486524.tif 000008
Ｄａ＜０ならば横長，Ｄａ＞０ならば縦長である。Ｄａ＝０の場合には，２つの隅円は連続した１つの円となる。隅円の円錐パラメータは，以下の手順によって求められる。
【００４８】
［Ｄａ＜＝０の場合（横長または円形状）］
円錐ＯＣｔ０の軸方向の単位ベクトルをｕｔ０≡（ａｔ０，ｂｔ０，ｃｔ０）とし，半頂角をαｔ０とする。これらの値は，以下の計算によって得られる。
【００４９】
【数８】
0005486524.tif 000009
円錐ＯＣｔ１の軸単位ベクトルｕｔ１≡（ａｔ１，ｂｔ１，ｃｔ１）および半頂角αｔ１は，以下の計算によって得られる。
【００５０】
【数９】
0005486524.tif 000010
［Ｄａ＞０の場合（縦長形状）］
円錐ＯＣｔ２の軸単位ベクトルｕｔ２≡（ａｔ２，ｂｔ２，ｃｔ２）および半頂角αｔ２は，以下の計算によって得
られる。
【００５１】
【数１０】
0005486524.tif 000011
円錐ＯＣｔ３の軸単位ベクトルｕｔ３≡（ａｔ３，ｂｔ３，ｃｔ３）および半頂角αｔ３は，以下の計算によって得られる。
【００５２】
【数１１】
0005486524.tif 000012
以上の円錐パラメータ計算式の導出方法については，後述する（「式の導出方法Ｂ」を参照）。また，判定式Ｄａの導出方法については，後述する（［式の導出方法Ｄ］を参照）。
【００５３】
［５．可動領域に対する内外判定］
「５．１  円錐を使った内外判定」
矩形制限，小判型制限のいずれも，可動領域の形状は複数の円を組み合わせたものになっている。そのため，可動領域に対する内外判定は，円領域に対する内外判定の組み合わせとなる。円領域に対する内外判定は，以下のように円錐を使って実現できる。
【００５４】
子骨の向き（ｘ軸の向き）を表す単位ベクトルをｖ≡（ｘ，ｙ，ｚ）とする。球面上の円Ｃが与えられ，円錐ＯＣの軸単位ベクトルがｕ≡（ａ，ｂ，ｃ）で，半頂角がαであるとする。ベクトルｖの円錐ＯＣに対する内外判定は，以下のように実現できる。
【００５５】
ｖとｕのなす角がα以下であることが，ｖが円錐ＯＣの内側にあることの必要十分条件である。この条件を式で表すと，次のようになる。
【００５６】
【数１２】
0005486524.tif 000013
角度範囲［０，π］においてｃｏｓは単調減少なので，次式のように変形できる。
【００５７】
【数１３】
0005486524.tif 000014
判定式Ｄを次のように定義すると，Ｄの正負によって円錐ＯＣに対する内外を判定できる。
【００５８】
【数１４】
0005486524.tif 000015
Ｄ＞＝０であれば円錐内，そうでなければ円錐外である。
【００５９】
この判定式は，平面を使った判定と見ることもできる。法線ベクトルが（ａ，ｂ，ｃ）で原点からの距離がｃｏｓαの平面を，平面κとする。判定式Ｄの値は，点（ｘ，ｙ，ｚ）の平面κからの符号付きの距離（ｕ方向が正）を意味する。したがって，Ｄの正負による判定は，点（ｘ，ｙ，ｚ）が平面κの表裏どちら側にあるかを判定していることになる。
【００６０】
判定式Ｄの平面式としての解釈は，次のように理解できる。一般に，球面上の円は，球と「その円を含む平面」との交線として捉えられる。そのため，球面上の円領域に対する内外判定は，平面による判定を使って実現できる。式Ｄ＝０が表す平面は，円Ｃを含む平面になっている。
【００６１】
［５．２  矩形領域の内外判定］
図１１のように，子骨の向きｖが円Ｃ０，Ｃ１，Ｃ２，Ｃ３全てに対して内側にある場合のみ，矩形領域内となる。図１８に示すように，以下の手順によって，領域に対する内外判定を行なう。
【００６２】
Ｓ１８０１において，円Ｃ０による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１８１１）。この判定が「はい」であれば，Ｓ１０３に次に進む。
【００６３】
Ｓ１８０３において，円Ｃ１による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１８１１）。この判定が「はい」であれば，Ｓ１０５に次に進む。
【００６４】
Ｓ１８０５において，円Ｃ２による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１８１１）。この判定が「はい」であれば，Ｓ１０７に次に進む。
【００６５】
Ｓ１８０７において，円Ｃ３による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１８１１）。この判定が「はい」であれば，領域内と判定される（Ｓ１８０９）。
【００６６】
［５．３  小判型領域の内外判定］
［５．３．１  補助円の作成］
小判型領域の内外判定には，領域形状を構成する円（Ｃ０〜Ｃ３，Ｃｔ０，〜Ｃｔ３）だけでなく，以下に述べる補助円を使う。
【００６７】
［横長形状の場合］
領域形状が横長の場合，図１２のように補助円を作る。円Ｃｔ０とＣ２の接点をＰ０２とし，円Ｃｔ０とＣ３の接点をＰ０３とする。点Ｐ＊，Ｐ０２，Ｐ０３の３点を通る円を，補助円Ｃｓ０とする。円Ｃｓ０の「内側」は，小判型領域の中央の側とする。
【００６８】
円錐ＯＣｓ０の軸単位ベクトルを（ａｓ０，ｂｓ０，ｃｓ０）とし，半頂角をαｓ０とする。これらの値は，以下の計算によって得られる。
【００６９】
【数１５】
0005486524.tif 000016
同様に，円Ｃｔ１とＣ２の接点をＰ１２とし，円Ｃｔ１とＣ３の接点をＰ１３とする。点Ｐ＊，Ｐ１２，Ｐ１３の３点を通る補助円をＣｓ１とする。円錐ＯＣｓ１の軸単位ベクトル（ａｓ１，ｂｓ１，ｃｓ１）と半頂角αｓ１は，以下の計算によって得られる。
【００７０】
【数１６】
0005486524.tif 000017
［縦長形状の場合］
領域形状が縦長の場合は，図１３のように補助円を作る。円Ｃｔ２とＣ０の接点をＰ２０とし，円Ｃｔ２とＣ１の接点をＰ２１とする。点Ｐ＊，Ｐ２０，Ｐ２１の３点を通る補助円をＣｓ２とする。円錐ＯＣｓ２の軸単位ベクトル（ａｓ２，ｂｓ２，ｃｓ２）と半頂角αｓ２は，以下の計算によって得られる。
【００７１】
【数１７】
0005486524.tif 000018
円Ｃｔ３とＣ０の接点をＰ３０とし，円Ｃｔ３とＣ１の接点をＰ３１とする。点Ｐ＊，Ｐ３０，Ｐ３１の３点を通る補助円をＣｓ３とする。円錐ＯＣｓ３の軸単位ベクトル（ａｓ３，ｂｓ３，ｃｓ３）と半頂角αｓ３は，以下の計算によって得られる。
【００７２】
【数１８】
0005486524.tif 000019
以上の円錐パラメータ計算式の導出方法については，後述する（［式の導出方法Ｃ］を参照）。
【００７３】
［５．３．２  補助円を使った内外判定］
［横長形状の場合］
横長の小判型領域の内外判定には，Ｃｔ０，Ｃｔ１，Ｃ２，Ｃ３，Ｃｓ０，Ｃｓ１の６つの円を使う。図１９に示すように以下の手順によって，領域に対する内外判定を行なう。
【００７４】
Ｓ１９０１において，円Ｃ２による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１９１３）。この判定が「はい」であれば，Ｓ１９０３に次に進む。
【００７５】
Ｓ１９０３において，円Ｃ３による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ１９１３）。この判定が「はい」であれば，Ｓ１９０５に次に進む。
【００７６】
Ｓ１９０５において，円Ｃｓ０，Ｃｓ１による内外判定で，ともに内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ１９１１）。この判定が「いいえ」であれば，Ｓ１９０７に進む。
【００７７】
Ｓ１９０７において，円Ｃｔ０による内外判定で，内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ１９１１）。この判定が「いいえ」であれば，Ｓ１９０９に進む。
【００７８】
Ｓ１９０９において，円Ｃｔ１による内外判定で，内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ１９１１）。この判定が「いいえ」であれば，領域外と判定する（Ｓ１９１３）。  
［縦長形状の場合］
縦長の小判型領域の内外判定には，Ｃｔ２，Ｃｔ３，Ｃ０，Ｃ１，Ｃｓ２，Ｃｓ３の６つの円を使う。図２０に示すように以下の手順によって，領域に対する内外判定を行なう。
【００７９】
Ｓ２００１において，円Ｃ０による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ２０１３）。この判定が「はい」であれば，Ｓ２００３に次に進む。
【００８０】
Ｓ２００３において，円Ｃ１による内外判定で，内側か否かの判定を行う。この判定が「いいえ」であれば，領域外と判定される（Ｓ２０１３）。この判定が「はい」であれば，Ｓ２００５に次に進む。
【００８１】
Ｓ２００５において，円Ｃｓ２，Ｃｓ３による内外判定で，ともに内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ２０１１）。この判定が「いいえ」であれば，Ｓ２００７に進む。
【００８２】
Ｓ２００７において，円Ｃｔ２による内外判定で，内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ２０１１）。この判定が「いいえ」であれば，Ｓ２００９に進む。
【００８３】
Ｓ２００９において，円Ｃｔ３による内外判定で，内側か否かの判定を行う。この判定が「はい」であれば，領域内と判定する（Ｓ２０１１）。この判定が「いいえ」であれば，領域外と判定する（Ｓ２０１３）。
【００８４】
［６．捻り角］
［６．１  曲げと捻りの順序］
子骨の捻り角をλとし，捻りを含めたモノポーラ球面座標をλ，μ，νで表す。曲げと捻りの順序は，次の２とおりが考えられる。
・曲げた後に，子骨のｘ軸回りに捻る。
・ｘ軸回りに捻り，その後に曲げる。
前者を「元曲げ」，後者を「元捻り」と呼ぶことにする。
【００８５】
［６．２  捻り角の定義］
捻り角を扱うには，捻り角λ＝０の状態を定義する必要がある。まず，元曲げ方式について説明する。関節の曲げ状態は，球面上の点Ｐ（子骨のｘ軸と単位球面との交点）の位置で表すことができる。これに対して捻りは，軸ＯＰ回りの回転として表される。子骨のｙ軸，ｚ軸がグリッドの向き（それぞれ＋ν方向，−μ方向）と合っている状態を，捻り角が０であると定義する。
【００８６】
元捻り方式の場合は，捻りによってグリッド自体がｘ軸（親骨のｘ軸）回りにλだけ回転する。捻りの後に曲げを掛けても，子骨のｙ軸，ｚ軸は，回転後のグリッドの向き（それぞれ＋ν方向，−μ方向）と常に一致するものとする。
【００８７】
［６．３マトリクスとモノポーラ球面座標の関係］
子骨の向きを表すマトリクスを，次式のようにＭとする。マトリクスの要素の並びは，列ベクトルに対して左からマトリクスを掛ける方式とする（本明細書でＭはマトリクスを表す）。
【００８８】
【数１９】
0005486524.tif 000020
マトリクスＭｂ，Ｍｔを次のように定義する。ただし，Ｍ，Ｎ，Ｔは式（６），（７）のとおりとする。
【００８９】
【数２０】
0005486524.tif 000021
Ｍｂは曲げ，Ｍｔは捻りを表すりマトリクスである。曲げだけを作用させたときの，子骨の向きを表す単位ベクトルを，ｖｂ≡（ｘｂ，ｙｂ，ｚｂ）とする。ｖｂはＭｂの第１列（最も左の列）になるので，次式のようになる。
【００９０】
【数２１】
0005486524.tif 000022
ｖｂからＴ，Ｍ，Ｎを求める式は次のようになる。
【００９１】
【数２２】
0005486524.tif 000023
ｘ≒−１の場合に別の式を使うのは，桁落ちによる精度の低下を避けるためである。
【００９２】
［６．３．１  元曲げ方式］
Ｍからλ，μ，νを求める手順は，以下のようになる。ｍ００≒−１の場合に別の式を使うのは，桁落ちによる精度の低下を避けるためである。
【００９３】
【数２３】
0005486524.tif 000024
逆に，λ，μ，νからＭを求めるには，式（６４），（６５）を使ってＭｂ，Ｍｔを求め，これを次式に代入する。
【００９４】
【数２４】
0005486524.tif 000025
Ｍからλ，ｖｂを求めるには，式（７０）および次式を使う。
【００９５】
【数２５】
0005486524.tif 000026
逆に，λ，ｖｂからＭを求めるには，式（６７），（６８），（６９）を使ってＴ，Ｍ，Ｎを求め，これを式（６４）に代入し，式（６５），（７４）を使う。
【００９６】
［６．３．２  元捻り方式］
Ｍからλ，μ，νを求める手順は，以下のようになる。
【００９７】
【数２６】
0005486524.tif 000027
逆に，λ，μ，νからＭを求めるには，式（６４），（６５）を使ってＭｂ，Ｍｔを求め，これを次式に代入する。
【００９８】
【数２７】
0005486524.tif 000028
Ｍからλ，ｖｂを求めるには，式（７６）および次式を使う。
【００９９】
【数２８】
0005486524.tif 000029
逆に，λ，ｖｂからＭを求めるには，式（６７），（６８），（６９）を使ってＴ，Ｍ，Ｎを求め，これを式（６４）に代入し，式（６５），（８０）を使う。
【０１００】
計算式の導出方法については，後述する（［式の導出方法Ｅ］を参照）。
【０１０１】
［６．４  四元数とモノポーラ球面座標の関係］
子骨の向きを表す四元数（クォータニオン）を，次式のようにｑとする。
【０１０２】
【数２９】
0005486524.tif 000030
四元数ｑｂ，ｑｔを次のように定義する。
【０１０３】
【数３０】
0005486524.tif 000031
ｑｂは曲げ，ｑｔは捻りを表す四元数である。
【０１０４】
［６．４．１  元曲げ方式］
ｑからλ，μ，νを求める式は，以下のようになる。
【０１０５】
【数３１】
0005486524.tif 000032
逆に，λ，μ，νからｑを求めるには，式（８３），（８４）を使ってｑｂ，ｑｔを求め，これを次式に代入する。
【０１０６】
【数３２】
0005486524.tif 000033
ｑからλ，ｖｂを求めるには，式（８５）および次式を使う。
【０１０７】
【数３３】
0005486524.tif 000034
逆に，λ，ｖｂからｑを求めるには，式（６７），（６８），（６９）を使ってＴ，Ｍ，Ｎを求め，これを式（８３）に代入し，式（８４），（８８）を使う。
【０１０８】
［６．４．２  元捻り方式］
ｑからλ，μ，νを求める式は，以下のようになる。
【０１０９】
【数３４】
0005486524.tif 000035
逆に，λ，μ，νからｑを求めるには，式（８３），（８４）を使ってｑｂ，ｑｔを求め，これを次式に代入する。
【０１１０】
【数３５】
0005486524.tif 000036
ｑからλ，ｖｂを求めるには，式（８５）および次式を使う。
【０１１１】
【数３６】
0005486524.tif 000037
逆に，λ，ｖｂからｑを求めるには，式（６７），（６８），（６９）を使ってＴ，Ｍ，Ｎを求め，これを式（８３）に代入し，式（８４），（９３）を使う。
【０１１２】
［７．可動領域外の場合の修正方法］
関節の曲げが可動領域外となった場合に，これを可動領域内に修正する方法について説明する。関節の曲げ状態は，単位球面上の点Ｐの位置で表される。Ｐの位置を可動領域内（境界を含む）に修正した点をＰｍとする。
【０１１３】
球面上の領域Ａと，領域Ａ外の球面上の点Ｐとが与えられたとき，領域境界上の点のうち，Ｐからの距離（球面上での距離）が最小となる点を，「領域Ａに対するＰの最近点」と呼ぶことにする。可動領域と点Ｐのみが与えられた場合，可動領域に対するＰの最近点をＰｍとするのが最良であると考えられる。そこで，最近点を用いた修正方法について述べる。
【０１１４】
［７．１  円領域に対する最近点］
矩形制限，小判型制限のいずれも，可動領域の形状は複数の円を組み合わせたものになっている。そのため，可動領域に対する最近点を得るには，円領域に対する最近点を求める必要がある。
【０１１５】
図１４のように，子骨の向き（ｘ軸の向き）を表す単位ベクトルをｖ≡（ｘ，ｙ，ｚ）とし，点Ｐの座標を（ｘ，ｙ，ｚ）とする。球面上の円Ｃが与えられ，円錐ＯＣの軸単位ベクトルがｕ≡（ａ，ｂ，ｃ）で，半頂角がαであるとする。円領域Ｃに対するＰの最近点をＰｎとし，ベクトルＯＰｎをｗとする。ｗは次式により求められる。
【０１１６】
【数３７】
0005486524.tif 000038
ただしβはｖとｕのなす角で，０＜β＜＝πである。ｓｉｎβ＞＝０なので，ｓｉｎβ，ｔａｎβは次式により得られる。
【０１１７】
【数３８】
0005486524.tif 000039
ｓｉｎβ＝０となるのはｖ＝−ｕのときで，その場合は円Ｃ上の全ての点が最近点となる。
【０１１８】
［７．２円領域までの距離］
単位球面上において，点Ｐが円領域Ｃの外にあるとする。Ｐから円Ｃまでの距離（単位球面上での距離）をγとする。前述（７．１節）の記号を使うと，γ＝∠ＰＯＰｎ＝β−αなので，次式のようになる。
【０１１９】
【数３９】
0005486524.tif 000040
０＜γ＜πなので，ｃｏｓγはγに対して単調減少である。したがって，円領域に対する距離の大小判定には，γの替わりにｃｏｓγを使うことができる（ただし大小関係は逆になる）。
【０１２０】
［７．３  矩形領域に対する最近点］
矩形領域に対する点Ｐの最近点Ｐｍは，図２１に示すように，以下の手順によって得られる。Ｐは矩形領域の外にあるものとする。また，図１５のように，矩形領域の角の４頂点を，それぞれＰａ，Ｐｂ，Ｐｃ，Ｐｄとする。
【０１２１】
Ｓ２１０１において，円Ｃ０によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であればＳ２１０７に進む。判定が「いいえ」であれば，Ｓ２１０３に進む。
【０１２２】
Ｓ２１０３において，円Ｃ０に対するＰの最近点を求め，ＰｎとしＳ２１０５に進む。
【０１２３】
Ｓ２１０５において，円Ｃ２，Ｃ３によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２１２７），終了する。判定が「いいえ」であれば，Ｓ２１１３に進む。
【０１２４】
Ｓ２１０７において，円Ｃ１によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であれば，Ｓ２１１３に進む。判定が「いいえ」であれば，Ｓ２１０９に進む。
【０１２５】
Ｓ２１０９において，円Ｃ１に対するＰの最近点を求め，ＰｎとしＳ２１１１に進む。
【０１２６】
Ｓ２１１１において，円Ｃ２，Ｃ３によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２１２７）終了する。判定が「いいえ」であれば，Ｓ３１１３に進む。
【０１２７】
Ｓ２１１３において，円Ｃ２によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であれば，Ｓ２１１９に進む。判定が「いいえ」であればＳ２１１５に進む。
【０１２８】
Ｓ２１１５において，円Ｃ２に対するＰの最近点を求め，ＰｎとしＳ２１１７に進む。
【０１２９】
Ｓ２１１７において，円Ｃ０，Ｃ１によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２１２７）終了する。判定が「いいえ」であればＳ２１２５に進む。
【０１３０】
Ｓ２１１９において，Ｐが円Ｃ３の外であることが確定する。Ｓ２１２１に進む。
【０１３１】
Ｓ２１２１において，円Ｃ３に対するＰの最近点を求め，ＰｎとしＳ２１２３に進む。
【０１３２】
Ｓ２１２３において，円Ｃ０，Ｃ１によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２１２７）終了する。判定が「いいえ」であれば，Ｓ２１２５に進む。
【０１３３】
Ｓ２１２５において，Ｐａ，Ｐｂ，Ｐｃ，Ｐｄの４点のうちＰから最も近い（球面上での距離が最小）のものをＰｍとし，終了する。
【０１３４】
［７．４小判型領域に対する最近点］
［横長形状の場合］
横長の小判型領域に対する点Ｐの最近点Ｐｍは，図２２に示すように，以下の手順によって得られる。Ｐは小判型領域の外にあるものとする。
【０１３５】
Ｓ２２０１において，円Ｃ２によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であれば，Ｓ２２０７に進む。判定が「いいえ」であればＳ２２０３に進む。
【０１３６】
Ｓ２２０３において，円Ｃ２に対するＰの最近点を求めＰｎとしＳ２２０５に進む。
【０１３７】
Ｓ２２０５において，円Ｃｓ０，Ｃｓ１によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２２１５）として終了する。判定が「いいえ」であればＳ２２１３に進む。
【０１３８】
Ｓ２２０７において，円Ｃ３によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であればＳ２２１３に進む。判定が「いいえ」であればＳ２２０９に進む。
【０１３９】
Ｓ２２０９において，円Ｃ３に対するＰの最近点を求めＰｎとしＳ２２１１に進む。
【０１４０】
Ｓ２２１１において，円Ｃｓ０，Ｃｓ１によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２２１５）終了する。判定が「いいえ」であればＳ２２１３に進む。
【０１４１】
Ｓ２２１３において，円Ｃｔ０，Ｃｔ１のうち，Ｐからの距離が小さい方に対するＰの最近点をＰｍとし，終了する。
【０１４２】
［縦長形状の場合］
縦長の小判型領域に対する点Ｐの最近点は，図２３に示すように，以下の手順によって得られる。Ｐは小判型領域の外にあるものとする。
【０１４３】
Ｓ２３０１において，円Ｃ０によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であればＳ２３０７に進む。判定が「いいえ」であればＳ２３０３に進む。
【０１４４】
Ｓ２３０３において，円Ｃ０に対するＰの最近点を求めＰｎとし，Ｓ２２０５に進む。
【０１４５】
Ｓ２３０５において，円Ｃｓ２，Ｃｓ３によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であればＰｎをＰｍとして（Ｓ２３１５）終了する。判定が「いいえ」であれば，Ｓ２３１３に進む。
【０１４６】
Ｓ２３０７において，円Ｃ１によるＰの内外判定で，内側か否かの判定を行う。判定が「はい」であれば，Ｓ２３１３に進む。判定が「いいえ」であればＳ２３０９に進む。
【０１４７】
Ｓ２３０９において，円Ｃ１に対するＰの最近点を求めＰｎとする。
【０１４８】
Ｓ２３１１において，円Ｃｓ２，Ｃｓ３によるＰｎの内外判定で，ともに内側であるか否かの判定を行う。判定が「はい」であれば，ＰｎをＰｍとして（Ｓ２３１５）終了する。判定が「いいえ」であればＳ２３１３に進む。
【０１４９】
Ｓ２３１３において，円Ｃｔ２，Ｃｔ３のうち，Ｐからの距離が小さい方に対するＰの最近点をＰｍとし，終了する。
【０１５０】
［７．５  曲げと捻りの修正方法］
関節の回転（曲げ捻り）の状態がマトリクス（または四元数）で与えられ，これを角度制限範囲内に修正する手順は，図２９に示すように以下のようになる。
【０１５１】
Ｓ２９０１で，マトリクス（または四元数）からλ，ｖｂを求める（６．３節，６．４節参照）。
【０１５２】
Ｓ２９０３で，ｖｂが可動領域内かどうかを調べる（５．２節，５．３節参照）。可動領域外であればｖｂを修正する（７．３節，７．４節参照）（Ｓ２９０５）。
【０１５３】
Ｓ２９０７で，λに上下限が設定されていれば，この範囲内にあるかどうかを調べる。この範囲外であればλが上下限の範囲内になるようλを修正する（Ｓ２９０９）。
【０１５４】
Ｓ２９１１で，λ，ｖｂからマトリクス（または四元数）を求める（６．３節，６．４節参照）。
【０１５５】
［式の導出方法Ａ］方向ベクトルとモノポーラ球面座標との関係式の導出
子骨の向きを表す単位ベクトルを（ｘ，ｙ，ｚ）とし，これをモノポーラ球面座標で表したものを（μ，ν）とする。モノポーラ球面座標系の構成方法より，座標（ｘ，ｙ，ｚ）の点は，次の２平面上にある。
【０１５６】
【数４０】
0005486524.tif 000041
式（１００）は，ｘｙ平面を直線ｌｙ回りに角度μ／２だけ回転させた平面で，式（１０１）は，ｘｚ平面を直線ｌｚ回りに角度ν／２だけ回転させた平面である。μ，νの取り得る値の範囲は，−π＜μ＜π，−π＜ν＜πである。また，（ｘ，ｙ，ｚ）は単位ベクトルなので，
【０１５７】
【数４１】
0005486524.tif 000042
である。以上の３つの式を連立させて解く。
【０１５８】
ｃｏｓ（ν／２）≠０なので，式（１０１）より次式が得られる。ただし，Ｎ≡ｔａｎ（ν／２）である。
【０１５９】
【数４２】
0005486524.tif 000043
ａｎ（μ／２）である。
【０１６０】
【数４３】
0005486524.tif 000044
式（１０３），（１０４）を式（１０２）に代入すると，ｘの２次方程式が得られる。これを解いて，解のうちｘ＝−１でないほうを選ぶと，次式のようにｘが得られる。ただし，Ｔ≡２／（Ｍ２＋Ｎ２＋１）である。
【０１６１】
【数４４】
0005486524.tif 000045
これを式（１０３），（１０４）に代入すると，次式のようにｙ，ｚが得られる。
【０１６２】
【数４５】
0005486524.tif 000046
［式の導出方法Ｂ］小判型領域隅円の円錐パラメータの導出
円Ｃ０，Ｃ２，Ｃ３に接する円Ｃｔ０を求める。円錐ＯＣｔ０の軸方向単位ベクトルを未知ベクトルｗ≡（ｘ，ｙ，ｚ）とし，半頂角を未知数τとする（本明細書において，ｗはベクトルを表す）。
【０１６３】
円錐ＯＣ０の軸単位ベクトルはｕ０≡（ａ０，ｂ０，ｃ０），半頂角はα０である。円Ｃｔ０は円Ｃ０の内側（可動領域側）に接するので，ｕ０とｗのなす角はα０−τとなる。したがって，
【０１６４】
【数４６】
0005486524.tif 000047
となる。ｃｏｓα０＝−ａ０，ｓｉｎα０＝−ｃ０，ｂ０＝０を代入すると
【０１６５】
【数４７】
0005486524.tif 000048
となり，ｋ０≡ａ０／ｃ０とおくと，次式が得られる。
【０１６６】
【数４８】
0005486524.tif 000049
同様に，円錐ＯＣ２とＯＣｔ０に対してｃｏｓα２＝−ａ２，ｓｉｎα２＝ｂ２，ｃ２＝０を利用し，ｋ２≡ａ２／ｂ２とおくと，次式が得られる。
【０１６７】
【数４９】
0005486524.tif 000050
同様に，円錐ＯＣ３とＯＣｔ０に対してｃｏｓα３＝−ａ３，ｓｉｎα３＝−ｂ３，ｃ３＝０を利用し，ｋ３≡ａ３／ｂ３とおくと，次式が得られる。
【０１６８】
【数５０】
0005486524.tif 000051
式（１０９），（１１０）より次式が得られる。
【０１６９】
【数５１】
0005486524.tif 000052
式（１０８），（１１２）より次式が得られる。
【０１７０】
【数５２】
0005486524.tif 000053
式（１１１），（１１３），（１１２）より
【０１７１】
【数５３】
0005486524.tif 000054
となり，ｘ２＋ｙ２＋ｚ２＝１を利用して式を整理し，右辺をｋ４とおくと，次式が得られる。
【０１７２】
【数５４】
0005486524.tif 000055
式（１１２），（１１４）より
【０１７３】
【数５５】
0005486524.tif 000056
となる。ｓｉｎτ＞０，ｋ２＞ｋ３なので，式（１１２）よりｘ＋ｃｏｓτ＞０である。よって，上式（１１５）より次式が得られる。
【０１７４】
【数５６】
0005486524.tif 000057
式（１１４），（１１６）より，次式が得られる。
【０１７５】
【数５７】
0005486524.tif 000058
ただし，ｌ４は次式のとおりである。
【０１７６】
【数５８】
0005486524.tif 000059
得られたｃｏｓτを使って，式（１１４）より，次式のようにｘが得られる。
【０１７７】
【数５９】
0005486524.tif 000060
得られたｘ，ｃｏｓτを使って，式（１１１），（１１３）より，次式のようにｙ，ｚが得られる。
【０１７８】
【数６０】
0005486524.tif 000061
以上により，隅円の円錐ＯＣｔ０が得られる。
【０１７９】
残りの３つの隅円Ｃｔ１，Ｃｔ２，Ｃｔ３についても，同様の方法で円錐パラメータを求めることができる。
【０１８０】
［式の導出方法Ｃ］補助円の円錐パラメータの導出
図１６のように，球面上の３つの円Ｃ２，Ｃ３，Ｃｔ０は互いに接しており，円Ｃ２，Ｃ３，の接点は極Ｐ＊，円Ｃ２，Ｃｔ０の接点はＰ０２，円Ｃ３，Ｃｔ０の接点はＰ０３である。３点Ｐ＊，Ｐ０２，Ｐ０３を通る円をＣｓ０とする。円錐ＯＣｓ０の軸方向単位ベクトルを未知ベクトルｗ≡（ｘ，ｙ，ｚ）とし，半頂角を未知数τとする。
【０１８１】
座標−ｕ２≡（−ａ２，−ｂ２，−ｃ２）の点をＯ２とする。同様に，座標−ｕ３，ｕｔ０の点をそれぞれＯ３，Ｏｔ０とする。Ｏ２，Ｏ３，Ｏｔ０は，それぞれ円Ｃ２，Ｃ３，Ｃｔ０の球面上での中心となる。
【０１８２】
図１７のように，球面３角形Ｏ２Ｏ３Ｏｔ０を作る。点Ｐ＊，Ｐ０２，Ｐ０３は，それぞれ辺Ｏ２Ｏ３，辺Ｏ２Ｏｔ０，辺Ｏ３Ｏｔ０の上にある。座標−ｗ≡（−ｘ，−ｙ，−ｚ）の点をＯｓ０とする。Ｏｓ０は，図のように球面上における円Ｃｓ０の中心となる。
【０１８３】
円Ｃｓ０は，３点Ｐ＊，Ｐ０２，Ｐ０３を通る円であるが，それと同時に球面３角形Ｏ２Ｏ３Ｏｔ０の内接円でもある。
【０１８４】
上述のように内接円であることは以下の点から明らかである。
・３辺相等により，△Ｏｓ０Ｐ＊Ｏ３≡△Ｏｓ０Ｐ０３Ｏ３，ゆえに∠Ｏｓ０Ｐ＊Ｏ３＝∠Ｏｓ０Ｐ０３Ｏ３である。同様に，∠Ｏｓ０Ｐ０３Ｏｔ０＝∠Ｏｓ０Ｐ０２Ｏｔ０，∠Ｏｓ０Ｐ０２Ｏ２＝∠Ｏｓ０Ｐ＊Ｏ２となる。
・また，∠Ｏｓ０Ｐ０３Ｏ３＝π−∠Ｏｓ０Ｐ０３Ｏｔ０，∠Ｏｓ０Ｐ０２Ｏｔ０＝π−∠Ｏｓ０Ｐ０２Ｏ２，∠Ｏｓ０Ｐ＊Ｏ２＝π−∠Ｏｓ０Ｐ＊Ｏ３である。
・∠Ｏｓ０Ｐ０３Ｏ３＝ρとして，これを以上の関係に当てはめると，ρ＝π−ρとなりρ＝π／２が得られる。したがって，Ｏｓ０Ｐ＊⊥Ｏ２Ｏ３，Ｏｓ０Ｐ０２⊥Ｏ２Ｏｔ０，Ｏｓ０Ｐ０３⊥Ｏ３Ｏｔ０である。
・よって，円Ｃｓ０は球面３角形Ｏ２Ｏ３Ｏｔ０に接する。
【０１８５】
したがって，円錐ＯＣｓ０は，平面ＯＯ２Ｏ３と平面ＯＯ２Ｏｔ０に接する。そのため，ベクトル−ｗと平面ＯＯ２Ｏ３がなす角は，ベクトル−ｗと平面ＯＯ２Ｏｔ０がなす角に等しい（ともにπ−τである）。
【０１８６】
平面ＯＯ２Ｏ３はｘｙ平面である。よって，ベクトル−ｗとｚ軸のなす角は，ベクトル−ｗと平面ＯＯ２Ｏｔ０の法線がなす角に等しい（ともにτ−π／２である）。これを式で表すと次のようになる。ただしｅｚ≡（０，０，１）である（本明細書において，ｅはベクトルを表す）。
【０１８７】
【数６１】
0005486524.tif 000062
平面ＯＯｓ０Ｐ＊は，点Ｐ＊≡（−１，０，０）を通り，平面ＯＯ２Ｏ３に垂直である。したがって，ベクトルｗ≡（ｘ，ｙ，ｚ）はｘｚ平面内にあるので
【０１８８】
【数６２】
0005486524.tif 000063
となり，ｗ＝（ｘ，０，ｚ）である。また，ｕ２＝（ａ２，ｂ２，０），ｕｔ０＝（ａｔ０，ｂｔ０，ｃｔ０）なので，式（１２２）は次のようになる。
【０１８９】
【数６３】
0005486524.tif 000064
一方，｜ｕ２×ｕｔ０｜は次のように表される。
【０１９０】
【数６４】
0005486524.tif 000065
さらに，ｋ２≡ａ２／ｂ２なので，式（１２４）は次のようになる。
【０１９１】
【数６５】
0005486524.tif 000066
また，ｓｉｎαｔ０＞０，ｋ２＞ｋ３なので，式（２１）より次式が得られる。
【０１９２】
【数６６】
0005486524.tif 000067
式（２１），（１２６）を式（１２５）に代入して整理すると，次式が得られる。この式をｌ０とする。
【０１９３】
【数６７】
0005486524.tif 000068
｜ｗ｜＝１からｘ２＋ｚ２＝１である。ｚ＜０なので，ｘ，ｚは次式のようになる。
【０１９４】
【数６８】
0005486524.tif 000069
円錐面Ｃｓ０はＰ＊を通るので，以下のようにしてｃｏｓτが得られる。ただしｅｘ≡（１，０，０）である。
【０１９５】
【数６９】
0005486524.tif 000070
残りの３つの補助円Ｃｓ１，Ｃｓ２，Ｃｓ３についても，同様の方法で円錐パラメータを求めることができる。
【０１９６】
［式の導出方法Ｄ］小判型形状の縦長・横長判定式の導出
小判型形状の形状を変化させて，横長から縦長へと切り替わる瞬間を考える。この状態では，円Ｃｔ０とＣｔ１が一致するので，ｕｔ０＝ｕｔ１かつαｔ０＝αｔ１である。
・ｕｔ０＝ｕｔ１であればｂｔ０＝ｂｔ１であり，式（１９），（２５）よりｌ４＝ｌ５となり，更に式（１７），（２３）よりｋ４＝ｋ５となる。
・逆に，ｋ４＝ｋ５であれば，式（１７），（２３）よりｌ４＝ｌ５となり，ｕｔ０＝ｕｔ１かつαｔ０＝αｔ１となる。
【０１９７】
よって，円Ｃｔ０とＣｔ１が一致することの必要十分条件はｋ４＝ｋ５である。これに式（１６），（２２）を代入し整理すると，次式が得られる。この式を判定式Ｄａとする。
【０１９８】
【数７０】
0005486524.tif 000071
式（１３）よりｋ０，ｋ１はそれぞれμ０，μ１に対して単調増加である。そのため，可動領域を横に広げると（μ０減少，またはμ１増加），Ｄａの値は減少する。
【０１９９】
同様に，式（１４）よりｋ２，ｋ３はそれぞれν０，ν１に対して単調減少である。そのため，可動領域を縦に広げると（ν０減少，またはν１増加），Ｄａの値は増加する。
【０２００】
したがって，Ｄａの値を使って，図２４に示すように，次のように小判型領域形状の縦長・横長を判定できる。
【０２０１】
Ｓ２４０１において，Ｄａ＜０が成り立てば，横長であると判断される（Ｓ２４０５）。
【０２０２】
Ｓ２４０３において，Ｄａ＞０が成り立てば，縦長であると判断される（Ｓ２４０７）。
【０２０３】
Ｓ２４０３において，「いいえ」であれば，連続した１つの円であると判断される（Ｓ２４０９）。
【０２０４】
［式の導出方法Ｅ］マトリクスとモノポーラ球面座標の関係式の導出
捻りが０の状態における子骨のｙ軸およびｚ軸の方向の単位ベクトルを，それぞれｖｙ，ｖｚとする。ｖｙ，ｖｚは，それぞれモノポーラグリッドの＋ν方向および−μ方向である。
子骨の向きを表す単位ベクトルをｖ≡（ｘ，ｙ，ｚ）とする。ｖの偏微分を次のようにｖμ，ｖνとする。
【０２０５】
【数７１】
0005486524.tif 000072
ｖｙ，ｖｚは，それぞれｖν，−ｖμを正規化したものなので，次式で表される。
【０２０６】
【数７２】
0005486524.tif 000073
ｖｙ，ｖｚを求めるにあたり，まず下記のようにＭ，Ｎの偏微分を計算しておく。
【０２０７】
【数７３】
0005486524.tif 000074
これらを利用してＴ≡２／（Ｍ２＋Ｎ２＋１）の偏微分を求めると，次のようになる。
【０２０８】
【数７４】
0005486524.tif 000075
これらを利用してｘ＝Ｔ−１，ｙ＝ＴＮ，ｚ＝−ＴＭの偏微分を求めると，それぞれ次のようになる。
【０２０９】
【数７５】
0005486524.tif 000076
Ｔ（Ｍ２＋Ｎ２＋１）＝２を利用して計算すると，次式が得られる。
【０２１０】
【数７６】
0005486524.tif 000077
同様に次式が得られる。
【０２１１】
【数７７】
0005486524.tif 000078
よって，ｖｙ，ｖｚは次式のようになる。
【０２１２】
【数７８】
0005486524.tif 000079
子骨の向きを表すマトリクスを次のようにＭとする。
【０２１３】
【数７９】
0005486524.tif 000080
曲げおよび捻りを表すマトリクスを，それぞれＭｂ，Ｍｔとする。マトリクスの要素の並びは，列ベクトルに対して左からマトリクスを掛ける方式とする。
【０２１４】
曲げマトリクスＭｂの要素は，式（３），（４），（５），（１５０），（１５１）より次のようになる。
【０２１５】
【数８０】
0005486524.tif 000081
捻りマトリクスＭｔの要素は次式のようになる。ただし，Ｓλ≡ｓｉｎλ，Ｃλ≡ｃｏｓλである。
【０２１６】
【数８１】
0005486524.tif 000082
［元曲げ方式の場合］
曲げの後に捻りを掛けるので，Ｍは次のようになる。この式を使えばλ，μ，νからＭを求めることができる。
【０２１７】
【数８２】
0005486524.tif 000083
逆にＭからλ，μ，νを求める手順は，以下のようになる。まずＴを求めると，
【０２１８】
【数８３】
0005486524.tif 000084
となるが，この式はｍ００≒−１の場合に桁落ちにより精度が悪くなる。そのような場合には，
【０２１９】
【数８４】
0005486524.tif 000085
を利用して
【０２２０】
【数８５】
0005486524.tif 000086
によりＴを求める。μ，νは次式により得られる。
【０２２１】
【数８６】
0005486524.tif 000087
次に，λを求めるに次式を利用する。
【０２２２】
【数８７】
0005486524.tif 000088
すると，
【０２２３】
【数８８】
0005486524.tif 000089
となり，次式が得られる。
【０２２４】
【数８９】
0005486524.tif 000090
よって，次式のようにλが得られる。
【０２２５】
【数９０】
0005486524.tif 000091
［元捻り方式の場合］
捻りの後に曲げを掛けるので，Ｍは次のようになる。この式を使えばλ，μ，νからＭを求めることができる。
【０２２６】
【数９１】
0005486524.tif 000092
Ｍからλ，μ，νを求める式は，元曲げ方式の場合と同様の方法により得られる。
【０２２７】
［本発明の実施例の処理および構成例］
図２５は，本願発明の実施例の装置構成を示す図である。コンピュータ２５００には，キーボード２５０５，マウス２５０６，ペン２５０８を含むタブレット２５０７，ディスプレイ２５０１が接続されている。ディスプレイ２５０１上には，キャンバス２５０２が表示され，キャンバス２５０２上に図形が描画されている（２５０３）。
【０２２８】
図２６は，本願発明の実施例のハードウエア構成を示す図である。ＣＰＵ２６０１にバス２６０７が接続されている。バス２６０７には，メモリ２６０２，種々の入力装置２６０３，ディスプレイ等の表示装置２６０４及びプリンタ２６０５が接続されている。
【０２２９】
図２７に本願発明の実施例を示す。図２７を参照すると，まず，モノポーラ球面座標系によって，子骨の角度範囲を構成する境界円を設定する（Ｓ２７０１）。具体的には，例えばμ，νの上下限，形状(矩形か小判型か)等を指定する。そして，子骨の角度が，角度範囲の中（すなわち内側）にあるか否かを判定する（Ｓ２７０３）。子骨の角度が角度範囲の外にあると判定された場合には，上述の最近点を求める手法を用いて，子骨の角度を修正する（Ｓ２７０５）。そして，骨格モデルを画面に表示する。なお，ロボット等の実空間の対象物の制御を行う場合は，所望の角度に子骨を向ける制御を行う（Ｓ２７０７）。
【０２３０】
図２８は，子骨の制御を行う制御装置の実施例を示す。まず，モノポーラ球面座標系によって，子骨の角度範囲を構成する境界円を設定する（２８０１）。そして，子骨の角度が，角度範囲の中（すなわち内側）にあるか否かを判定する（２８０３）。子骨の角度が角度範囲の外にあると判定された場合には，上述の最近点を求める手法を用いて，子骨の角度を修正する（２８０５）。そして，骨格モデルを画面に表示する（２８０７）。なお，ロボット等の実空間の対象物の制御を行う場合は，所望の角度に子骨を向ける制御を行う（２８０８）。また，各種の数値を設定するための入力手段（２８０６）を設けてもよい。
【０２３１】
本願明細書では，親骨に対する子骨の角度の制御を例示して，説明を行った。なお，本願発明は，３つ以上の骨が関節によって連結された骨格モデルに拡張して適用できることは言うまでもない。
【０２３２】
以上，本願発明について説明したが，本願発明の範囲は，本願明細書における上記実施例に限定されるものではない。当業者は，本願明細書の説明から，本願発明の変形態様を理解することができる。そして，これらの変形態様及びその均等物も，特許請求の範囲に係る技術的範囲に属することは言うまでもない。
【０２３３】
また，請求項に定義された各々のステップは，記載された順序通りに実行される必要はなく，矛盾の生じない範囲で，請求項に定義されたステップは，順番を変更して実行できる。そして，請求項のステップの順番を変更したものも，当該請求項の技術的範囲に包含されることは言うまでもない。
【符号の説明】
【０２３４】
Ｐ＊  モノポーラ球面座標系の極
ｖ    子骨の向きを表す単位ベクトル
Ｐｍ  最近点
【図１】
0005486524.tif 000093
【図５】
0005486524.tif 000094
【図６】
0005486524.tif 000095
【図７】
0005486524.tif 000096
【図８】
0005486524.tif 000097
【図９】
0005486524.tif 000098
【図１０】
0005486524.tif 000099
【図１１】
0005486524.tif 000100
【図１２】
0005486524.tif 000101
【図１３】
0005486524.tif 000102
【図１４】
0005486524.tif 000103
【図１５】
0005486524.tif 000104
【図１６】
0005486524.tif 000105
【図１７】
0005486524.tif 000106
【図１８】
0005486524.tif 000107
【図１９】
0005486524.tif 000108
【図２０】
0005486524.tif 000109
【図２１】
0005486524.tif 000110
【図２２】
0005486524.tif 000111
【図２３】
0005486524.tif 000112
【図２４】
0005486524.tif 000113
【図２５】
0005486524.tif 000114
【図２６】
0005486524.tif 000115
【図２７】
0005486524.tif 000116
【図２８】
0005486524.tif 000117
【図２９】
0005486524.tif 000118
【図２】
0005486524.tif 000119
【図３】
0005486524.tif 000120
【図４】
0005486524.tif 000121