• 締切済み

アークタンジェントについて

C言語に関する質問です。 atan2(y,x)を使って角度を求めようとすると、 範囲が-pi(-180°)~pi(180°)に限定されてしまいます。 この範囲を0~無限大にするには、どのようにすればいいのでしょうか? 今回の場合、得られる角度が0°から正方向にある一定の割合で 増加します。atan2(y,x)を使うと角度が180°以上になると出力される結果がマイナスの領域になってしまいます。これを200°、250°、 300°と出力できるようにしたいです。 また、角度が一周(360°)になったら0°に戻るのではなく、 400°、450°、500°と角度が永遠と増加するように出力したいです。 どのようにすればいいでしょうか? 誰か知恵を貸してください。

みんなの回答

回答No.3

・初期化ルーチン グローバル変数として「前の値」を定義する。 「前の値」を負の数(負数なら何でもよい)にする。 ・角度を求めるルーチン(関数) atan2で角度(-180~180度)を求め、求めた値が「前の値」より大きいか等しくなるまで、求めた角度に「360度」を足し続ける。求めた値が最初から「前の値」より大きいか等しいなら何もしない。そして、求めた値を「前の値」に代入する。 ここで重要なのは「大きいか等しくなるまで足し続ける」です。1回しか足さないで居ると、結果は0~360度にしかならず、400度とか500度などにはなりません。 こうすると、角度を求めるルーチンを呼ぶたびに「求める角度が延々と増加」します。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

角度が増加一辺倒ということなら、戻り値が前回よりも小さかったら、+360°(+2π)すればよいのでは。

real-c
質問者

補足

回答ありがとうございます。 私のミスで角度が増加しかしないと書いたのですが、たまに減少もします。マクロ的にみると増加しています。 アドバイスお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

以前に得られた値を記憶しておき, それより大きい「適切な値」を返すような関数でも作ってください.

real-c
質問者

補足

具体的な方法を教えていただけるとありがたいです。 よろしくお願いします。

関連するQ&A