-
Notifications
You must be signed in to change notification settings - Fork 0
/
PointsGenerator.cpp
29 lines (27 loc) · 1.04 KB
/
PointsGenerator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Реализация класса, генериющего нормально распределенные точки на плоскости
#include <cmath>
#include <random>
#include "PointsGenerator.hpp"
PointsGenerator::PointsGenerator(int n) {
generate_points(n);
}
void PointsGenerator::generate_points(int n) {
points = {};
// Создаем генератор случайных чисел
std::random_device rd;
std::mt19937_64 gen(rd());
std::uniform_real_distribution<double> dis(0.0, 1.0);
// Пользуемся преобразование Бокса-Мюллера
for(int i = 0; i < n; ++i) {
double radius = dis(gen);
double phi = dis(gen);
double temp_1 = std::cos(2 * M_PI * phi);
double temp_2 = sqrt(-2 * std::log(radius));
double x = temp_1 * temp_2;
double y = sqrt(1 - temp_1 * temp_1) * temp_2;
points.emplace_back(std::make_pair(x, y));
}
}
std::vector<std::pair<double, double>> PointsGenerator::get_points() const {
return points;
}