public KMean(KMean obj)
 {
     this.Clusters.AddRange(obj.Clusters);
 }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Panel = Session["myObj"] as KMean;
            if (Session["update"].ToString() == ViewState["update"].ToString())
            {
                List<point> p = new List<point>();
                List<point> c = new List<point>();
                List<int[]> colors = new List<int[]>();

                Random r = new Random();
                point tmpPoint;    //to set points
                string rgb;     //to set colors

                for (int i = 0; i < int.Parse(TextBox1.Text); i++)
                {
                    //set N points
                    tmpPoint.x = r.Next(1, 600);
                    tmpPoint.y = r.Next(1, 600);

                    //change on .aspx file
                    points.InnerHtml += "<circle cx=" + tmpPoint.x.ToString() + " cy=" + tmpPoint.y.ToString() + " r='5'></circle>";

                    //add to tmp list --> List<point> p = new List<point>();
                    p.Add(tmpPoint);

                    // generate Centroid point
                    if (i < int.Parse(TextBox2.Text))
                    {
                        //set M centroids
                        tmpPoint.x = r.Next(1, 600);
                        tmpPoint.y = r.Next(1, 600);

                        int[] tmpcolor = new int[3];
                        tmpcolor[0] = r.Next(1, 255);
                        tmpcolor[1] = r.Next(1, 255);
                        tmpcolor[2] = r.Next(1, 255);

                        rgb = "fill:rgb(" + tmpcolor[0] + "," + tmpcolor[1] + "," + tmpcolor[2] + ");";  // choose randomly color for centroids

                        colors.Add(tmpcolor);
                        // change div on aspx file
                        centroids.InnerHtml += "<circle cx=" + tmpPoint.x.ToString() + " cy=" + tmpPoint.y.ToString() + " r='10.0' style=" + rgb + "></circle>";

                        //add to tmp list -->   List<point> c = new List<point>();
                        c.Add(tmpPoint);
                    }

                }
                Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());

                Panel.fillClusters(p, c, colors);
                Session["myObj"] = Panel;

            }

            else
            {
                points.InnerHtml = "";
                centroids.InnerHtml = "";
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Panel = Session["myObj"] as KMean;
            if (Session["update"].ToString() == ViewState["update"].ToString())
            {

                Panel.reCalculateCluster();

                centroids.InnerHtml = "";
                points.InnerHtml = "";
                //redraw new centroids
                for (int i = 0; i < Panel.Clusters.Count; i++)
                {
                    string rgb = "fill:rgb(" + Panel.Clusters[i].color[0] + "," + Panel.Clusters[i].color[1] + "," + Panel.Clusters[i].color[2] + ");";  // choose randomly color for centroids
                    centroids.InnerHtml += "<circle cx=" + Panel.Clusters[i].p.x.ToString() + " cy=" + Panel.Clusters[i].p.y.ToString() + " r='10.0' style=" + rgb + "></circle>";

                    //color every point depends on its cluster color
                    for (int j = 0; j < Panel.Clusters[i].clusterPoints.Count; j++)
                    {
                        points.InnerHtml += "<circle cx=" + Panel.Clusters[i].clusterPoints[j].x.ToString() + " cy=" + Panel.Clusters[i].clusterPoints[j].y.ToString() + " r='5.0' style=" + rgb + "></circle>";
                    }
                }

            }
            else
            {
                Response.Write("<script>alert('Enter Points and Centroids First !!')</script>");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) // If page loads for first time
            {
                // Assign the Session["update"] with unique value
                Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());
                Session["myObj"] = new KMean();
                //page load code

            }
        }