Найти в Дзене

Пи-день

🥧 Каждый год 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

Пи-день 🥧

Каждый год 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 🎉

#математика #шейдеры