示例#1
0
        private void voBtnInit_Click(object sender, EventArgs e)
        {
            MyPoint koPt;
            Random  koRand       = new Random( );
            int     kiDataLength = 5000; // number of data points
            double  kdRNum;

            this.voPList.Clear( );

            // create 4 distributions with different means and std devs
            double kdMeanX0 = 150, kdMeanX1 = 250, kdMeanX2 = 375, kdMeanX3 = 475;
            double kdMeanY0 = 175, kdMeanY1 = 250, kdMeanY2 = 350, kdMeanY3 = 450;
            double kdStdDevX0 = 240, kdStdDevX1 = 270, kdStdDevX2 = 220, kdStdDevX3 = 260;
            double kdStdDevY0 = 250, kdStdDevY1 = 240, kdStdDevY2 = 280, kdStdDevY3 = 245;
            int    kiIndex = 0;

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX0 / 2 + kdMeanX0;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX0 / 2 + kdMeanX0;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY0 / 2 + kdMeanY0;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY0 / 2 + kdMeanY0;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX1 / 2 + kdMeanX1;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX1 / 2 + kdMeanX1;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY1 / 2 + kdMeanY1;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY1 / 2 + kdMeanY1;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX2 / 2 + kdMeanX2;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX2 / 2 + kdMeanX2;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY2 / 2 + kdMeanY2;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY2 / 2 + kdMeanY2;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX3 / 2 + kdMeanX3;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX3 / 2 + kdMeanX3;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY3 / 2 + kdMeanY3;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY3 / 2 + kdMeanY3;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            MyImageProc.MDrawClusters(this.voPB, this.voPList, 1.0, 1);
        }