Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

// Генерация сетки с общим количеством ячеек = p
p_positive = 0;
var gridRow = Math.ceil(Math.sqrt(p));
// Разбить описывающий квадрат на gridRow ячеек по горизонтали и столько же по вертикали
var cellWidth = (x2_ - x1_)/gridRow;
var cellHeight = (y2_ - y1_)/gridRow;
// точку будем ставить в центр каждой ячейки
for (var y_counter=0; y_counter<gridRow; y_counter++) {
var yCur = y1_ + y_counter * cellHeight + cellHeight/2;
for (var x_counter=0; x_counter<gridRow; x_counter++) {
var xCur = x1_ + x_counter * cellWidth + cellWidth/2;
var yes = false;
for(var j=0; j<circles.length; j++) {
if(!yes && (
(circles[j].x-circles[j].r) <= xCur &&
(circles[j].x+circles[j].r) >= xCur &&
(circles[j].y-circles[j].r) <= yCur &&
(circles[j].y+circles[j].r) >= yCur )
){
yes = true;
p_positive++;
}
}
}
}
// Генерация точек методом Монте-Карло
var p_positive = 0;
// генерируем p точек для определения площади фигуры
for(var i=0; i<p; i++){
var x_rand = Math.random()*(x2_-x1_)+x1_;
var y_rand = Math.random()*(y2_-y1_)+y1_;
var yes = false;
for(var j=0; j<circles.length; j++) {
if(!yes && (
(circles[j].x-circles[j].r) <= x_rand &&
(circles[j].x+circles[j].r) >= x_rand &&
(circles[j].y-circles[j].r) <= y_rand &&
(circles[j].y+circles[j].r) >= y_rand )
){
yes = true;
p_positive++;
}
}
}
<canvas>, в котором бы рисовались точно такие же окружности, а дальше просто считалось количество непрозрачных пикселей?
Расчет площади пересечения окружностей методом Монте-Карло