関数電卓で、sin、cos、tan計算ができます。これらの計算をphpスクリプトで計算してみましょう。
関数電卓とは
関数電卓すごすぎて、関数電卓なみとか言ってられないわ
円周率π(パイ)
円周率πは、直径1の円の周囲の長さのことで、3.14159 です。PHPでは、あらかじめM_PI
という定数に設定されています。M_PI
は、先頭にドルマークはなく、すべて大文字です。
<?php
echo M_PI;
Code language: PHP (php)
実行すると、
3.1415926535898
Code language: plaintext (plaintext)
円の面積は、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";
Code language: PHP (php)
実行すると、
0.78539816339745
0.78539816339745
Code language: plaintext (plaintext)
0.78539816339745ラジアンを360度単位に変換するには、
0.78539816339745 ÷ π × 180
と計算します。
この計算にも、rad2deg関数が用意されています。
<?php
echo 0.78539816339745 / M_PI * 180.0;
echo "\n";
echo rad2deg(0.78539816339745);
echo "\n";
Code language: PHP (php)
実行すると、
45
45
Code language: plaintext (plaintext)
deg2rad関数やrad2deg関数の「2」って何?
プログラミング界では、xxからyyへ変換する関数を、xx_to_yy や xx2yyと名前をつけることが多いわね。
度数法と弧度法の関係は?
弧度法の1ラジアンを度数法で表すと何度になるか?
https://edu.casio.jp/cal/cal18/
90°を弧度法で表すと何ラジアンか?
360度単位の角度を度数法っていうんだね
まず、rad2deg関数を使います。
<?php
echo rad2deg(1);
Code language: PHP (php)
実行すると、
57.295779513082
Code language: plaintext (plaintext)
1ラジアンは約57度です。
次に、deg2rad関数を使います。
<?php
echo deg2rad(90);
Code language: PHP (php)
実行すると、
1.5707963267949
Code language: plaintext (plaintext)
地球の体積を求めてみよう
球の赤道半径を6378.14kmとしたとき、地球の体積を求める。
https://edu.casio.jp/cal/cal16/
ヒント
球の体積は4πr3/3で求めることができる。
球の体積の公式、久しぶりにみたよ
赤道半径を6378.14を変数$rに代入します。
体積を計算して、変数$vに代入します。体積のvolumeのvですね。
<?php
$r = 6378.14;
$v = (4 * M_PI * ($r ** 3)) / 3;
echo $v;
Code language: PHP (php)
実行すると、
1086852860144.4
Code language: plaintext (plaintext)
カシオのページのように、1.08685286x1012 のように表示するには、sprintf関数と書式指定子%eを使います。
<?php
$r = 6378.14;
$v = (4 * M_PI * ($r ** 3)) / 3;
echo sprintf("%e", $v);
Code language: PHP (php)
実行すると、
1.086853e+12
Code language: plaintext (plaintext)
なにげに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;
Code language: PHP (php)
移動距離1000mをタイヤの周長で割って、回転数を計算して、変数$dに代入します。
// つづき
$d = $b / $c;
echo $d;
Code language: PHP (php)
実行すると、
318.30988618379
Code language: plaintext (plaintext)
318.3回転でした。
エディター欄をまとめると、
<?php
$a = 0.5;
$b = 1000;
$c = 2 * M_PI * $a;
$d = $b / $c;
echo $d;
Code language: PHP (php)
実行すると、
318.30988618379
Code language: plaintext (plaintext)
京都駅から金閣寺までの距離を求める。
京都駅から二条城の側を通り金閣寺に行くために
https://edu.casio.jp/cal/cal09/
①烏丸通りを北に1,150m、
②五条通りを西に700m、
③堀川通りを北に2,350m
④丸太町通りを西に1,800m、
そして⑤西大路通りを北に2,350m移動した。
金閣寺は京都駅から見て、どの方向にどれだけ離れているか。
※ここでの距離と方角は実際の距離とは多少異なります
つまり、北に、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";
Code language: PHP (php)
実行すると、
6361.8000597315
Code language: plaintext (plaintext)
約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";
Code language: PHP (php)
実行すると、
113.13946176321
Code language: plaintext (plaintext)
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";
Code language: PHP (php)
実行すると、
6361.8000597315
113.13946176321
Code language: plaintext (plaintext)
まとめ
円周率パイは、PHPの定数 M_PI に定義されている。
rad2deg関数、deg2rad関数で、ラジアン単位と360度単位を変換する。
atan2関数で、xy座標から角度を計算する。