Пример #1
0
        private void DrawPoints()
        {
            System.Drawing.Graphics objGraph = this.CitiesPanel.CreateGraphics();

            for (int i = 0; i < Points.Count; i++)
            {
                PointF newPoint = new PointF(((Point)Points[i]).x, ((Point)Points[i]).y);
                //按照角度生成voronoi图+话务量分布图
                HashSet <PointF> hs_voronoiPoint = new HashSet <PointF>();
                hs_voronoiPoint.Add(AngleToPoint(newPoint, 360 - 30, 1));
                hs_voronoiPoint.Add(AngleToPoint(newPoint, 360 - 30 - 120, 1));
                hs_voronoiPoint.Add(AngleToPoint(newPoint, 360 - 30 - 240, 1));
                foreach (PointF voronoiPoint in hs_voronoiPoint)
                {
                    points.Add(new Vector(voronoiPoint.X, voronoiPoint.Y));
                    temps.Add(new TemperatureLocation(voronoiPoint.X, voronoiPoint.Y, i));
                }
            }
            //话务量小区分割图
            VoronoiTemparature vt = new VoronoiTemparature(temps);

            vt.ColdColor = Color.Orange;
            vt.HotColor  = Color.Red;
            Bitmap bmp = vt.GetMapTemperature(this.Width, this.Height);

            objGraph.DrawImage(bmp, new PointF(0, 0));
            //覆盖小区分割图
            bmp = Fortune.GetVoronoyMap(this.Width, this.Height, points);

            objGraph.DrawImage(bmp, new PointF(0, 0));

            for (int i = 0; i < Points.Count; i++)
            {
                PointF newPoint = new PointF(((Point)Points[i]).x, ((Point)Points[i]).y);
                objGraph.DrawEllipse(new System.Drawing.Pen(System.Drawing.Color.Black), newPoint.X, newPoint.Y, 6, 6);
                //按照角度生成  直线+箭头
                HashSet <PointF> hs_endPoint = new HashSet <PointF>();
                Pen p = new Pen(Color.Blue, 3);
                p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                hs_endPoint.Add(AngleToPoint(newPoint, 360 - 30, 20));
                hs_endPoint.Add(AngleToPoint(newPoint, 360 - 30 - 120, 20));
                hs_endPoint.Add(AngleToPoint(newPoint, 360 - 30 - 240, 20));
                //小区覆盖方向角
                foreach (PointF endPoint in hs_endPoint)
                {
                    objGraph.DrawLine(p, newPoint, endPoint);
                }
                //写上标识
                objGraph.DrawString((i + 1).ToString(),
                                    new System.Drawing.Font("Arial", 10), System.Drawing.Brushes.Brown, newPoint.X + 8, newPoint.Y);
            }
        }
Пример #2
0
        private void rbtVoronoi_CheckedChanged(object sender, EventArgs e)
        {
            Bitmap bmp = Fortune.GetVoronoyMap(640, 480, points);

            pbxVisialization.Image = bmp;
        }