Existe uma técnica bem legal de se estimar o valor da constante π usando o quadrado e círculo abaixo:
O valor do raio do círculo é 1. Assim a área do círculo é π * r ^ 2 = π * (1 * 1) = π.
E a área do quadrado é :2 ^ 2 = 2 * 2 = 4. Só lembrando que estou usando o símbolo ^ para representar a exponenciação.
E agora nós selecionamos milhares de pontos dentro do quadrado. Para uma boa aproximação devemos fazer isso milhões de vezes. Uma vez isso feito você pode usar a seguinte fórmula para encontrar o valor de π:
π/4 = número de pontos dentro do círculo / número total de pontos
modificando a fórmula para encontrar o valor de π:
π = (número de pontos dentro do círculo * 4) / número total de pontos
Considerando-se que para obtermos um bom resultado devemos escolher milhões de pontos, seria muito demorado e entediante fazer este processo manualmente, portanto, nada melhor do que usarmos um computador para isso. E o programa em PHP abaixo faz exatamente isso:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//estimating pi using a square, a circle and probability | |
//better explanation at http://www.businessinsider.com/the-most-controversial-math-problems-2013-3#-46 | |
const MAX_POINTS = 5000000; | |
function random_between_0_and_2() { | |
return (rand() / getrandmax()) * 2.0; | |
} | |
function seed_random() { | |
srand(); | |
} | |
function prepare_to_calc_hypotenuse($number) { | |
return ($number < 1.0) ? 1 - $number : $number - 1; | |
} | |
function calc_pi($points_within_circle, $total_number_of_points) { | |
return ($points_within_circle * 4.0) / $total_number_of_points; | |
} | |
//main program | |
seed_random(); | |
$points_within_circle = 0; | |
for($i = 0; $i < MAX_POINTS; $i++) { | |
//here we select a random point (x,y) within the square | |
$x = prepare_to_calc_hypotenuse(random_between_0_and_2()); | |
$y = prepare_to_calc_hypotenuse(random_between_0_and_2()); | |
//We use the hypotenuse to see if the point is within the circle or not | |
$hypotenuse = hypot($x, $y); | |
if ($hypotenuse < 1) { | |
$points_within_circle++; | |
} | |
} | |
$total_number_of_points = MAX_POINTS; | |
$pi = calc_pi($points_within_circle, $total_number_of_points); | |
echo "The approximation of pi is: $pi\n"; | |
return 0; |
Acredito que não seja difícil entender o código. Neste exemplo selecionamos 5 milhões de pontos dentro do quadrado. A inspiração veio deste link, lá você também pode encontrar uma boa explicação de como a técnica funciona. Ou você pode usar a constante M_PI da linguagem PHP.