スポーツバイオメカニクス MatlabとOpenSIM

スポーツバイオメカニクスの分析によく用いられるMatlabとOpenSIMの使用に関する備忘録

角度の算出 —atan2—

前回はacosを使った余弦定理を用いた角度算出方法を紹介しました。

今回はatan2を使った正接の角度算出方法を紹介します。

前回は2つのベクトルのなす角の求め方でしたが、今回は1つのベクトルのある平面内のひとつの軸に対する角度を求めます。例えば、XY平面の中でX軸となす角度などです。

f:id:simulate:20170131200514p:plain

関数atan2の使い方は上の図の通りです。

では、これをどのように使うとベクトルの角度の算出方法になるのか説明していきます。

f:id:simulate:20170131200556p:plain

仮に、上の図のように斜辺がベクトルaだとすると、そのx成分とy成分を使ってその角度を求めることができます。

ベクトルaの成分がx,yの順番で引数に入っているとすると、上の図のような書き方で角度を求めることができます。
なお、これで算出される角度はradianですので、degreeに変換する場合は
「*180/pi」
と最後に付け足してやる必要があります。

この図では「θ」と記号を使っていますが、Matlabの引数に記号は使えないので「theta」などとすればそのまま使用可能です。

これを使うと、セグメント角度の算出が可能になります。

例えば、大腿セグメントの角度を算出する場合、まずは大腿セグメントベクトルを作らなければなりません。
近位から遠位に向かうベクトルとして、大腿セグメントベクトルを作る場合は、膝関節の座標値から股関節の座標値を引きます。

ベクトルの引き算は高校の数学Bの範囲ですので、わからない方は調べてみてください。
これはそんなに難しい概念ではありません。


次に、さきほど引き算で作成したベクトルの角度を算出します。
さっき説明したように、大腿セグメントベクトルのx成分とy成分をatan2関数に入れてやるだけです。

ちなみに、atan2では-180度から180度の間で角度が求められます。
したがって、atan2(y,x)とそのまま入れた場合は

f:id:simulate:20170131200622p:plain

というような角度の求め方になります。

x成分とy成分の順番を入れ替えたり、-を付けたりすることでどこを基準に角度を求めるかが変わります。
求めたい角度が概ね何度くらいかわかるものから試してみて、どこで求めるのが望ましいか考えなら行うことが良いと思います。