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); }