[PHP] 関数電卓なみの計算をしよう(2) 円周率、ラジアン、tan-1

関数電卓で、sin、cos、tan計算ができます。これらの計算をphpスクリプトで計算してみましょう。

関数電卓とは

関数電卓すごすぎて、関数電卓なみとか言ってられないわ

円周率π(パイ)

円周率πは、直径1の円の周囲の長さのことで、3.14159 です。PHPでは、あらかじめM_PIという定数に設定されています。M_PIは、先頭にドルマークはなく、すべて大文字です。

<?php echo M_PI;

実行すると、

3.1415926535898

円の面積は、3.14159×半径2だよ。

他には、e(自然対数の底)の M_E、オイラー定数 M_EULER が定義されています。

関数電卓には数十個の科学定数があるわよ。関数電卓の足元にもおよばないわね。

360度とラジアンの変換

PHPには、sin関数、cos関数、tan関数などの三角関数があります。これらの三角関数には、引数に角度を渡します。ただし、その角度は360度単位ではなく、ラジアン単位です。

360度 = 2 π ラジアン
180度 = 1 π ラジアン

45度をラジアンに変換するには、
45 ÷ 180 × π
と計算します。

よく使う計算なので、deg2rad関数が用意されています。degはdegree(度)、radはradian(ラジアン)の略です。

<?php echo 45 / 180.0 * M_PI; echo "\n"; echo deg2rad(45); echo "\n";

実行すると、

0.78539816339745 0.78539816339745

0.78539816339745ラジアンを360度単位に変換するには、
0.78539816339745 ÷ π × 180
と計算します。

この計算にも、rad2deg関数が用意されています。

<?php echo 0.78539816339745 / M_PI * 180.0; echo "\n"; echo rad2deg(0.78539816339745); echo "\n";

実行すると、

45 45

deg2rad関数やrad2deg関数の「2」って何?

プログラミング界では、xxからyyへ変換する関数を、xx_to_yy や xx2yyと名前をつけることが多いわね。

度数法と弧度法の関係は?

弧度法の1ラジアンを度数法で表すと何度になるか?
90°を弧度法で表すと何ラジアンか?

https://edu.casio.jp/cal/cal18/

360度単位の角度を度数法っていうんだね

まず、rad2deg関数を使います。

<?php echo rad2deg(1);

実行すると、

57.295779513082

1ラジアンは約57度です。

次に、deg2rad関数を使います。

<?php echo deg2rad(90);

実行すると、

1.5707963267949

地球の体積を求めてみよう

球の赤道半径を6378.14kmとしたとき、地球の体積を求める。
ヒント
球の体積は4πr3/3で求めることができる。

https://edu.casio.jp/cal/cal16/

球の体積の公式、久しぶりにみたよ

赤道半径を6378.14を変数$rに代入します。

体積を計算して、変数$vに代入します。体積のvolumeのvですね。

<?php $r = 6378.14; $v = (4 * M_PI * ($r ** 3)) / 3; echo $v;

実行すると、

1086852860144.4

カシオのページのように、1.08685286x1012 のように表示するには、sprintf関数と書式指定子%eを使います。

<?php $r = 6378.14; $v = (4 * M_PI * ($r ** 3)) / 3; echo sprintf("%e", $v);

実行すると、

1.086853e+12

なにげにsprintf関数をさしこんできたよ

sprintfを説明するのも理解するのも難しいのよ。
でも、その存在を知っておいてね。

半径50cmのタイヤを持つ車が1km進んだとき、タイヤは何回転しているか

半径50cmのタイヤを持つ車が1km進んだとき、タイヤは何回転しているか。(πを使用せずに求める)

https://edu.casio.jp/cal/cal17/

軽自動車のN-BOXのタイヤが直径56センチ。半径50cmってかなり大きいタイヤだよ。

カーシェアでよく借りるわね

πを使用しないこと、とありますが、phpスクリプトでは、πを使用してもいいことにします。

半径0.5mを変数$aに、移動距離1000mを変数$bに代入します。

タイヤの周長を計算して、変数$cに代入します。周長は、2×π×半径です。

<?php $a = 0.5; $b = 1000; $c = 2 * M_PI * $a;

移動距離1000mをタイヤの周長で割って、回転数を計算して、変数$dに代入します。

// つづき $d = $b / $c; echo $d;

実行すると、

318.30988618379

318.3回転でした。

エディター欄をまとめると、

<?php $a = 0.5; $b = 1000; $c = 2 * M_PI * $a; $d = $b / $c; echo $d;

実行すると、

318.30988618379

京都駅から金閣寺までの距離を求める。

京都駅から二条城の側を通り金閣寺に行くために
①烏丸通りを北に1,150m、
②五条通りを西に700m、
③堀川通りを北に2,350m
④丸太町通りを西に1,800m、
そして⑤西大路通りを北に2,350m移動した。
金閣寺は京都駅から見て、どの方向にどれだけ離れているか。
※ここでの距離と方角は実際の距離とは多少異なります

https://edu.casio.jp/cal/cal09/

つまり、北に、1150 + 2350 + 2350移動し、西に700 + 1800移動したんですね。

南北をy軸(北を+、南を−)、東西をx軸(東を+、西を−)とします。

南北の移動を変数$y、東西の移動を変数$xに代入します。距離を計算して、表示します。

<?php $y = 1150 + 2350 + 2350; $x = -(700 + 1800); $d = sqrt($x ** 2 + $y ** 2); echo $d; echo "\n";

実行すると、

6361.8000597315

約6362mでした。

次に、atan2関数(アークタンジェント2)で角度を求めます。atan2関数は、y座標、x座標を引数で渡すと、角度を返してきます。ラジアン単位なので、360度単位に変換します。

atan関数は、tan関数の逆関数です。tan関数は、角度を渡して、y/x比率で勾配を計算します。atan関数は、y/x比率を渡して、角度を計算します。atan関数とは別に、atan2関数があり、atan2関数は、y/x比率ではなく、y値、x値それぞれを渡します。

// つづき $e = atan2($y, $x); $f = rad2deg($e); echo $f; echo "\n";

実行すると、

113.13946176321

x軸の東方向から、113度の方向です。北が90度、西が180度、北西が135度です。113度は、北と北西の間、ほぼ北北西です。

上の地図らしきもので説明すると、
東が、0度
北が、90度
西が、180度
南が、270度

エディター欄をまとめると、

<?php $y = 1150 + 2350 + 2350; $x = -(700 + 1800); $d = sqrt($x ** 2 + $y ** 2); echo $d; echo "\n"; $e = atan2($y, $x); $f = rad2deg($e); echo $f; echo "\n";

実行すると、

6361.8000597315 113.13946176321

まとめ

円周率パイは、PHPの定数 M_PI に定義されている。

rad2deg関数、deg2rad関数で、ラジアン単位と360度単位を変換する。

atan2関数で、xy座標から角度を計算する。

タイトルとURLをコピーしました