高尔顿钉板是一个关于概率的模型,小球每次下落,将随机的向两边等概率的下落,当有大量的小球都滚下时,最终在钉板下面不同位置收集到的小球数量,将符合二项分布概率。

出于兴趣,在VC编译环境下,通过C++语言,模拟实现了高尔顿钉板的概率模型。本程序中定义了两个类,Ball和Holder类,Ball 是定义的小球类,Holder是定义的钉板类。Holder类主要负责画图显现模板框架,以及当一个小球滚到钉板下面容器位置,将小球放在合适的位置,并且当整个容器满的时候,即停止程序运行。小球类,定义了小球所处位置,并对小球进行作图。另外定义了根据传入的参数的移动规则,即,向左或者向右移动。另外定义了一个control函数,来控制holder和Ball类对象之间的交互,并且达到动态效果

图1   高尔顿钉板模型

图 2 程序运行图1                                                                          图3 程序运行图2

源代码:

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include "iostream"

class Ball
{
public:
Ball()
{
x=300;
y=40;
flag=1;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
int getFlag()
{
return flag;
}
int move(int i);
void fixed(int y1);
void draw()
{
solidcircle(x,y,20);
}

private:
int x,y;
int flag;
int level;
};

class Holder
{
public:
Holder()
{
for(int i=0;i<10;i++)
for(int j=0;j<7;j++)
a[i][j]=0;
full=0;
}
void draw();
int getfull()
{
return full;
}
void steady_one(Ball &b);
private:
int a[10][7];
int full;
};
void Holder::steady_one(Ball &b)
{
int i=0,temp=0;
if(b.getFlag()==0 && full==0)
{
temp = b.getX()-50-25;
temp=temp/50;
for(i=0;i<7;i++)
{
if(a[temp][i]==0)
{
a[temp][i]=1;
b.fixed(790-i*40-20);
break;
}

}
}
for(i=0;i<10;i++)
{
if(a[i][6]==1)
{
full=1;
break;
}
}
}
void Holder::draw()
{
int i=0,j=0,tempx=100,tempy=460;
line(50,790,550,790);
for(i=0;i<11;i++)
{
line(50+i*50,470,50+i*50,790);
}
for(i=9;i>0;i--,tempx += 25,tempy -= 50)
for(j=0;j<i;j++)
{
line(tempx+j*50,tempy,tempx+j*50,tempy+10);
}
line(275,60,275,20);
line(325,60,325,20);
line(275,60,50,470);
line(325,60,550,470);
}

int Ball::move(int i)
{
if(i==0)
{
if(flag==1)
{
x -= 25;
y += 50;
if(y>470)
{
flag=0;
}
}
}
else if(i==1)
{
if(flag==1)
{
x += 25;
y += 50;
if(y>470)
flag=0;
}
}
return 0;
}
void Ball::fixed(int y1)
{
y=y1;
}
int control()
{
Holder h1;
Ball b[50];
int num=1,i=0,temp,c[50];
for(i=0;i<50;i++)
c[i]=1;
while(1)
{
for(i=0;i<num;i++)
{
if(c[i]==1)
{
if(b[i].getFlag()==1)
{
temp=rand()%2;
b[i].move(temp);
}
else
{
h1.steady_one(b[i]);
num++;
c[i]=0;
}
}
}
h1.draw();
for(i=0;i<num;i++)
b[i].draw();
if(h1.getfull()==1)
break;
Sleep(300);
cleardevice();
}
return 0;
}
int main()
{
initgraph(600, 800);
setcolor(YELLOW);
setfillcolor(YELLOW);
control();
Sleep(10000);
return 0;
}

高尔顿钉板概率模型的实现相关推荐

  1. 高尔顿钉板实验是二项分布吗?

    高尔顿钉板实验是一种统计学实验,该实验用来研究给定数量的钉子在给定数量的板子上的平均钉子数量.在该实验中,每次抛钉子都是独立事件. 如果我们假设钉子落在板子上的概率是p,那么高尔顿钉板实验的结果可以用 ...

  2. matlab模拟高尔顿板实验,高尔顿钉板试验模拟

    public void galton(int sumOfGrid, int sumOfBall){ int[] grid = new int[sumOfGrid]; int number = 0; / ...

  3. Matlab实现Galton板的动画演示

    galton板又称为高尔顿钉板,室友生物统计学家Galton设计的. 该板即从入口处放进一个直径略小于两颗钉子之间的距离的小圆玻璃球,当小圆球向下降落过程中,碰到钉子后皆以1/2的概率向左或向右滚下, ...

  4. 《人工智能基础》——线性回归算法推导

    @EnzoReventon <人工智能基础> <人工智能基础>--线性回归算法推导 前面我们通过讲线性回归相信大家已经理解了回归任务是做什么的,但是还不知道具体怎么做,就是说怎 ...

  5. 这个机械装置真的能够分离彩色小球吗?

    在网络中有人展示了一段神奇的视频,显示一块高尔顿钉板(Galton board)可以自动按照颜色来分离小球.这段视频让每位观看者都大为困惑. ▲ 彩球自动分离装置 这种视频片段在网络上还是蛮流行的.它 ...

  6. 【数学基础】正态分布为什么如此常见?

    文章目录: 1 生活中的正态分布 2 名字由来 3  剖析细节 4 有偏分布 每个人都相信它(正态分布):实验工作者认为它是一个数学定理,数学研究者认为它是一个经验公式.----加布里埃尔·李普曼 本 ...

  7. matlab 功率谱密度 汉宁窗_如何理解随机振动的功率谱密度?

    一.随机信号和正太分布有什么关系? 二.时域.频域之间功率守恒? 三.自相关又是个什么玩意? 作为一个工程师,很多人对随机振动看着熟悉,却又实际陌生.熟悉是因为几乎每个产品在出厂时都要求要做随机振动试 ...

  8. 统计学-自然语言处理

    摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简化数据集的技术.主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征.常 ...

  9. 正态分布的前世今生(3)

    更多正态分布的介绍,参见 正态分布的前世今生(1) 正态分布的前世今生(2) >>>> 六.开疆扩土,正态分布的进一步发展 19世纪初,随着拉普拉斯中心极限定理的建立与高斯正态 ...

  10. matlab中表示拉普拉斯分布_神奇的正态分布

    在统计学中有各种各样的分布,称为统计分布,例如有离散型的伯努利分布.二项分布.超几何分布.几何分布.负二项分布.泊松分布,有连续型的均匀分布.指数分布.t分布.卡方分布.F分布.正态分布等等,其中正态 ...

最新文章

  1. 【CVPR 2022】只用一张图+相机走位,AI就能脑补周围环境
  2. NYOJ542-试制品
  3. codevs 1183 泥泞的道路 二分+SPFA最长路
  4. MySQL数据库基础(三)数据的导入导出、管理表记录、匹配条件
  5. CNN for Visual Recognition (assignment1_Q1)
  6. C++ STL容器vector篇(二) vector容器的构造函数与赋值操作
  7. Exchange的AutoDiscover服务
  8. java同类型同字段名称对象赋值
  9. 一条能让 iPhone 崩溃的 app 通知信息
  10. mysql 格式化 小数点后两位_MYSQL数据库mysql格式化小数保留小数点后两位(小数点格式化)...
  11. 自考运筹学第三章课后题
  12. ol3 Demo1 ----加载geoserver发布的地图数据
  13. IEEE Access投稿(Latex模板)——参考文献的生成
  14. 第一篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇主要介绍nes_main.h这个文件)
  15. flash插件android 6.0.1,flash player 10.1
  16. 面向对象(static关键字)
  17. quixel brige 导入UE4的基本设置
  18. 用AI来画一张lowpoly水滴吧
  19. QQ2009下载地址泄密,QQ2009最新版
  20. 上海财经大学计算机考研资料汇总

热门文章

  1. 即插即用!Batch Transformer
  2. 辉哥基于android S 分析过度动画以及窗口动画
  3. List集合分页操作
  4. 世界上手机号码最长和最短的国家
  5. 轻量级web api_API接口管理,这15种开源工具助你管理API
  6. CSDN第二篇文章· 爬虫突破封禁的6种常见方法
  7. iPhone - 不能读取文件 iTunes.Library.itl 因为它是由更高级别的 iTunes 所创建
  8. 图片怎样放大后不模糊?
  9. 开篇:内容提要 (《蓝调口琴指南》名作拙译)
  10. Pspice仿真实验-RC滤波器电路