![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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でも丸めて表示が出来たかもしれません。
ご返答ありがとうございます。
なるほど、これは無限ではなくて小さい値だったんですね、勘違いしてました・・・
試してみましたが0にすることができました。ありがとうございます。
No.4
- 回答日時:
ここまでくると数学の問題ですな^^;
>度数からx,yの値を求める方法をご存知でしたら教えてもらえないでしょうか?
普通に度数をラジアン単位に直し、sin()やcos()をかませば求められますよ。
幸いにもphpにはラジアン単位に直す関数があるので利用すると良いかと。
まにゅある deg2rad()
http://jp.php.net/deg2rad
ただ、ラジアン単位だけでは正弦・余弦の値しか求められないので、
座標を求めると言う意味では一次結合で使うような係数が必要かと思われます。
ご返答ありがとうございます。
たしかに完全に数学ですね・・・
早速試してみたのですが、sinをy、cosをxとみなして調べてみたら理想とする結果がでてきました。
ただ90度、180度、270度の時に無限と思われる値がでてきて
>度数=90 x=6.12303176911E-17 y=1
>度数=180 x=-1 y=1.22460635382E-16
>度数=270 x=-1.83690953073E-16 y=-1
これをなんとかして0にできないかと試したのですが無理でした・・・
下が例ですが、
for ($i = 0; $i < 360; $i++)
{
$a = deg2rad($i);
$c = cos($a);
$s = sin($a);
//if (is_infinite($s)){ $s = 0; }
//if (is_infinite($c)){ $c = 0; }
if ($c < -1 || 1 < $c){ $c = 0; }
if ($s < -1 || 1 < $s){ $s = 0; }
print "度数={$i} x={$c} y={$s}<br>\n";
}
is_infinite関数や-1より下または1より上でのチェックが効きません・・・
この場合の数のチェックは何を使えば良いのかご存知でしょうか?
No.3
- 回答日時:
ご返答ありがとうございます。
たしかにpi()を使った方が良さそうですね。ありがとうございます。
追加で申し訳ないのですが、wp_さんにもNo.1のお礼で説明している
度数からx,yの値を求める方法をご存知でしたら教えてもらえないでしょうか?
お願いします。
No.2
- 回答日時:
<?php
$a = atan2(1,1);//y,x
$deg = $a * 180.0 / 3.14159265358979323846;
printf($deg);
?>
でどうですか?
atan2は、x=0であっても正しく計算されます。
$a = atan2(1,0);
$deg = $a * 180.0 / 3.14159265358979323846;
とすれば、$deg=90となります。
ご返答ありがとうございます。
全ての値で度数が求まりました。ありがとうございます。
追加で申し訳ないのですが、sayaamaさんにもNo.1のお礼で説明した
度数からx,yの値を求めるやり方を考えてもらないでしょうか?
お願いします。
No.1
- 回答日時:
方向ベクトルの傾きを正接とする角を求めればいいので、
x2≠x1のとき
(y2-y1)/(x2-x1)のアークタンジェントではだめですか?
ご返答ありがとうございます。
そのやり方でできました。ありがとうございます。
追加で申し訳ないのですが、
求めた度数(90度270度など)から逆にx,yの値を求めることはできないでしょうか?
例えばANo.2のsayaamaさんで紹介されたプログラムを利用して求めると
(1,0)が90度になるのですが、
>$a = atan2(1,0);//y,x
>$deg = $a * 180.0 / 3.14159265358979323846;
これをどのように逆算すればx,yの値が求まるのでしょうか?
((1,1)の45度の場合など、(2,2)でも同じことなので、
x,yの値は-1から1までの間ということになると思います)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経済学 経済学の総需要曲線の計算方法について教えて下さい。 3 2022/06/12 13:21
- 数学 ベクトル方程式(ヘッセの標準形)についての質問 2 2022/04/23 18:00
- 物理学 【物理学、数学】テントを引っ張り支えるロープの角度は地面の0度に対して、45度で 5 2022/10/30 21:30
- 物理学 原点中心とする半径10cmの演習上、質点が1分間に600回の割合で反時計回りに運動している。 (1) 4 2023/05/29 12:46
- 工学 アクチュエータ、制御について質問です 1 2023/07/10 17:28
- 数学 極座標A(2,π/6)となる点を通り、OAに垂直な直線lの曲方程式を求めよ という問題を直交座標を利 1 2022/08/04 17:31
- 物理学 量子力学 球面調和関数 導出 方位角成分 微分方程式の解 2 2022/07/02 13:40
- 数学 sin(45°-x)=sin(x+135°)が成り立つと思うのですが、 これを加法定理を使わずに(三 4 2023/05/25 12:34
- docomo(ドコモ) ドコモのラクラクホン(アンドロイド)で、平面直角座表の位置に、たどり着く事が出来る、アプリは? 2 2023/06/23 21:12
- 数学 角度当てクイズVol.225の解き方おしえてください 1 2023/06/23 17:45
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
角度を求めるプログラム
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
Excel2010でふりがなが漢字にな...
-
mfc42.dllファイルってなんです...
-
オペランドが足りませんとコメ...
-
【ExcelVBA】sheet作成時にマク...
-
フェイス・シートについて教え...
-
FLASHで外部swfファイルを検索...
-
VBAで横データを縦データに変換...
-
AUTOCAD 2010でdwlファイルの場...
-
InstallShieldWizardのエラー
-
エクセル マスターデータから別...
-
起動時エラーの対処方法
-
エクセル/マクロ Exit Subが実...
-
Pファイルを実部と虚部に分け...
-
pythonでrequestsが使えない
-
エクセル 「実行時エラー"13":...
-
Bootcampで無線lan接続が出来ない
-
マクロ実行ボタンがコピー出来ない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(int)キャストとintvalの違い
-
『PHP』 MAMPで$_SERVER["REMOT...
-
GETからPOSTに変更
-
請求書等のシリアル番号生成方法?
-
複数選択した場合のチェックボ...
-
角度を求めるプログラム
-
if (isset($_POST["body"]) && ...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
オペランドが足りませんとコメ...
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
mfc42.dllファイルってなんです...
-
VBA シートの切り替えができな...
-
エクセルの文字間スペースを入...
-
貼り付けをマクロで禁止させたい。
-
pythonでrequestsが使えない
-
エクセル 「実行時エラー"13":...
-
Excel2010でふりがなが漢字にな...
-
Access2007 DoCmd.ApplyFilter...
おすすめ情報