Каждый год 14 марта (3.14) математики и программисты по всему миру отмечают день числа π. Традиция началась в 1988 году в музее науки Сан-Франциско — физик Ларри Шоу устроил парад вокруг круглого стола и угощал всех пирогами. Сейчас это неофициальный праздник всех кто любит числа.
Задачка в честь дня: как вычислить π не зная никаких формул — только с помощью случайных точек?
Берём квадрат 2×2. Вписываем в него круг радиуса 1. Бросаем случайные точки. Считаем сколько попало внутрь круга. Отношение попавших к общему числу точек стремится к π/4. Умножаем на 4 — получаем π.
float EstimatePI(int samples)
{
int inside = 0;
for (int i = 0; i < samples; i++)
{
float x = Random.Range(-1f, 1f);
float y = Random.Range(-1f, 1f);
if (x * x + y * y <= 1f) inside++;
}
return 4f * inside / samples;
}
Почему это работает: площадь круга = π·r², площадь квадрата = 4·r². При r=1 отношение = π/4. Случайные точки распределяются равномерно, значит их соотношение повторяет соотношение площадей.
При 1 000 сэмплов получаем ~3.1х. При миллионе — ~3.141х. Сходится медленно, зато наглядно.
Это метод Монте-Карло. Именно он лежит в основе глобального освещения в path tracing — каждый световой луч это случайная выборка, накапливаете достаточно и получаете физически корректную картинку.
С праздником, 3.14 🎉
#математика #шейдеры
