手把手教你写C#窗体程序,画出泊松分布、正态分布曲线 函数图像

想要源码的童鞋请在下方留言~~
以泊松分布,产生50个随机数,画函数图像为例进行详细描述:
1. 首先打开你的vs2010,建立项目,选择窗体程序,点击确定

新建C#窗体程序

  1. 将需要的控件从工具箱中拖到窗体,如图所示,以泊松分布为例:

拖控件,啦啦啦

3.如果没找到工具箱,点击顶部菜单选项 视图->工具箱,工具箱就找到了,如图所示:

工具箱在这里

  1. 记住:在Form1.cs中写代码,不要乱写代码哈

不要乱写代码哈

4.定义了一个全局数组,用来存放由分布产生的50个随机数;
int[] iArray = new int[50];

5.自定义了个函数为 public void receiveData(),获取到输入的分布参数λ,并产生50个随机数,存到数组iArray中,代码如下:

public  void receiveData()
        {
            string str_temp = textBox1.Text;
            double para_temp = Convert.ToDouble(str_temp);

            //string[,] coordinate = new string[100,50];

            //将50个点对应的值存在数组里面
            //int[] iArray = new int[50];

            for (int i = 0; i < 50; i++)
            {
               int  time = (int)possion(para_temp);
               iArray[i] = time;
               //System.Threading.Thread.Sleep(time);
               //System.Console.Write("等待" + possion(para_temp)+"秒!\n");
            }
            //求出数组中的最大值,根据最大值确定y轴,确定分多少个段
            int maxIndex = 0;
            for (int j = 0; j < 50; j++)
            {
                if (iArray[maxIndex] < iArray[j])
                {
                    maxIndex = j;
                }
            }
        }
        public static double possion(double lam)
        {
            int k = 0;
            //利用GUID产生随机数的种子,模拟真正的随机
            //Random time = new Random(Guid.NewGuid().GetHashCode());
            double p = 1.0;
            double L = Math.Exp(-lam); //exp(-Lambda)是接近0的小数
            while (p >= L)
            {
                //double u = time.NextDouble();
                double u = p_random().NextDouble();
                p *= u;
                k++;
            }
            return k - 1;
        }
        //利用GUID产生随机数的种子,模拟真正的随机
        public static Random p_random()
        {
            Random rand = new Random(Guid.NewGuid().GetHashCode());

            return rand;
        }

6.对点击按钮添加事件,即调用receiveData()

        private void button1_Click(object sender, EventArgs e)
        {
            receiveData();
        }

7.随后,开始画函数图像了,对控件pictureBox添加事件,即点击pictureBox区域,函数图像立即呈现,具体代码如下:

 private void pictureBox1_Click_1(object sender, EventArgs e)
        {
            pictureBox1.Refresh(); 
            Graphics g = pictureBox1.CreateGraphics();
            try
            {
                for (int i = 0; i < 51; i ++)
                {
                    g.FillEllipse(Brushes.Red, new Rectangle(i * 10, iArray[i] * 10, 3, 3));
                    Pen think_pen = new Pen(Color.Black, 1);
                    g.DrawLine(think_pen, i * 10 , iArray[i] * 10, (i+1) * 10, iArray[i + 1] * 10);

                    label3.Text = "请点击下方空白区域查看泊松分布函数图像↓";
                   //label2.Text = Convert.ToString(iArray[i]);
                }
            }
            catch (Exception f)
            {

            }

        }

8.对退出按钮添加点击事件

 private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

10.ok,大功告成,有没有觉得很简单!

图像在此!

正态分布和泊松分布类似,在此就不多赘述了,想要正态分布源码的童鞋,可以在下方留言呦~~

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页