0

在 Visual Studio 2010 IDE 中使用 C# 中的 Windows 窗体上的图表控件。

我正在创建一个绘制随机点的图表。生成点后,我为图表中的每个点运行一个循环,查看所有其他点坐标。在那个循环中,我计算从父点到它的邻居的距离。如果距离 <= 我指定的某个距离,我希望绘制一条线来显示两者之间的连接。我遇到的问题实际上是画那条线。此外,我需要找到一种方法来走该图表中的最短路径。

所以这真的是两个问题: 1. 我如何在图表上画线?(当前的困境) 2. 如何走图找到最短路径?

这是我用来完成此操作的一些代码的片段,以及当前错误:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    public void createNodes(int x, int y, int Nodes, int dgNodes)
    {
        Random rdn = new Random();

        for (int i = 0; i < (Nodes - dgNodes); i++)
        {
            chtGraph.Series["Series1"].Points.AddXY
                        (rdn.Next(x), rdn.Next(y));
        }

        for (int i = 0; i <= dgNodes - 1; i++)
        {
            chtGraph.Series["Series2"].Points.AddXY
                        (rdn.Next(x), rdn.Next(y));
        }
    }

    public void buildGraph(int x, int y, int Nodes, int dgNodes)
    {
        //set the min/max axis on the chart
        chtGraph.ChartAreas["ChartArea1"].AxisX.Maximum = x;
        chtGraph.ChartAreas["ChartArea1"].AxisX.Minimum = 0;
        chtGraph.ChartAreas["ChartArea1"].AxisY.Maximum = y;
        chtGraph.ChartAreas["ChartArea1"].AxisY.Minimum = 0;
        chtGraph.ChartAreas["ChartArea1"].AxisX.Interval = x / 10;
        chtGraph.ChartAreas["ChartArea1"].AxisY.Interval = y / 10;

        chtGraph.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
        chtGraph.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;

        //build all the nodes
        createNodes(x, y, Nodes, dgNodes);
    }

    public void drawEdges(int intNumNodes, int intTransPower)
    {

        Pen pen = new Pen(Color.Black, 1);
        Graphics g = chtGraph.CreateGraphics();

        Point[] pts = new Point[intNumNodes];
        int i = 0;

        //Gather all the data generator data points into a point array
        foreach (DataPoint p in chtGraph.Series[0].Points)
        {
            Point point = new Point((int)p.XValue, (int)p.YValues[0]);
            pts[i] = point;
            i++;
        }

        //Gather all the non data generator into the same point array
        foreach (DataPoint p in chtGraph.Series[1].Points)
        {
            Point point = new Point((int)p.XValue, (int)p.YValues[0]);
            pts[i] = point;
            i++;
        }

        //loop through all the data points
        foreach (Point p in pts)
        {
            //examine all the other data points for each data point visited
            for (int j = 0; j < pts.Length; j++)
            {

                //if the distance from the parent node (p) to the neighbor node is less than the transmit power, then draw a line
                if (Math.Sqrt(Math.Pow((p.X - pts[j].X), 2) + Math.Pow((p.Y - pts[j].Y), 2)) <= intTransPower)
                {
                    //gr.DrawLine(pen, p, pts[j]);
                    //gr.Graphics.DrawLine(pen, p.X, p.Y, pts[j].X, pts[j].Y);

                }
            }
        }
    }

    private void btnExecute_Click(object sender, EventArgs e)
    {
        if (txtDG.Text == "" || txtNodes.Text == "" || txtStorage.Text == "" || txtTransPower.Text == ""
            || txtXAxis.Text == "" || txtXAxis.Text == "")
        {
            lblError.Text = "Please enter in all inputs!";
            lblError.Visible = true;
            return;
        }
        //create variables for use through program

        int intTransPower = Convert.ToInt32(txtTransPower.Text);
        int intXAxis = Convert.ToInt32(txtXAxis.Text);
        int intYAxis = Convert.ToInt32(txtYAxis.Text);
        int intNum_DG = Convert.ToInt32(txtDG.Text);
        int intNumNodes = Convert.ToInt32(txtNodes.Text);
        int intStorage = Convert.ToInt32(txtStorage.Text);

        lblError.Visible = false;
        lblError.Text = "";

        if (txtDG.Text == "" || txtNodes.Text == "" || txtStorage.Text == "" || txtTransPower.Text == "" 
            || txtXAxis.Text == "" || txtXAxis.Text == "")
        {
        lblError.Text = "Please enter in all inputs!";
        lblError.Visible = true;}

        chtGraph.Series["Series1"].Points.Clear();
        chtGraph.Series["Series2"].Points.Clear();

        buildGraph(intXAxis, intYAxis, intNumNodes, intNum_DG);

        drawEdges(intNumNodes, intTransPower);
    }

}

错误:错误 1 ​​类型“System.Windows.Forms.DataVisualization.Charting.ChartGraphics”没有定义构造函数

4

1 回答 1

1

问题评论中描述的使用事件。

于 2012-10-18T02:27:58.743 回答