Existe la funcion pi() en PHP... pero jugando se me ocurrió sacarlo por mi cuenta y quería compartirlo con ustedes
<?php
// Un círculo es en realidad un polígono de infinitos lados, para deducir pi, lo que tenemos que hacer es tomar el períemtro de un polígono infinito:
function pi_calc(){
// Teniendo en cuenta que pi x diámetro da el perímetro del círculo. Para obtener pi, el diámetro debería ser 1
$d = 1;
// La cantidad de lados que tendrá el primer polígono será 4
$x = 4;
// Para sacar el perímetro necesitamos usar el teorema de pitágora: la raíz cuadrada de la suma de los catetos al cuadrado, dan la hipotenusa
// El prmer cateto es igual al radio
$cat1 = $d/2;
// El segundo cateto también
$cat2 = $d/2;
// Deducimos la hipotenusa, que dará el lado del polígono
$hip = sqrt(pow(($d/2),2)+pow(($d/2),2));
// Perímetro: lados x largo del lado(hipotenusa)
$p = $hip*$x;
// Ahora lo que vamos a hacer es aumentar la cantidad de lados infinitamente hasta llegar a un perímetro equivalente a pi, para ello tenemos que comparar el último príemtro con el antepenúltimo, si se corta el ciclo while es porque no hay mas resultados hacia el infinito(o la computadora o el largo de la hoja no lo pueden concebir)
while($p2 != $p){
// Seteamos el perímetro anterior para compararlo en el ciclo
$p2 = $p;
// Deducimos otro cateto que será el lado anterior del polígono dividio 2
$cat1_ = $hip/2;
// Esta medida será constante y corresponde al radio
$hip_ = $cat2;
// Ahora si, la distancia que necesitamos
$cat2_ = sqrt(pow($hip_,2)-pow($cat1_,2));
//-----------
// Ahora restamos el radio por la distancia que buscábamos y nos dará uno de los catetos que neceistamos
$cat1__ = ($d/2) - $cat2_;
// El otro cateto será la hipotenusa anterior
$cat2__ = $hip;
// Y finalmete deducimos la hipotenusa que será el largo del lado del nuevo polígono, esta vez, del doble de lados que el anterior
$hip__ = sqrt(pow(($cat1__),2)+pow(($cat2__/2),2));
// volvemos a setear los valores de las variables para volver a girar el ciclo while
$hip = $hip__;
$cat1 = $cat1__;
$cat2 = $cat2; // Es constante;
// Duplicamos la cantidad de lados
$x = $x*2;
// Deducimos el perímetro
$p = $hip*$x;
}
// Devolvemos el valor
return $p;
}
// EUREKA !!!
echo pi_calc(); //3.14159265359
//}
?>