Up 「<日出・日入の方角,南中の太陽の仰角>年間変化表」作成プログラム 作成: 2020-09-28
更新: 2020-09-28


    表作成のコンピュータプログラム例を,以下に示す。
    これは,html で実行する PHP プログラムである。

    "; /* 公転角度の何度から何度までを表示するか */ $t_from_degree = 0; $t_to_degree = 360; /* 公転角度の何度おきに表示するか */ $t_u_degree = 10; /* $t_u_degree = 1; */ /* 緯度 ( 23.4度 <a< (90ー23.4)度) */ $a_degree = 45; /* t_pi, t_0 */ $sunrise_t_pi = 25; $sunrise_t_0 = 155; $midday_t_pi = 270; $midday_t_0 = 90; $sunset_t_pi = 205; $sunset_t_0 = 335; $midnight_t_pi =115; $midnight_t_0 = 245; /* t_pi, t_0 */ $t_pi[0] = $sunrise_t_pi; $t_pi[1] = $midday_t_pi; $t_pi[2] = $sunset_t_pi; $t_pi[3] = $midnight_t_pi; $t_0[0] = $sunrise_t_0; $t_0[1] = $midday_t_0; $t_0[2] = $sunset_t_0; $t_0[3] = $midnight_t_0; /* 表項目 */ print " <table><tr><td> 南中の太陽の方角を向いたときの <br>  日出/日入の方角 (東/西に何度) <br>  南中の太陽の仰角 <br>(北緯 ".$a_degree." 度の場合) </td></tr></table> <table cellpadding=2><tr><td></td></tr></table> <table border=1 cellspacing=0> <tr> <td>公転角度(τ)</td> <td align=center> 日出/日入 </td> <td align=center> 南中 </td> </tr> "; /* 計算とレコード書き出し ******************************************************/ /* 自転軸の傾き */ $n_degree = 23.4; $n_radian = deg2rad( $n_degree ); $n_s = sin( $n_radian ); $n_c = cos( $n_radian ); /* 緯度 */ $a_radian = deg2rad( $a_degree ); $a_s = sin( $a_radian ); $a_c = cos( $a_radian ); /******* 作業ループ ********/ for( $i = 0; $i < 360; $i++ ){ $t = deg2rad( $i ); $t_s = sin( $t ); $t_c = cos( $t ); /******* 日の出・日の入の経度計算 ********/ $sunrise_x = ( - $n_s * $a_s * $t_s * $t_c - $n_c * $t_c * sqrt( 1 - pow($n_s * $t_c, 2) - pow($a_s, 2) ) ) / (1 - pow($n_s * $t_c, 2)); $sunrise_b_c = $sunrise_x / $a_c; $sunrise_b = acos( $sunrise_b_c ); /* $sunset_x = ( - $n_s * $a_s * $t_s * $t_c + $n_c * $t_c * sqrt( 1 - pow($n_s * $t_c, 2) - pow($a_s, 2) ) ) / (1 - pow($n_s * $t_c, 2)); $sunset_b_c = $sunset_x / $a_c; $sunset_b = acos( $sunset_b_c ); */ /******* 南中の経度計算 ********/ $midday_b_c = $t_s / sqrt ( 1 - pow( $n_s, 2 ) * pow( $t_c, 2 ) ); $midday_b = acos( $midday_b_c ); /******* 余弦方程式の二つの解 (αと 2π−α) のうちから,適正な方を選択 ********/ if( $i == 0 ){ $midday_b = 2 * pi() - $midday_b; $b_0[0] = $sunrise_b; $b_0[1] = $midday_b; $b_0[2] = $sunset_b; $b_0[3] = $midnight_b; $b[0] = $sunrise_b; $b[1] = $midday_b; $b[2] = $sunset_b; $b[3] = $midnight_b; } else { $b[0] = $sunrise_b; $b[1] = $midday_b; $b[2] = $sunset_b; $b[3] = $midnight_b; for( $j = 0; $j < 2; $j++ ){ $case = 0; if( ( $i == $t_0[$j] ) || ( $i == $t_pi[$j] ) ){ if( $i == $t_0[$j] ){ $b[$j] = 0; } else{ $b[$j] = pi(); } } else { if( ( 0 < $b_0[$j] ) && ( $b_0[$j] < pi() ) ){ if( $b_0[$j] < $b[$j] ){ if( $i < $t_pi[$j] ){ $case = 111; } else{ $case = 112; } } else{ if( $i < $t_0[$j] ){ $case = 121; } else{ $case = 122; } } } else { if( $b_0[$j] < 2 * pi() - $b[$j] ){ if( $i < $t_0[$j] ){ $case = 211; } else{ $case = 212; } } else{ if( $i < $t_pi[$j] ){ $case = 221; } else{ $case = 222; } } } } if( ( $case == 112 ) || ( $case == 121 ) || ( $case == 211 ) || ( $case == 222 ) ){ $b[$j] = 2 * pi() - $b[$j]; } } } /* レコード書き出し */ if( ( $i >= $t_from_degree ) && ( $i < $t_to_degree ) ){ if( $i % $t_u_degree == 0 ){ /******* 日出・日入方向 ************************************************************/ $sunrise = rad2deg( $b[0] ); $midday = rad2deg( $b[1] ); if( $midday < $sunrise ){ $am = ( $midday + 360 ) - $sunrise; } else { $am = $midday - $sunrise; } $am = round($am, 0 ); /* $sunset = rad2deg( $b[2] ); $midnight = rad2deg( $b[3] ); if( $midday > $sunset ){ $pm = ( $sunset + 360 ) - $midday; } else { $pm = $sunset - $midday; } $pm = round( $pm, 0 ); */ /******* 南中の太陽の仰角計算 ********/ $alpha_c = $a_c * sqrt( 1 - pow( $n_s, 2) * pow( $t_c, 2) ) + $n_s * $a_s * $t_c; $alpha = round( rad2deg( acos($alpha_c) ), 0 ); $e = 90 - $alpha; /******* レコード (表の1行分) 書き出し *******************************************************/ print " <tr> <td align=center>".$i."</td> <td align=center>".$am."</td> <td align=center>".$e."</td> </tr> "; } } } print " </table>