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

阴影的面积——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 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题