cosθは -1~ 1 の値をとるので、Acosは通常0~πで定義されます。
sinθは0~πで正ですから、tanθの符号はcosθの符号で決定されます。
三角関数は2πの周期なのに0~πしか使えないのは、cosθが与えられただけでは、sinθの符号が決定できないためで、それを正にとるのはもちろん便宜的なものです。Acosを-π~0で定義するならば、sinθは負に取られます。
従って、0~πでは、
tanθ = sinθ/cosθ = √(1-cos^2θ) / cosθ
θ= Atan(tanθ) = Atan( √(1-cos^2θ) / cosθ )
となります。
計算機でこれに従ってθを計算すると、-π/2~π/2の区間で答えが出る場合があります。これはAtanの定義域が -π/2~π/2 に取られるのが一般的で、π/2~π が -π/2~0 に焼きなおされるためです。このようなことが可能なのは、sinθの符号がcosθの値だけでは決定できないからです。
これを避けたい、とお考えでしたら、Atan2という関数が一般に用意されているので、それを使います。
Atan2(cosθ、sinθ)
引数にsin,cos両方があるのでその符号が正確に反映され、定義域はーπ~πになります。従って、cosの情報のほかに、sinの符号の情報が必要になります。つまり、sinθ=符号×√(1-cosθ) をAtan2の入力に用います。これは、Atanθ = Atan (符号×√(1-cosθ) / cosθ) を計算機によらずに人間が考えるのと同じになります。
以上から、θをAcosやAtanから求めるには(Asinでもそうですが)、それぞれcos,tanのみの情報では不足で、cos,sinの一方と他の符号が必要になることがお分かりになるでしょう。
お礼
ありがとうございます。符号に気をつけて計算してみます。