Я получил задание на поступление на программу «Информатика», где я должен подойти к PI. Чтобы вычислить число пи, мне нужно сделать соотношение между площадью квадрата, круга, общим количеством точек и количеством точек внутри круга.
Формула площади круга
радиус^2 * π или диаметр^2 * π/4
Формула площади квадрата
2*радиус^2 или диаметр^2
I had the formule ( M / N ) * 4
Вот как я это понял:
(d ^ 2 * π / 4) : d ^ 2 = M : N
π / 4 = М / Н
π = (М/Н) * 4
the problem is that I don't get pi as output, but about 14.2..
Кто-нибудь знает, что я делаю неправильно?
Итак, в Processing я написал следующий код
float N = 0;
float M = 0;
void setup()
{
size(400, 400);
frameRate(90000);
background(255, 255, 255);
ellipse(200,200,400,400);
}
void draw()
{
/* Random x- en y-coordinate. */
float x = random(0,400);
float dx= (x-200);
float y = random(0,400);
float dy = (y-200);
float d = (float)(Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2)));
/*Red in the circle*/
if (d <= 200 ){
stroke(255,0,0);
M++;
}
else{
stroke(0,255,0); /*green around the circle*/
N++;
}
point(x,y);
println
((M/N)*4);
}
Ваша формула в порядке, но вопреки определению N, ваша N в настоящее время считает только очки не в круге...
Вы получите лучшие результаты, если будете использовать double, а не float. Не используйте pow() для возведения числа в квадрат — просто используйте x*x.




Точки, попадающие внутрь круга, также попадают в квадрат, так как круг лежит внутри квадрата.
Вам нужно сделать 4*M/(M+N).
большое спасибо, но я не совсем понимаю, как вы придумали эту формулу
@LizaDarwesh Точки в прямоугольнике (N + M) - Итак, (d^2 * π / 4) : d^2 = M : (N+M).
В настоящее время вы увеличиваете N только тогда, когда точка не попадает в круг. Таким образом, N не представляет общее количество точек. Альтернативой, которую вы могли бы использовать, является сохранение исходной формулы и увеличение N независимо от того, где она находится; вне предложения else.
Что такое «вступительное задание»?