"親骨と子骨とが関節によって連結された骨格モデルにおいて,前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための方法であって,前記関節を中心とする球の球面上に,前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定ステップであって,前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点1を通るものであり,前記子骨又は前記子骨の延長線と前記球面の交点2の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ,前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルu及び前記円錐の半頂角α,または,前記軸単位ベクトルu及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する,角度範囲境界円設定ステップと,前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルuと前記半頂角αとを得て,前記子骨の向きを表す単位ベクトルvを用いて,uv-cosαの値を検査値として算出し,前記検査値に基づいて,前記子骨の角度が前記角度範囲の中にあるか否かを判定する,角度範囲判定ステップと,を有する,方法。前記関節を原点とし,前記交点1から前記原点に向かう方向をx軸の正方向とする,三次元直交座標系x,y,zから,μ=2tan-1-z/x1ν=2tan-1y/x1の関係を有する,モノポーラ球面座標系μ,νを用いて,前記角度範囲境界円が,少なくともμ=μe及びν=νeのうち何れか一方を満たす,ここにおいて,μe及びνeは定数である,請求項1記載の方法。前記交点2の前記モノポーラ球面座標をμ,νとし,μの下限及び上限をそれぞれμ0,μ1とし,νの下限及び上限をそれぞれν0,ν1とした場合に,前記角度範囲が,μ0<μ<μ1及びν0<ν<ν1を満たすよう前記角度範囲境界円を設定する,請求項2記載の方法。前記角度範囲境界円が,前記交点1を通らない補助角度範囲境界円を更に用いる,請求項1乃至3のうちいずれか1項記載の方法。前記角度範囲判定ステップにおいて,前記子骨の角度が前記角度範囲の中に無いと判定された場合,前記交点2から前記角度範囲の中にあることを満たす球面上の点まで前記球面上に沿って測定した距離が最短となる前記球面上の点に,前記交点2を移動させることにより,前記子骨の角度を修正する,角度修正ステップ,を更に有する請求項1乃至4のうちいずれか1項記載の方法。請求項1乃至5のうちいずれか1項記載の方法をコンピュータに実行させるための命令を含む,プログラム。親骨と子骨とが関節によって連結された骨格モデルにおいて,前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための装置であって,前記関節を中心とする球の球面上に,前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定手段であって,前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点1を通るものであり,前記子骨又は前記子骨の延長線と前記球面の交点2の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ,前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルu及び前記円錐の半頂角α,または,前記軸単位ベクトルu及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する,角度範囲境界円設定手段と,前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルuと前記半頂角αとを得て,前記子骨の向きを表す単位ベクトルvを用いて,uv-cosαの値を検査値として算出し,前記検査値に基づいて,前記子骨の角度が前記角度範囲の中にあるか否かを判定する,角度範囲判定手段と,を有する,装置。例示として,図1aの骨格モデルを用いた場合を想定する。この骨格モデルは,人間の骨格をモデル化したものである。したがって,例えば,肘から先の腕の可動範囲には,一定の制限がある。この制限を超えた角度曲げ,捻りに腕を曲げるポーズを取らせることは,現実の人間に対するモデルからかけ離れたものになる。人間として自然なポーズを取る骨格モデルを形成するためには,たとえば肘の関節から先の骨の可動範囲に対して,一定の制限を課すことが必要となる。従来では,特許文献1に開示されるように,たとえば親骨に対する子骨の向きを親骨の座標系を基準とした3軸x,y,zの各軸回りの回転角度で表現するものがある。特許文献2には,関節を中心点とする球面上の所与の点を焦点とし,関節に対応する中心点と焦点とを結ぶ軸に直交する平面を射影面とし,関節の可動範囲を,射影面上において設定する技術が開示されている。特許文献3及び特許文献4には,子骨の向きが,予め定められた可動範囲内に収まっていない場合には,可動範囲の形状に応じた条件を満たすように,前記親骨に対する前記子骨の向きを補正する発明が開示されている。上述のような従来の骨格の制御方法では,設計者の意図とはかけ離れた可動範囲となってしまうという問題が指摘されていた。また,この問題をある程度解決する手法として,特許文献2,特許文献3及び特許文献4に開示された技術が提案されている。しかしながら,これらの技術においては,必要な計算量は比較的少ないものの,多関節のモデルをリアルタイムに動かす等の場合には,計算量の更なる軽減が求められる。したがって,より多様な骨格モデルに柔軟に対応でき,より簡便な処理で,骨格モデルを制御する手法の実現が望まれている。本発明は,上述のような,従来技術の欠点を解決することを目的としている。なお,ここで取り上げた課題及び本願発明の目的は,例示的なものである。したがって,本願発明の目的が,上述の記載に限定されるものではない点に留意すべきである。本願明細書では,便宜上,実施例として仮想空間上に形成され得る骨格モデルの制御を取り上げて説明を行う。しかしながら,本発明の適用範囲は,仮想空間に限られるものではない。たとえば,ロボットの制御等の物理的構造物の位置や角度曲げ,捻り等を含むの制御に利用することも当然に意図されている。すなわち,本発明は,仮想空間及び実空間の双方の骨格モデルを対象とするものであることに特に留意すべきである。また,本発明は,本願明細書で取り扱う特定の骨格モデルに限定されるものでもない。本願発明は,親骨と子骨とが関節によって連結された骨格モデルにおいて,前記親骨に対する前記子骨の前記関節における角度範囲を制限することによって前記子骨の動作を制御するための方法であって,前記関節を中心とする球の球面上に,前記子骨の角度範囲の境界を定義する角度範囲境界円を設定する角度範囲境界円設定ステップであって,前記角度範囲境界円は前記関節を中心とする球面と親骨または親骨の延長線との交点1を通るものであり,前記子骨又は前記子骨の延長線と前記球面の交点2の位置が前記角度範囲境界円によって二分される前記球面の何れに存在すべきかによって前記子骨の角度範囲が定められ,前記球の中心と前記角度範囲境界円とで形成される円錐の軸単位ベクトルu及び前記円錐の半頂角α,または,前記軸単位ベクトルu及び前記半頂角αを導くことができる数値をメモリに格納することによって前記角度範囲境界円を設定する,角度範囲境界円設定ステップと,前記メモリに格納された数値を読み出すことによって前記軸単位ベクトルuと前記半頂角αとを得て,前記子骨の向きを表す単位ベクトルvを用いて,uv-cosαの値を検査値として算出し,前記検査値に基づいて,前記子骨の角度が前記角度範囲の中にあるか否かを判定する,角度範囲判定ステップと,を有する,方法を提供する。なお,上記の式vuの演算は,ベクトルvとベクトルuの内積を意味する。また,本願発明は,更に前記関節を原点とし,前記交点1から前記原点に向かう方向をx軸の正方向とする,三次元直交座標系x,y,zから,μ=2tan-1-z/x1ν=2tan-1y/x1の関係を有する,モノポーラ球面座標系μ,νを用いて,前記角度範囲境界円が,少なくともμ=μe及びν=νeのうち何れか一方を満たすここにおいて,μe及びνeは定数ようにしてもよい。本願発明は,更に,前記交点2の前記モノポーラ球面座標をμ,νとし,μの下限及び上限をそれぞれμ0,μ1とし,νの下限及び上限をそれぞれν0,ν1とした場合に,前記角度範囲が,μ0<μ<μ1及びν0<ν<ν1を満たすよう前記角度範囲境界円を設定してもよい。本願発明は,更に,前記角度範囲境界円が,前記交点1を通らない補助角度範囲境界円を更に用いるようにしてもよい。すなわち,この補助角度範囲境界円を角度範囲判定ステップで用いてもよい。本願発明は,前記角度範囲判定ステップにおいて,前記子骨の角度が前記角度範囲の中に無いと判定された場合,前記交点2から前記角度範囲の中にあることを満たす球面上の点まで前記球面上に沿って測定した距離が最短となる前記球面上の点に,前記交点2を移動させことにより,前記子骨の角度を修正する,角度修正ステップ,を更に有してもよい。また,本願発明は,上記方法を実行する命令を有するプログラムとして実現されてもよい。あるいは,本願発明は,上記方法を実現する手段を有する装置として実現されてもよい。本願発明により,骨格の角度を簡便な手法で制御することができる。なお,本願発明の効果は,この点に限定されるものではない。[1.モノポーラ球面座標]上述のように,スケルトンモデル図1aの骨の向きを表すために,各骨に対して図1bのように座標系を定める。関節を中心とする単位球面半径1の球面を作り,子骨のx軸x>0の部分と球面との交点をPとすると,関節の曲げ状態は,球面上の点Pの位置で表すことができる。関節の回転曲げ,捻りを表現する方法の一つに,3軸の回転角オイラー角を使う方法がある。例として,親骨の座標系を基準にx軸回転,z軸回転,y軸回転の順に回転を掛けた場合,各軸の回転角と点Pの位置との関係に注目すると,y軸回転角が経度に,z軸回転角が緯度に相当する。そこで,y軸回転角,z軸回転角を等間隔にとって球面上にグリッドを作ると,地球儀の経線緯線と同様の形状になる。北極と南極に相当する2点が角度表現上の特異点となるため,扱いにくいという問題がある。これに対して,特異点を1個に減らす手法として,射影を用いる方法特許文献2,特許文献3,特許文献4が知られている。この手法の特性を球面上のグリッドで表すと図2のようになる。このグリッドは,球面上に作られた座標系と捉えることができる。極特異点が1個であることから,本願明細書では,この座標系をモノポーラ球面座標と呼ぶことにする。以下,このモノポーラ球面座標に関して,次の項目について述べる。射影を使わずに球面上にモノポーラ球面座標系を構成する手法モノポーラ球面座標を使って関節の角度制限を行なう手法[2.モノポーラ球面座標系の構成]一般に2次元の座標系に目盛りをつけるとグリッド格子となる。以下の説明では,便宜上グリッドという用語を用いる場合があるが,その表すものは,単なる格子ではなく座標系の意味を含むものとする。座標-1,0,0の点をPとし,極と呼ぶことにする。極Pを通りy軸に平行な直線をlyとし,図3のように,lyを含む等角度間隔の平面群を用意する。この平面群と単位球面との交線をグリッドの縦線とする。同様に,極Pを通りz軸に平行な直線をlzとし,図4のように,lzを含む等角度間隔の平面群を用意する。この平面群と単位球面との交線をグリッドの横線とする。図5のように,直線lyを含む平面の向きを角度φで表し,直線lzを含む平面の向きを角度θで表す。φ,θの符号は,図中に示す方向を正とする。球面上の点Pの位置は,φによって決まる平面,θによって決まる平面,および単位球面の3つの面の交点として決まる。μ≡2φ,ν≡2θとし,μ,νを使って球面上の位置を表す。φ,θをそのまま使わずにμ,νを使うことにより,次のようなメリットがある。図6のように,点Pがxz平面上にある即ちν=0である場合を考える。子骨の向きはOPである。座標1,0,0の点をQとする。∠OPP=∠OPP=φ∠OPP∠OPP=∠QOP∴∠QOP=2φ=μしたがって,ν=0の場合には,μは子骨のy軸回りの回転角となる。同様に,図7のように,点Pがxy平面上にある即ちμ=0である場合には,νは子骨のz軸回りの回転角となる。このように,μ,νを使うと回転の状態子骨の向きを感覚的に把握しやすい。例えば図2は,μ,νの値を10°間隔にとって作ったグリッドであるが,xy平面上およびxz平面上ではグリッドが円周上で10°ずつの等間隔になっていることが分かる。[3.モノポーラ球面座標と子骨の向き]子骨の向きを表す単位ベクトルをv≡x,y,zとし,これをモノポーラ球面座標で表したものをμ,νとする。両者の関係は次式で表される本明細書においてvはベクトルを表す。ただし,M,N,Tは次のとおりである。式の導出方法については,後述する[式の導出方法A]を参照。以下,具体的な角度曲げ,捻りの制御について詳細に述べる。[4.可動領域の設定][4.1矩形領域による角度制限]μ,νの値に上限,下限を設定することで,図8のように可動領域を設定できる。このような可動領域制限を矩形制限と呼ぶことにする。μの上下限値をそれぞれμ1,μ0とし,νの上下限値をそれぞれν1,ν0とする。式μ=μ0は単位球面上で1つの円を表す。この円をC0とする。円C0によって球の表面は2つの領域に分けられるが,このうち可動領域側μ>=μ0の領域を,円C0の内側と呼ぶことにする。球面上の円に対する内外判定の際に,後述のように円錐を使って判定を行なう。そこで,以下のように円錐パラメータを求めておく。円C0と球の中心Oとを結んで作られる円錐をOC0とし,円錐OC0の軸方向の単位ベクトルをu0≡a0,b0,c0とする本明細書においてuはベクトルを表す。u0の方向は可動領域側とする。また,円錐OC0の半頂角軸u0と円錐面のなす角をα0とする。これらの値は次式により得られる。同様に,式μ=μ1,ν=ν0,ν=ν1が表す円を,それぞれC1,C2,C3とする。円錐OC1,OC2,OC3の中心軸をそれぞれu1≡a1,b1,c1,u2≡a2,b2,c2,u3≡a3,b3,c3とし,半頂角をそれぞれα1,α2,α3とする。これらの値は次式により得られる。値の範囲が-π<μ0<μ1<π,-π<ν0<ν1<πなので,次式が成り立つ。なお,今後扱う他の可動領域についても,球面上の円は可動領域側を内側とし,円錐の軸ベクトルの向きは可動領域側とする。[4.2小判型領域による角度制限]矩形制限を用いて骨格モデルを動かすと,可動領域の角部に引っ掛かり,滑らかでない動きになることがある。この挙動を改善するために,以下のように小判型の可動領域を設定する。[4.2.1隅円の作成]図9,図10のように,矩形領域の3辺に接する隅円を作り,角部を取り除く。元の矩形領域の形状によって,図9のようにC2,C3の一部が残る場合と,図10のようにC0,C1の一部が残る場合とがある。前者の形状を横長,後者の形状を縦長と呼ぶことにする。横長形状の場合,図9のように,μ0側の隅円C0,C2,C3に接する円をCt0とし,μ1側の隅円C1,C2,C3に接する円をCt1とする。縦長形状の場合,図10のように,ν0側の隅円C0,C1,C2に接する円をCt2とし,ν1側の隅円C0,C1,C3に接する円をCt3とする。[4.2.2隅円の円錐パラメータ]隅円の円錐パラメータは,以下の計算によって得られる。まず,次のようにk0,k1,k2,k3を定義する。-π<μ0<μ1<π,-π<ν0<ν1<πなので,k0<k1,k2>k3である。次式により領域形状の縦長横長を決定する。Da<0ならば横長,Da>0ならば縦長である。Da=0の場合には,2つの隅円は連続した1つの円となる。隅円の円錐パラメータは,以下の手順によって求められる。[Da<=0の場合横長または円形状]円錐OCt0の軸方向の単位ベクトルをut0≡at0,bt0,ct0とし,半頂角をαt0とする。これらの値は,以下の計算によって得られる。円錐OCt1の軸単位ベクトルut1≡at1,bt1,ct1および半頂角αt1は,以下の計算によって得られる。[Da>0の場合縦長形状]円錐OCt2の軸単位ベクトルut2≡at2,bt2,ct2および半頂角αt2は,以下の計算によって得られる。円錐OCt3の軸単位ベクトルut3≡at3,bt3,ct3および半頂角αt3は,以下の計算によって得られる。以上の円錐パラメータ計算式の導出方法については,後述する式の導出方法Bを参照。また,判定式Daの導出方法については,後述する[式の導出方法D]を参照。[5.可動領域に対する内外判定]5.1円錐を使った内外判定矩形制限,小判型制限のいずれも,可動領域の形状は複数の円を組み合わせたものになっている。そのため,可動領域に対する内外判定は,円領域に対する内外判定の組み合わせとなる。円領域に対する内外判定は,以下のように円錐を使って実現できる。子骨の向きx軸の向きを表す単位ベクトルをv≡x,y,zとする。球面上の円Cが与えられ,円錐OCの軸単位ベクトルがu≡a,b,cで,半頂角がαであるとする。ベクトルvの円錐OCに対する内外判定は,以下のように実現できる。vとuのなす角がα以下であることが,vが円錐OCの内側にあることの必要十分条件である。この条件を式で表すと,次のようになる。角度範囲[0,π]においてcosは単調減少なので,次式のように変形できる。判定式Dを次のように定義すると,Dの正負によって円錐OCに対する内外を判定できる。D>=0であれば円錐内,そうでなければ円錐外である。この判定式は,平面を使った判定と見ることもできる。法線ベクトルがa,b,cで原点からの距離がcosαの平面を,平面κとする。判定式Dの値は,点x,y,zの平面κからの符号付きの距離u方向が正を意味する。したがって,Dの正負による判定は,点x,y,zが平面κの表裏どちら側にあるかを判定していることになる。判定式Dの平面式としての解釈は,次のように理解できる。一般に,球面上の円は,球とその円を含む平面との交線として捉えられる。そのため,球面上の円領域に対する内外判定は,平面による判定を使って実現できる。式D=0が表す平面は,円Cを含む平面になっている。[5.2矩形領域の内外判定]図11のように,子骨の向きvが円C0,C1,C2,C3全てに対して内側にある場合のみ,矩形領域内となる。図18に示すように,以下の手順によって,領域に対する内外判定を行なう。S1801において,円C0による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1811。この判定がはいであれば,S103に次に進む。S1803において,円C1による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1811。この判定がはいであれば,S105に次に進む。S1805において,円C2による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1811。この判定がはいであれば,S107に次に進む。S1807において,円C3による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1811。この判定がはいであれば,領域内と判定されるS1809。[5.3小判型領域の内外判定][5.3.1補助円の作成]小判型領域の内外判定には,領域形状を構成する円C0~C3,Ct0,~Ct3だけでなく,以下に述べる補助円を使う。[横長形状の場合]領域形状が横長の場合,図12のように補助円を作る。円Ct0とC2の接点をP02とし,円Ct0とC3の接点をP03とする。点P,P02,P03の3点を通る円を,補助円Cs0とする。円Cs0の内側は,小判型領域の中央の側とする。円錐OCs0の軸単位ベクトルをas0,bs0,cs0とし,半頂角をαs0とする。これらの値は,以下の計算によって得られる。同様に,円Ct1とC2の接点をP12とし,円Ct1とC3の接点をP13とする。点P,P12,P13の3点を通る補助円をCs1とする。円錐OCs1の軸単位ベクトルas1,bs1,cs1と半頂角αs1は,以下の計算によって得られる。[縦長形状の場合]領域形状が縦長の場合は,図13のように補助円を作る。円Ct2とC0の接点をP20とし,円Ct2とC1の接点をP21とする。点P,P20,P21の3点を通る補助円をCs2とする。円錐OCs2の軸単位ベクトルas2,bs2,cs2と半頂角αs2は,以下の計算によって得られる。円Ct3とC0の接点をP30とし,円Ct3とC1の接点をP31とする。点P,P30,P31の3点を通る補助円をCs3とする。円錐OCs3の軸単位ベクトルas3,bs3,cs3と半頂角αs3は,以下の計算によって得られる。以上の円錐パラメータ計算式の導出方法については,後述する[式の導出方法C]を参照。[5.3.2補助円を使った内外判定][横長形状の場合]横長の小判型領域の内外判定には,Ct0,Ct1,C2,C3,Cs0,Cs1の6つの円を使う。図19に示すように以下の手順によって,領域に対する内外判定を行なう。S1901において,円C2による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1913。この判定がはいであれば,S1903に次に進む。S1903において,円C3による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS1913。この判定がはいであれば,S1905に次に進む。S1905において,円Cs0,Cs1による内外判定で,ともに内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS1911。この判定がいいえであれば,S1907に進む。S1907において,円Ct0による内外判定で,内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS1911。この判定がいいえであれば,S1909に進む。S1909において,円Ct1による内外判定で,内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS1911。この判定がいいえであれば,領域外と判定するS1913。[縦長形状の場合]縦長の小判型領域の内外判定には,Ct2,Ct3,C0,C1,Cs2,Cs3の6つの円を使う。図20に示すように以下の手順によって,領域に対する内外判定を行なう。S2001において,円C0による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS2013。この判定がはいであれば,S2003に次に進む。S2003において,円C1による内外判定で,内側か否かの判定を行う。この判定がいいえであれば,領域外と判定されるS2013。この判定がはいであれば,S2005に次に進む。S2005において,円Cs2,Cs3による内外判定で,ともに内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS2011。この判定がいいえであれば,S2007に進む。S2007において,円Ct2による内外判定で,内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS2011。この判定がいいえであれば,S2009に進む。S2009において,円Ct3による内外判定で,内側か否かの判定を行う。この判定がはいであれば,領域内と判定するS2011。この判定がいいえであれば,領域外と判定するS2013。[6.捻り角][6.1曲げと捻りの順序]子骨の捻り角をλとし,捻りを含めたモノポーラ球面座標をλ,μ,νで表す。曲げと捻りの順序は,次の2とおりが考えられる。曲げた後に,子骨のx軸回りに捻る。x軸回りに捻り,その後に曲げる。前者を元曲げ,後者を元捻りと呼ぶことにする。[6.2捻り角の定義]捻り角を扱うには,捻り角λ=0の状態を定義する必要がある。まず,元曲げ方式について説明する。関節の曲げ状態は,球面上の点P子骨のx軸と単位球面との交点の位置で表すことができる。これに対して捻りは,軸OP回りの回転として表される。子骨のy軸,z軸がグリッドの向きそれぞれν方向,-μ方向と合っている状態を,捻り角が0であると定義する。元捻り方式の場合は,捻りによってグリッド自体がx軸親骨のx軸回りにλだけ回転する。捻りの後に曲げを掛けても,子骨のy軸,z軸は,回転後のグリッドの向きそれぞれν方向,-μ方向と常に一致するものとする。[6.3マトリクスとモノポーラ球面座標の関係]子骨の向きを表すマトリクスを,次式のようにMとする。マトリクスの要素の並びは,列ベクトルに対して左からマトリクスを掛ける方式とする本明細書でMはマトリクスを表す。マトリクスMb,Mtを次のように定義する。ただし,M,N,Tは式6,7のとおりとする。Mbは曲げ,Mtは捻りを表すりマトリクスである。曲げだけを作用させたときの,子骨の向きを表す単位ベクトルを,vb≡xb,yb,zbとする。vbはMbの第1列最も左の列になるので,次式のようになる。vbからT,M,Nを求める式は次のようになる。x≒-1の場合に別の式を使うのは,桁落ちによる精度の低下を避けるためである。[6.3.1元曲げ方式]Mからλ,μ,νを求める手順は,以下のようになる。m00≒-1の場合に別の式を使うのは,桁落ちによる精度の低下を避けるためである。逆に,λ,μ,νからMを求めるには,式64,65を使ってMb,Mtを求め,これを次式に代入する。Mからλ,vbを求めるには,式70および次式を使う。逆に,λ,vbからMを求めるには,式67,68,69を使ってT,M,Nを求め,これを式64に代入し,式65,74を使う。[6.3.2元捻り方式]Mからλ,μ,νを求める手順は,以下のようになる。逆に,λ,μ,νからMを求めるには,式64,65を使ってMb,Mtを求め,これを次式に代入する。Mからλ,vbを求めるには,式76および次式を使う。逆に,λ,vbからMを求めるには,式67,68,69を使ってT,M,Nを求め,これを式64に代入し,式65,80を使う。計算式の導出方法については,後述する[式の導出方法E]を参照。[6.4四元数とモノポーラ球面座標の関係]子骨の向きを表す四元数クォータニオンを,次式のようにqとする。四元数qb,qtを次のように定義する。qbは曲げ,qtは捻りを表す四元数である。[6.4.1元曲げ方式]qからλ,μ,νを求める式は,以下のようになる。逆に,λ,μ,νからqを求めるには,式83,84を使ってqb,qtを求め,これを次式に代入する。qからλ,vbを求めるには,式85および次式を使う。逆に,λ,vbからqを求めるには,式67,68,69を使ってT,M,Nを求め,これを式83に代入し,式84,88を使う。[6.4.2元捻り方式]qからλ,μ,νを求める式は,以下のようになる。逆に,λ,μ,νからqを求めるには,式83,84を使ってqb,qtを求め,これを次式に代入する。qからλ,vbを求めるには,式85および次式を使う。逆に,λ,vbからqを求めるには,式67,68,69を使ってT,M,Nを求め,これを式83に代入し,式84,93を使う。[7.可動領域外の場合の修正方法]関節の曲げが可動領域外となった場合に,これを可動領域内に修正する方法について説明する。関節の曲げ状態は,単位球面上の点Pの位置で表される。Pの位置を可動領域内境界を含むに修正した点をPmとする。球面上の領域Aと,領域A外の球面上の点Pとが与えられたとき,領域境界上の点のうち,Pからの距離球面上での距離が最小となる点を,領域Aに対するPの最近点と呼ぶことにする。可動領域と点Pのみが与えられた場合,可動領域に対するPの最近点をPmとするのが最良であると考えられる。そこで,最近点を用いた修正方法について述べる。[7.1円領域に対する最近点]矩形制限,小判型制限のいずれも,可動領域の形状は複数の円を組み合わせたものになっている。そのため,可動領域に対する最近点を得るには,円領域に対する最近点を求める必要がある。図14のように,子骨の向きx軸の向きを表す単位ベクトルをv≡x,y,zとし,点Pの座標をx,y,zとする。球面上の円Cが与えられ,円錐OCの軸単位ベクトルがu≡a,b,cで,半頂角がαであるとする。円領域Cに対するPの最近点をPnとし,ベクトルOPnをwとする。wは次式により求められる。ただしβはvとuのなす角で,0<β<=πである。sinβ>=0なので,sinβ,tanβは次式により得られる。sinβ=0となるのはv=-uのときで,その場合は円C上の全ての点が最近点となる。[7.2円領域までの距離]単位球面上において,点Pが円領域Cの外にあるとする。Pから円Cまでの距離単位球面上での距離をγとする。前述7.1節の記号を使うと,γ=∠POPn=β-αなので,次式のようになる。0<γ<πなので,cosγはγに対して単調減少である。したがって,円領域に対する距離の大小判定には,γの替わりにcosγを使うことができるただし大小関係は逆になる。[7.3矩形領域に対する最近点]矩形領域に対する点Pの最近点Pmは,図21に示すように,以下の手順によって得られる。Pは矩形領域の外にあるものとする。また,図15のように,矩形領域の角の4頂点を,それぞれPa,Pb,Pc,Pdとする。S2101において,円C0によるPの内外判定で,内側か否かの判定を行う。判定がはいであればS2107に進む。判定がいいえであれば,S2103に進む。S2103において,円C0に対するPの最近点を求め,PnとしS2105に進む。S2105において,円C2,C3によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2127,終了する。判定がいいえであれば,S2113に進む。S2107において,円C1によるPの内外判定で,内側か否かの判定を行う。判定がはいであれば,S2113に進む。判定がいいえであれば,S2109に進む。S2109において,円C1に対するPの最近点を求め,PnとしS2111に進む。S2111において,円C2,C3によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2127終了する。判定がいいえであれば,S3113に進む。S2113において,円C2によるPの内外判定で,内側か否かの判定を行う。判定がはいであれば,S2119に進む。判定がいいえであればS2115に進む。S2115において,円C2に対するPの最近点を求め,PnとしS2117に進む。S2117において,円C0,C1によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2127終了する。判定がいいえであればS2125に進む。S2119において,Pが円C3の外であることが確定する。S2121に進む。S2121において,円C3に対するPの最近点を求め,PnとしS2123に進む。S2123において,円C0,C1によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2127終了する。判定がいいえであれば,S2125に進む。S2125において,Pa,Pb,Pc,Pdの4点のうちPから最も近い球面上での距離が最小のものをPmとし,終了する。[7.4小判型領域に対する最近点][横長形状の場合]横長の小判型領域に対する点Pの最近点Pmは,図22に示すように,以下の手順によって得られる。Pは小判型領域の外にあるものとする。S2201において,円C2によるPの内外判定で,内側か否かの判定を行う。判定がはいであれば,S2207に進む。判定がいいえであればS2203に進む。S2203において,円C2に対するPの最近点を求めPnとしS2205に進む。S2205において,円Cs0,Cs1によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2215として終了する。判定がいいえであればS2213に進む。S2207において,円C3によるPの内外判定で,内側か否かの判定を行う。判定がはいであればS2213に進む。判定がいいえであればS2209に進む。S2209において,円C3に対するPの最近点を求めPnとしS2211に進む。S2211において,円Cs0,Cs1によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2215終了する。判定がいいえであればS2213に進む。S2213において,円Ct0,Ct1のうち,Pからの距離が小さい方に対するPの最近点をPmとし,終了する。[縦長形状の場合]縦長の小判型領域に対する点Pの最近点は,図23に示すように,以下の手順によって得られる。Pは小判型領域の外にあるものとする。S2301において,円C0によるPの内外判定で,内側か否かの判定を行う。判定がはいであればS2307に進む。判定がいいえであればS2303に進む。S2303において,円C0に対するPの最近点を求めPnとし,S2205に進む。S2305において,円Cs2,Cs3によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであればPnをPmとしてS2315終了する。判定がいいえであれば,S2313に進む。S2307において,円C1によるPの内外判定で,内側か否かの判定を行う。判定がはいであれば,S2313に進む。判定がいいえであればS2309に進む。S2309において,円C1に対するPの最近点を求めPnとする。S2311において,円Cs2,Cs3によるPnの内外判定で,ともに内側であるか否かの判定を行う。判定がはいであれば,PnをPmとしてS2315終了する。判定がいいえであればS2313に進む。S2313において,円Ct2,Ct3のうち,Pからの距離が小さい方に対するPの最近点をPmとし,終了する。[7.5曲げと捻りの修正方法]関節の回転曲げ捻りの状態がマトリクスまたは四元数で与えられ,これを角度制限範囲内に修正する手順は,図29に示すように以下のようになる。S2901で,マトリクスまたは四元数からλ,vbを求める6.3節,6.4節参照。S2903で,vbが可動領域内かどうかを調べる5.2節,5.3節参照。可動領域外であればvbを修正する7.3節,7.4節参照S2905。S2907で,λに上下限が設定されていれば,この範囲内にあるかどうかを調べる。この範囲外であればλが上下限の範囲内になるようλを修正するS2909。S2911で,λ,vbからマトリクスまたは四元数を求める6.3節,6.4節参照。[式の導出方法A]方向ベクトルとモノポーラ球面座標との関係式の導出子骨の向きを表す単位ベクトルをx,y,zとし,これをモノポーラ球面座標で表したものをμ,νとする。モノポーラ球面座標系の構成方法より,座標x,y,zの点は,次の2平面上にある。式100は,xy平面を直線ly回りに角度μ/2だけ回転させた平面で,式101は,xz平面を直線lz回りに角度ν/2だけ回転させた平面である。μ,νの取り得る値の範囲は,-π<μ<π,-π<ν<πである。また,x,y,zは単位ベクトルなので,である。以上の3つの式を連立させて解く。cosν/2≠0なので,式101より次式が得られる。ただし,N≡tanν/2である。anμ/2である。式103,104を式102に代入すると,xの2次方程式が得られる。これを解いて,解のうちx=-1でないほうを選ぶと,次式のようにxが得られる。ただし,T≡2/M2N21である。これを式103,104に代入すると,次式のようにy,zが得られる。[式の導出方法B]小判型領域隅円の円錐パラメータの導出円C0,C2,C3に接する円Ct0を求める。円錐OCt0の軸方向単位ベクトルを未知ベクトルw≡x,y,zとし,半頂角を未知数τとする本明細書において,wはベクトルを表す。円錐OC0の軸単位ベクトルはu0≡a0,b0,c0,半頂角はα0である。円Ct0は円C0の内側可動領域側に接するので,u0とwのなす角はα0-τとなる。したがって,となる。cosα0=-a0,sinα0=-c0,b0=0を代入するととなり,k0≡a0/c0とおくと,次式が得られる。同様に,円錐OC2とOCt0に対してcosα2=-a2,sinα2=b2,c2=0を利用し,k2≡a2/b2とおくと,次式が得られる。同様に,円錐OC3とOCt0に対してcosα3=-a3,sinα3=-b3,c3=0を利用し,k3≡a3/b3とおくと,次式が得られる。式109,110より次式が得られる。式108,112より次式が得られる。式111,113,112よりとなり,x2y2z2=1を利用して式を整理し,右辺をk4とおくと,次式が得られる。式112,114よりとなる。sinτ>0,k2>k3なので,式112よりxcosτ>0である。よって,上式115より次式が得られる。式114,116より,次式が得られる。ただし,l4は次式のとおりである。得られたcosτを使って,式114より,次式のようにxが得られる。得られたx,cosτを使って,式111,113より,次式のようにy,zが得られる。以上により,隅円の円錐OCt0が得られる。残りの3つの隅円Ct1,Ct2,Ct3についても,同様の方法で円錐パラメータを求めることができる。[式の導出方法C]補助円の円錐パラメータの導出図16のように,球面上の3つの円C2,C3,Ct0は互いに接しており,円C2,C3,の接点は極P,円C2,Ct0の接点はP02,円C3,Ct0の接点はP03である。3点P,P02,P03を通る円をCs0とする。円錐OCs0の軸方向単位ベクトルを未知ベクトルw≡x,y,zとし,半頂角を未知数τとする。座標-u2≡-a2,-b2,-c2の点をO2とする。同様に,座標-u3,ut0の点をそれぞれO3,Ot0とする。O2,O3,Ot0は,それぞれ円C2,C3,Ct0の球面上での中心となる。図17のように,球面3角形O2O3Ot0を作る。点P,P02,P03は,それぞれ辺O2O3,辺O2Ot0,辺O3Ot0の上にある。座標-w≡-x,-y,-zの点をOs0とする。Os0は,図のように球面上における円Cs0の中心となる。円Cs0は,3点P,P02,P03を通る円であるが,それと同時に球面3角形O2O3Ot0の内接円でもある。上述のように内接円であることは以下の点から明らかである。3辺相等により,△Os0PO3≡△Os0P03O3,ゆえに∠Os0PO3=∠Os0P03O3である。同様に,∠Os0P03Ot0=∠Os0P02Ot0,∠Os0P02O2=∠Os0PO2となる。また,∠Os0P03O3=π-∠Os0P03Ot0,∠Os0P02Ot0=π-∠Os0P02O2,∠Os0PO2=π-∠Os0PO3である。∠Os0P03O3=ρとして,これを以上の関係に当てはめると,ρ=π-ρとなりρ=π/2が得られる。したがって,Os0P⊥O2O3,Os0P02⊥O2Ot0,Os0P03⊥O3Ot0である。よって,円Cs0は球面3角形O2O3Ot0に接する。したがって,円錐OCs0は,平面OO2O3と平面OO2Ot0に接する。そのため,ベクトル-wと平面OO2O3がなす角は,ベクトル-wと平面OO2Ot0がなす角に等しいともにπ-τである。平面OO2O3はxy平面である。よって,ベクトル-wとz軸のなす角は,ベクトル-wと平面OO2Ot0の法線がなす角に等しいともにτ-π/2である。これを式で表すと次のようになる。ただしez≡0,0,1である本明細書において,eはベクトルを表す。平面OOs0Pは,点P≡-1,0,0を通り,平面OO2O3に垂直である。したがって,ベクトルw≡x,y,zはxz平面内にあるのでとなり,w=x,0,zである。また,u2=a2,b2,0,ut0=at0,bt0,ct0なので,式122は次のようになる。一方,|u2×ut0|は次のように表される。さらに,k2≡a2/b2なので,式124は次のようになる。また,sinαt0>0,k2>k3なので,式21より次式が得られる。式21,126を式125に代入して整理すると,次式が得られる。この式をl0とする。|w|=1からx2z2=1である。z<0なので,x,zは次式のようになる。円錐面Cs0はPを通るので,以下のようにしてcosτが得られる。ただしex≡1,0,0である。残りの3つの補助円Cs1,Cs2,Cs3についても,同様の方法で円錐パラメータを求めることができる。[式の導出方法D]小判型形状の縦長横長判定式の導出小判型形状の形状を変化させて,横長から縦長へと切り替わる瞬間を考える。この状態では,円Ct0とCt1が一致するので,ut0=ut1かつαt0=αt1である。ut0=ut1であればbt0=bt1であり,式19,25よりl4=l5となり,更に式17,23よりk4=k5となる。逆に,k4=k5であれば,式17,23よりl4=l5となり,ut0=ut1かつαt0=αt1となる。よって,円Ct0とCt1が一致することの必要十分条件はk4=k5である。これに式16,22を代入し整理すると,次式が得られる。この式を判定式Daとする。式13よりk0,k1はそれぞれμ0,μ1に対して単調増加である。そのため,可動領域を横に広げるとμ0減少,またはμ1増加,Daの値は減少する。同様に,式14よりk2,k3はそれぞれν0,ν1に対して単調減少である。そのため,可動領域を縦に広げるとν0減少,またはν1増加,Daの値は増加する。したがって,Daの値を使って,図24に示すように,次のように小判型領域形状の縦長横長を判定できる。S2401において,Da<0が成り立てば,横長であると判断されるS2405。S2403において,Da>0が成り立てば,縦長であると判断されるS2407。S2403において,いいえであれば,連続した1つの円であると判断されるS2409。[式の導出方法E]マトリクスとモノポーラ球面座標の関係式の導出捻りが0の状態における子骨のy軸およびz軸の方向の単位ベクトルを,それぞれvy,vzとする。vy,vzは,それぞれモノポーラグリッドのν方向および-μ方向である。子骨の向きを表す単位ベクトルをv≡x,y,zとする。vの偏微分を次のようにvμ,vνとする。vy,vzは,それぞれvν,-vμを正規化したものなので,次式で表される。vy,vzを求めるにあたり,まず下記のようにM,Nの偏微分を計算しておく。これらを利用してT≡2/M2N21の偏微分を求めると,次のようになる。これらを利用してx=T-1,y=TN,z=-TMの偏微分を求めると,それぞれ次のようになる。TM2N21=2を利用して計算すると,次式が得られる。同様に次式が得られる。よって,vy,vzは次式のようになる。子骨の向きを表すマトリクスを次のようにMとする。曲げおよび捻りを表すマトリクスを,それぞれMb,Mtとする。マトリクスの要素の並びは,列ベクトルに対して左からマトリクスを掛ける方式とする。曲げマトリクスMbの要素は,式3,4,5,150,151より次のようになる。捻りマトリクスMtの要素は次式のようになる。ただし,Sλ≡sinλ,Cλ≡cosλである。[元曲げ方式の場合]曲げの後に捻りを掛けるので,Mは次のようになる。この式を使えばλ,μ,νからMを求めることができる。逆にMからλ,μ,νを求める手順は,以下のようになる。まずTを求めると,となるが,この式はm00≒-1の場合に桁落ちにより精度が悪くなる。そのような場合には,を利用してによりTを求める。μ,νは次式により得られる。次に,λを求めるに次式を利用する。すると,となり,次式が得られる。よって,次式のようにλが得られる。[元捻り方式の場合]捻りの後に曲げを掛けるので,Mは次のようになる。この式を使えばλ,μ,νからMを求めることができる。Mからλ,μ,νを求める式は,元曲げ方式の場合と同様の方法により得られる。[本発明の実施例の処理および構成例]図25は,本願発明の実施例の装置構成を示す図である。コンピュータ2500には,キーボード2505,マウス2506,ペン2508を含むタブレット2507,ディスプレイ2501が接続されている。ディスプレイ2501上には,キャンバス2502が表示され,キャンバス2502上に図形が描画されている2503。図26は,本願発明の実施例のハードウエア構成を示す図である。CPU2601にバス2607が接続されている。バス2607には,メモリ2602,種々の入力装置2603,ディスプレイ等の表示装置2604及びプリンタ2605が接続されている。図27に本願発明の実施例を示す。図27を参照すると,まず,モノポーラ球面座標系によって,子骨の角度範囲を構成する境界円を設定するS2701。具体的には,例えばμ,νの上下限,形状等を指定する。そして,子骨の角度が,角度範囲の中すなわち内側にあるか否かを判定するS2703。子骨の角度が角度範囲の外にあると判定された場合には,上述の最近点を求める手法を用いて,子骨の角度を修正するS2705。そして,骨格モデルを画面に表示する。なお,ロボット等の実空間の対象物の制御を行う場合は,所望の角度に子骨を向ける制御を行うS2707。図28は,子骨の制御を行う制御装置の実施例を示す。まず,モノポーラ球面座標系によって,子骨の角度範囲を構成する境界円を設定する2801。そして,子骨の角度が,角度範囲の中すなわち内側にあるか否かを判定する2803。子骨の角度が角度範囲の外にあると判定された場合には,上述の最近点を求める手法を用いて,子骨の角度を修正する2805。そして,骨格モデルを画面に表示する2807。なお,ロボット等の実空間の対象物の制御を行う場合は,所望の角度に子骨を向ける制御を行う2808。また,各種の数値を設定するための入力手段2806を設けてもよい。本願明細書では,親骨に対する子骨の角度の制御を例示して,説明を行った。なお,本願発明は,3つ以上の骨が関節によって連結された骨格モデルに拡張して適用できることは言うまでもない。以上,本願発明について説明したが,本願発明の範囲は,本願明細書における上記実施例に限定されるものではない。当業者は,本願明細書の説明から,本願発明の変形態様を理解することができる。そして,これらの変形態様及びその均等物も,特許請求の範囲に係る技術的範囲に属することは言うまでもない。また,請求項に定義された各々のステップは,記載された順序通りに実行される必要はなく,矛盾の生じない範囲で,請求項に定義されたステップは,順番を変更して実行できる。そして,請求項のステップの順番を変更したものも,当該請求項の技術的範囲に包含されることは言うまでもない。"