@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
AIで潮汐計算の式をPHPのプログラムコードに直すとこうなる.
2024.11.07
おはようございます.AIで潮汐計算の式をPHPのプログラムコードに直すとこうなる.こうなったけどもこれがあっているかが分からないのは使う人の問題ですね(馬しかな自分).
PHPコードにpowやdeg2radいうものが存在している事すら知らなかったけども、AIを使用するとこんなことも可能になるのかと感慨深いですね.そして最終的には自分がある程度の知識が必要になるのだなぁって思います.AIが出力してきたコードや計算式が合っているかどうかを検証しなくてはならないので自分の知識もある程度必要になる.
やっぱ知識はないよりある方が良い.無くても良いけど貪欲に吸収する力は必要になりそうなそんな気がしてきました.
最後にAIが生成したコードを記載しておきます.※このコードは検証が必要です.間違っているという指摘はコメントか一言コメントご記載ください🙇♂️
<?php
// 潮汐力の計算
function calculateTidalForce($G, $M, $d, $a, $theta) {
// 水平成分
$fTh = 3/2 * ($G * $M / pow($d, 3)) * $a * pow(sin($theta), 2);
// 鉛直成分
$fTv = 3 * ($G * $M / pow($d, 3)) * $a * (pow(cos($theta), 2) - 1/3);
return ['horizontal' => $fTh, 'vertical' => $fTv];
}
// 潮汐ポテンシャルの計算
function calculateTidalPotential($G, $M, $d, $a, $theta) {
return 3/2 * ($G * $M / pow($d, 3)) * pow($a, 2) * (pow(cos($theta), 2) - 1/3);
}
// 平衡潮汐の計算
function calculateEquilibriumTide($g, $M, $E, $a, $c, $d, $theta) {
$D = 3/4 * $g * ($M / $E) * pow($a / $c, 3) * $a;
return 2 * $D * pow($c / $d, 3) * (pow(cos($theta), 2) - 1/3);
}
// 観測点での潮汐ポテンシャルの計算
function calculateObservationPointPotential($D, $c, $d, $phi, $delta, $T) {
$cosTheta = cos($phi) * cos($delta) * cos($T) + sin($phi) * sin($delta);
return $D * pow($c / $d, 3) * (
pow(cos($phi), 2) * pow(cos($delta), 2) * pow(cos($T), 2) +
pow(sin($phi), 2) * pow(sin($delta), 2) * cos($T) +
3 * (pow(sin($phi), 2) - 1/3) * (pow(sin($delta), 2) - 1/3)
);
}
// 使用例
$G = 6.674e-11; // 万有引力定数
$M = 7.34767309e22; // 月の質量
$E = 5.97219e24; // 地球の質量
$d = 384400000; // 地球と月の平均距離
$a = 6371000; // 地球の半径
$g = 9.81; // 重力加速度
$c = $d; // 地球と月の平均距離(簡略化のため同じ値を使用)
$theta = deg2rad(45); // 例として45度を使用
$phi = deg2rad(35); // 観測点の緯度(例:35度)
$delta = deg2rad(5); // 天体の赤緯(例:5度)
$T = deg2rad(30); // 時角(例:30度)
$tidalForce = calculateTidalForce($G, $M, $d, $a, $theta);
$tidalPotential = calculateTidalPotential($G, $M, $d, $a, $theta);
$equilibriumTide = calculateEquilibriumTide($g, $M, $E, $a, $c, $d, $theta);
$observationPointPotential = calculateObservationPointPotential($D, $c, $d, $phi, $delta, $T);
echo "Tidal Force (Horizontal): " . $tidalForce['horizontal'] . " N\n";
echo "Tidal Force (Vertical): " . $tidalForce['vertical'] . " N\n";
echo "Tidal Potential: " . $tidalPotential . " J/kg\n";
echo "Equilibrium Tide: " . $equilibriumTide . " m\n";
echo "Observation Point Potential: " . $observationPointPotential . " J/kg\n";
<?php
/**
* 時角を計算する
*
* @param int $year 年
* @param int $month 月
* @param int $day 日
* @param int $hour 時
* @param int $minute 分
* @param int $second 秒
* @param float $longitude 経度(東経は正、西経は負)
* @return float 時角(度数法)
*/
function calculateHourAngle($year, $month, $day, $hour, $minute, $second, $longitude) {
// 修正ユリウス日を計算
$mjd = calculateModifiedJulianDate($year, $month, $day, $hour, $minute, $second);
// グリニッジ恒星時を計算
$gst = calculateGreenwichSiderealTime($mjd);
// 地方恒星時を計算
$lst = calculateLocalSiderealTime($gst, $longitude);
// 時角を計算(0から360度の範囲に正規化)
$hourAngle = fmod($lst * 15, 360);
if ($hourAngle < 0) {
$hourAngle += 360;
}
return $hourAngle;
}
/**
* 修正ユリウス日を計算する
*/
function calculateModifiedJulianDate($y, $m, $d, $h, $mi, $s) {
if ($m <= 2) {
$y -= 1;
$m += 12;
}
$ret = (int)(365.25 * $y) + (int)($y / 400) - (int)($y / 100);
$ret += (int)(30.59 * ($m - 2)) + $d - 678912;
$ret += $h / 24 + $mi / 1440 + $s / 86400 - 0.375;
return $ret;
}
/**
* グリニッジ恒星時を計算する
*/
function calculateGreenwichSiderealTime($mjd) {
$t = ($mjd - 51544.5) / 36525;
$gst = 280.46061837 + 360.98564736629 * ($mjd - 51544.5) + 0.000387933 * $t * $t - $t * $t * $t / 38710000;
return fmod($gst, 360) / 15; // 時間単位に変換
}
/**
* 地方恒星時を計算する
*/
function calculateLocalSiderealTime($gst, $longitude) {
$lst = $gst + $longitude / 15;
if ($lst < 0) {
$lst += 24;
} elseif ($lst >= 24) {
$lst -= 24;
}
return $lst;
}
// 使用例
$year = 2024;
$month = 9;
$day = 11;
$hour = 21;
$minute = 7;
$second = 0;
$longitude = 139.75; // 東京の経度
$hourAngle = calculateHourAngle($year, $month, $day, $hour, $minute, $second, $longitude);
echo "時角: " . $hourAngle . "度";
明日へ続く
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$longitude, $lst, $phi, calculateEquilibriumTide, calculateGreenwichSiderealTime, calculateHourAngle, calculateLocalSiderealTime, calculateModifiedJulianDate, calculateObservationPointPotential, calculateTidalForce, calculateTidalPotential, cos, echo, elseif, fmod, Horizontal, pOW, quot, Vertical, 西経,
任意のディレクトリ連番を調べてURLを返却する.
2024.06.21
おはようございます、任意のディレクトリ連番を調べてURLを返却するPHP言語のコードです.このコードは昨日に書いた記事を読んで頂けたら分かると思いますが、ある配下のディレクトリ名が連番で名前付けしていたら、その連番のディレクトリを確認してindex.phpかindex.htmlが存在したらindexページを返却し無ければ、そのディレクトリ内にあるphpファイルのリンクアドレスを返却するようになっています.
<?php
class lists
{
public $toolDir;
public $toolUrl;
public function __construct($toolDir = __DIR__ . '/../', $toolUrl = 'https://zip358.com/tool/')
{
$this->toolDir = $toolDir;
$this->toolUrl = $toolUrl;
}
public function getList($dir = 'demo', $max = 999)
{
$response = [];
for ($i = 0; $i <= $max; $i++) {
$demoDir = $dir . ($i ?: '');
if (file_exists($this->toolDir . $demoDir . '/index.php')) {
$response[] = $this->toolUrl . $demoDir . '/';
} elseif (file_exists($this->toolDir . $demoDir . '/index.html')) {
$response[] = $this->toolUrl . $demoDir . '/';
} else {
$filelist = scandir($this->toolDir . $demoDir, 1);
foreach ($filelist as $file) {
$fileInfo = pathinfo($file);
$basename = $fileInfo["basename"];
$filename = $fileInfo["filename"];
if ($basename != $filename && $fileInfo["extension"] == "php") {
$response[] = $this->toolUrl . $demoDir . '/' . $filename . '.php';
}
}
}
}
return $response;
}
}
<?php
require 'lists.php';
$res = (new lists())->getList();
使用する場合はindex.php側を呼び出してご自身のディレクトリ構造とURLなどに合わしてご使用ください.尚、変数の$resには配列が返却されます.
明日へ続く.
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$basename, construct, DIR, else, elseif, file_exists, filename, foreach, getList, gt, lt, pathinfo, php require, public, res, response, return, toolUrl, 連番, 配下,
PHP失恋再帰処理:会いたい、会いたい、会えない(´Д`)。
2016.06.02
PHP失恋再帰処理:会いたい、会いたい、会えない(´Д`)。
こんな未練タラタラしてはいけません。
とくに男は未練タラタラになりやすいので・・・・。
トイウコトデ
このループを抜け出すには7にならないと
抜けだせません。
なので、このプログラムには欠陥があります。
値を変えると無限ループに陥るのです(´Д`)(´Д`)えぇぇ?
<?php $n["0"] = "会いたい"; $n["1"] = "会いたい"; $n["2"] = "会いたい"; $n["3"] = "会いたい"; $n["4"] = "会いたい"; $n["5"] = "会いたい"; $n["6"] = "会えない"; $str = aenai($n); echo "(´Д`)デブオなんかにあうかよ!"."\n"; print_r($str); function aenai($n=array(),$no=0,$str_n=array(),$str_no=0){ if(mb_strlen($n[$no])<16 && (mb_strlen($n[$no]) + mb_strlen($str_n[$str_no])<16) && $no <7){ $str_n[$str_no] .= $n[$no]; echo "A:str_n_mozi:".mb_strlen($str_n[$str_no])."str_no:".$str_no.$str_n[$str_no]."\n"; $no++; }elseif(mb_strlen($n[$no])<16 && (mb_strlen($n[$no]) + mb_strlen($str_n[++$str_no])<16) && $no <7){ $str_n[$str_no] .= $n[$no]; echo "B:str_n_mozi:".mb_strlen($str_n[$str_no])."str_no:".$str_no.$str_n[$str_no]."\n"; $no++; } if($no==7){ echo "(´Д`)このデブが"; print_r($str_n); return $str_n; }else{ return aenai($n,$no,$str_n,$str_no); } }
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$str_no, AM, array, echo, elseif, function aenai, mb_strlen, no, PHP失恋再帰処理, print_r, return aenai, str_n_mozi, デブオ, トイウコトデ, プログラム, ループ, 欠陥, 無限ループ, 男,