湖南某高校一根小稻草 2019-06-04 15:05 采纳率: 100%
浏览 1169
已结题

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

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

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

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

  • 写回答

1条回答

  • threenewbee 2019-06-04 18:20
    关注
    // 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 . . .

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀