阴影的面积——C++程序,C++程序

图片说明
使用C++并采用蒙特卡洛方法求图1中阴影部分的面积
蒙特卡洛方法举例:用蒙特卡罗方法计算圆周率π。
1. 正方形内部有一个相切的圆,如图2所示。

图2 与圆型相切的正方形
2. 圆形的面积与正方形的面积之比是π/4,面积之比如式(1)。
(1)
3. 现在,在这个正方形内部,随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离,从而判断是否落在圆的内部,如图3所示。

图3 随机产生正方形内部的点
4. 如果这些点均匀分布,那么圆内的点应该占到所有点的 π/4,因此将这个比值乘以4,就是π的值。通过随机模拟30000个点,π的估算值与真实值相差0.07%。

// Q764555.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <math.h>
#include <time.h>

using namespace std;

int inshader(float x, float y)
{
    if (x < 5) return 0;
    if (sqrt((x - 5) * (x - 5) + (y - 5) * (y - 5)) < 5) return 0;
    if (sqrt((x - 15) * (x - 15) + (y - 5) * (y - 5)) < 5) return 0;
    if (x * 0.5 + y < 10) return 0;
    return 1;
}

int main()
{
    int N = 10000;
    srand((unsigned)time(NULL));
    int c = 0;
    for (int i = 0; i < N; i++)
    {
        float x = rand() / (float)(RAND_MAX);
        float y = rand() / (float)(RAND_MAX);
        x *= 20;
        y *= 10;
        if (inshader(x, y)) c++;
    }
    printf("结果 %lf", 10.0 * 20 * c / (double)N);
}


结果 19.900000
Press any key to close this window . . .