• 締切済み

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

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

みんなの回答

  • chie65535
  • ベストアンサー率43% (8536/19408)
回答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

  • 数値解析(MATLAB)について

    vehi=[0,1,1,-1,-1,0;2,1,-1,-1,1,2]; plot(vehi(1,:),vehi(2,:));axis equal;axis([-15 15 -15 15]); [x,y]=ginput(1); hold on;plot(x,y,'p');hold off; [x1,y1]=ginput(1); hold on;plot([x x1],[y y1]);hold off; theta=atan2(y1-y,x1-x)-pi/2; R=cos(theta),-sin(theta);sin(theta),cos(theta)]; newvehi=R*vehi; hold on;plot(newvehi(1,:)+x,newvehi(2,:)+y);hold off このプログラムは実効したんでどのようになるかは分るんですが、講義で、プログラムの説明がされなかったので、全然意味が分りません。 vehiって何ですか? ginput(1)って何をしているんですか?(1)の意味って何ですか? hold onは何をしているんでしょうか? plot(x,y,'p')は何をしているんですか?pって何ですか? hold offで何をしてるんですか? theta=atan2(y1-y,x1-x)-pi/2は何をしているんですか?atan2って何ですか?アークタンジェント2? plot(newvehi(1,:)+x,newvehi(2,:)+y)って何をしてるんですか? ほとんど意味が分りません。特に、atan2とかは意味不明です。 それぞれが何をしているのか順序を追って説明をお願いします。 分りやすい解説をお願いします。

  • 三次元座標の回転角度

    左手系三次元座標A(X,Y,Z)がB(x,y,z)に移動したとき、原点からみたZ軸の回転角度Θの算出は、 Θ=Atan(y/x)-Atan(Y/X) でいいですか。よろしくお願いします。

  • エクセルでの座標計算の質問

    基準座標座標X-300 Y-300 の点を X0Y0を中心に回した計算式です E2に回転したい角度を入れて計算します A1= X 基準座標 A2= -300 B1= Y 基準座標 B2= -300 C1= 基準角度 C2= 45       C2式 =ATAN(A2/B2)/(PI()/180) D1= 中心からの距離 D2= 424.2640687   C2式 =SQRT(A2*A2+B2*B2) E1= 回転角度 E2= 0 F1= 合計角度 F2= 45 C2式=C2+E2 G1= X 答え G2= 300 C2式=COS(F2*PI()/180)*D2 H1= Y 答え H2= 300 C2式=SIN(F2*PI()/180)*D2 このとき回転角度E2の値を換えて計算をしたいのですが 45とか135を入れると合計角度が 90度180度になり XかYの答えが0になるのですが 2.59893E-14 このような答えになります この文字列は何でしょうか? 答えを0にはできませんか (注意)   まだ未完成です正と負の使い分けが出来ていません   X-300Y-300で角度を振ってないのに答えは180度   振った答えになっています (これも未解決) EXCEL2000 WINXP

  • エクセルで回転する座標の出し方

    エクセルで回転する座標の出し方 (例) 座標X100、Y100の点から好きな角度を回したときのX、Yの座標の求め方 回転中心はX0、Y0 回転方向は反時計回り 例で言えば X141.421、Y0  が0度       X0、Y141.421  が90度       X-141.421、Y0 が180度       X0、Y-141.421 が270度 エクセルでの問題点は 1.角度計算がラジアンになる デグリも関数はあるけど書式がわからない  無理やり(PI()/180)などを使ってるがアークタンジェントでは書式がわからない 2.正と負の計算式・答えが負になるときの処理ができない  回転角度が270度とか 今電卓で打っているのは 100/100=ATAN ----------------------最初の角度 100*100+100*100の答えのルート--------回転中心からの直線距離 最初の角度+動かしたい角度------------求めたい座標の角度 SIN求めたい座標の角度*直線距離-------Y座標 答え COS求めたい座標の角度*直線距離-------X座標 答え 最初のX、Y座標と 動かしたい角度を入れると答えが出るような 物が作りたいです よろしくお願いします エクセル2000 WINXP

  • 中学数学の問題、よく分からないので教えてください

    中学数学の問題です。よく分からないので教えてください。 --------------- 周の長さがa(一定)である長方形ABCDがある。 AD=xとするとxは0<X≦4の範囲のすべての値をとるものとし、 この範囲で長方形は形を変える。 このとき、周の長さaのとりうる値の範囲は? ーーーーーーーー 上記が問題です。aは無限に大きくなるような気がするのですが、どうなのかな?と思います。 よろしくお願いします。

  • 関数の 変化の割合 について

    一次関数では、yの増加量÷xの増加量は傾きですが 二次関数では yの増加量÷xの増加量は傾きではなくて 変化の割合 となっています。 二次関数の この「変化の割合」という言葉の意味が分かりません。 たとえばy=-2xの二乗(2≦x≦6)という二次関数があったとします。 xの増加量は6-2=4 yの増加量は72+8=-64 変化の割合は-64÷4=-16です。 グラフをかいてみても 「変化の割合=-16」の意味が 分かりません>< どなたか教えてください><

  • 勾配に疑問があります

    添付図を参照してください。 y=-243.88x+1E+07  となっています。 勾配を度数であらわすため DEGREES(ATAN(-243.88)) を用いました。 結果 -89.7651°となりましたが、どうみても そのような角度ではありません。 どこがおかしいのでしょうか。

  • 分数勾配から角度を求める式について

    x=573*ATAN(0.01*y)/10 x:求める角度 y:分数勾配(単位:%) 分数勾配というのは、100m行って何m上がるというものです。8%なら100m行って8m上がるという意味です。 この式の「573」が、どうしてこの数字なのかがわかりません。

  • 一次関数について

    この間、家庭教師で一次関数をしたのですが、うまく説明できないところがありました。 一次関数y=2x+3で、xの値が1から4まで増加したときの (1)xの増加量、(2)yの増加量、(3)変化の割合 を求めよ。 という問題では、 (1)4-1=3 (2)(2*4+3)-(2*1+3)=6  (3)変化の割合=yの増加量/xの増加量=6/3=2  となります。 次に、y=2x+3で、xの増加量が4であるとき、yの増加量を求めよ。 という問題では、yの増加量は、yの増加量=変化の割合*xの増加量という公式で、y=2*4=8となります。 上の問題では、yの増加量を出すとき、2*4+3とか、2*1+3と、 切片の3を足していますが、下の問題では、yの増加量=変化の割合*xの増加量という公式を使って出し、切片の3は足していません。 生徒に、なぜ同じようにyの増加量を求めるのに、解き方が違うのか?(下の問題では3を足さないのか?)と聞かれました。 自分では、ただ単にyの増加量を求める問題のときは、yがどれだけ変化するかを求めたいだけで、切片は関係ない。と考えているのですが、 相手にわかるように、どう言葉で説明したらいいのかわかりません。 どういった説明をしたらいいのか教えてください。お願いします。

  • sin(x+y)dxdy 積分

    0<=x<=pi/2 0<=x+y<=pi/3*sqrt(logx) 範囲はこれです。答えはpi/2になるはずです。解答を教えてください。