C/C++の宿題片付けます 135代目

このエントリーをはてなブックマークに追加
642デフォルトの名無しさん
[1] 授業単元:ロボット制御

[2] 問題文:
3次元空間座標(x,y,z)の数値を与えると、
ロボットの関節の角度(A,B,C)を計算するプログラムを作成する。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今週中にお願いします。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

L1,L2はロボットの腕の長さでL1:69.8/L2:77.35が与えられています。

また、それぞれの変換公式は
C= ±(プラスマイナス) arccos(((x^2+y^2+x^2)-(L1^2+L2^2))/(2*L1*L2))
B= arcsin(y/(L1+L2*cos(C)))
A= arctan(x/(-z)) ±(マイナスプラス) arccos(((L1+L2*cos(C))*cos(B))/root(x^2+y^2))
で、ABCは動作幅が制限されています。
Cの動作幅は-30<= C <=127 [deg]
Bの動作幅は-15<= B <=93 [deg]
Aの動作幅は-120<= A <=135 [deg]

最初にCを出すと値がプラスマイナスの2種類が出るため、
条件に当てはまる最適値を選んでradに変換した上でBに代入して計算、
Bの値をAに代入した上で、出てきた二つの値から最適値を選んで
結果を出力するのだと思うのですが、どのような条件式を書けばよいのでしょうか?

最適値の選び出し方の動作アルゴリズムだけでも結構ですのでお願いします。