• ベストアンサー

角度を求めるプログラム

wp_の回答

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.5

>>度数=90 x=6.12303176911E-17 y=1 >>度数=180 x=-1 y=1.22460635382E-16 >>度数=270 x=-1.83690953073E-16 y=-1 あー。 よくある話ですね。 これはコンピュータを扱う上で避けられない仕様です。 // たまにバグと言う奴が居ますがバグではありません。 // バグと言う奴には哀れみの眼差しを送りましょう。 無理数piや三角関数の結果などは正確な値を用いて計算しているわけではありません。 コンピュータとて有限の資源(メモリ)を使って計算しているわけですから、必ずどこかで値を丸めて使っています。 この場合ですと、$aが完全なpi/2を使っているわけではなく(正確にはpi/2を11桁くらいで丸めた値)、そのせいでsin,cosが通常では表せない極小な値を吐こうとしているのでしょう。 対策としては、cosで吐かれた値を明示的に丸めることが考えられます。 パッと思いついた感じでは以下の感じですかね。 $fig = 10000000; // 小数点以下8桁で丸め $a = deg2rad($i); $c_tmp = cos($a); $s_tmp = sin($a); // 整数部位以下を捨ててもう一回割ると0.00000000001のような数字は0になる $c = intval($c_tmp * $fig) / $fig; $s = intval($s_tmp * $fig) / $fig; なにか適用できる関数があった気もしますが。 sprintfでも丸めて表示が出来たかもしれません。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、これは無限ではなくて小さい値だったんですね、勘違いしてました・・・ 試してみましたが0にすることができました。ありがとうございます。

関連するQ&A

  • 2線の交わる角度を求める式

    2線の交わる角度を求める式で、0での除算が発生しない方法を教えて下さい。 座標 線a ax1 = 0 , ay1 = 0 : ax2 = 12 , ay2 = 13 線b bx1 = 6 , by1 = 15: bx2 = 6 , by2 = 2 A=(y13-y0)/(x12-x0) B=(y2-y15)/(x6-x6)   0で除算が発生 2線の交わる角度 tanθ=(A-B)/(1+AB) 片方の線が垂直だと0で除算が発生しまい、うまく計算できません。 なにか他によい方法はないでしょうか。

  • 角度が求められません。

    角度が求められません。 以下の図(見づらくてすみません。数字は度数を表しています)において,xの角度を求めたいのですが、求めることができません。 アドバイスお願いします。 ※三角形ABCは頂角Aが20度の二等辺三角形  三角形BCDは頂角Bが80度の二等辺三角形  三角形EABは頂角Bが140度の二等辺三角形 ということがわかります。

  • 二点の座標から距離や角度を求めたいのですが、Matlab

    こんにちは、Matlabの初心者ですがよろしくお願いします。 ある座標、たとえば、A(x1, y1) B(x2, y2)があったとして、 この二点間の距離は、 sqrt((x2-x1)^2 + (y2-y1)^2) だと思いますが、もっと簡潔に求めることができる関数とかが導入されていたりしないかと思いました。AやBを定義しておいて、AとBだけを使うことができないかと思いました。 また、この二点を通る直線とX軸とがなす角度は、 atan(sqrt((y2-y1)^2)/sqrt((y2-y1)^2)) で求められるかと思いますが、これも同様にもっと簡潔な方法がないかと思いました。 いかがでしょうか。よろしくお願いします。

  • 二点の座標から角度を求めるには?

    2点の座標A,Bの角度を求めたいのですが,たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを元に三角関数?から30度と求められますが、B点がマイナス座標が絡んできた場合などの90度から359度までをどう求めていいか悩んでいます。また、A点も(0,0)に限定されるわけではないので、ますます混乱しています。どう考えればよいのか教えていただきたいのですが (水平はX軸プラス方向が0度です)

  • 内積の定義を用いた三角形の角度の求め方について

    http://www.sousakuba.com/Programming/gs_two_vector_angle.html 上記のページを参考に三角形の角度を求めるプログラムを作りたいのですが、 理解出来ないので質問させて頂きました。 Vector2には、xとyの座標位置がそれぞれ格納されているかと思いますが、 計算で使われている座標はベクトルAとベクトルBの2点の座標のみのように思うのですが、 なぜ、ベクトルAとベクトルBの交点の座標は使わずに三角形の角度が計算できるのでしょうか? ベクトルAとベクトルBの座標位置は(0,0)という単純な話なのでしょうか?

  • 角度が求められません(再投稿)

    角度が求められません(再投稿) 以下の図(見づらくてすみません。数字は度数を表しています)において,xの角度を求めたいのですが、求めることができません。 アドバイスお願いします。 ※三角形ABCは頂角Aが20度の二等辺三角形  三角形BCDは頂角Bが80度の二等辺三角形  三角形EABは頂角Bが140度の二等辺三角形 ということがわかります。

  • 楕円計算で困っています

    長径2a、短径2bの楕円があり、長軸と短軸の交点座標(いわゆる中心点)を(0,0)とする この中心点からx軸からの角度αで直線を引き、楕円との交点座標を(x1,y1)とし、 また、この座標がx軸に対して対称な座標を(x1,-y1)とする この2点に対して楕円の接線を引いて、2つの線の角度をβとする この条件で(x1,y1)座標と角度βを、a,b,角度αを用いて表現する方法はないでしょうか? 色々考えてみたのですがどうも上手くいきません。 どうかよろしくお願いします。

  • 角度の求め方

    VBAで2つのX,Y座標から角度を求めるにはどのようにしたら良いのでしょうか。 例えばx1=100,y1=100とx2=200,y2=200は45度、というような場合にx1,y2とx2,y2を使って45を求めたいのですが...

  • 角度を求めたい。

    x,yの角度を求めたいです。円の半径が4000m、aの角度が20度、bの角度が20度です。

  • 位置座標からx軸となす角度(ラジアンでも可)を求める方法

    簡単な2次元座標系で現在の位置が(x,y)だとします。 この点を三角関数を用いて表したときに x=m+r*cos a y=n+r*sin a となると思うんですが((m,n)は円の中心点,rは半径,aはx軸と半径のなす角とします)任意にa以外の変数に値を与えた場合,aを求めるプログラムの書き方が良く分かりません。 いいかえますと2点を結んだ直線とx軸とのなす角度を求めたいというものです。 もちろん角度ではなくラジアンでもかまいません。 どなたかご教授よろしくお願いします。