Заполнение пространства цветом между точками на графике C# - PullRequest
2 голосов
/ 25 января 2020

Я ищу решение, чтобы заполнить пространство между точками, как видно на изображении. Я использую функцию диаграммы в c#. net для размещения точек, но она окрашивает пространство от 3 до 5, а не от 3 до 4. Возможно ли закрашивать пространство только внутри созданной фигуры ? выходное изображение

Вот пример кода, который я использую для создания диаграммы и раскраски пространства:

private void UpdateChart(List<Point> curve)
    {
        int y = 0;    
        var list = curve.ToList();  

        int count = list.Count - 2;

        for (int i = 0; i < count; i++) 
        {
            int x0 = list[i + 0].X;
            int y0 = list[i + 0].Y;
            int x1 = list[i + 1].X;
            int y1 = list[i + 1].Y;

            if ((y0 > y && y1 < y) || (y0 < y && y1 > y))
            {
                int x = (y - y0) * (x1 - x0) / (y1 - y0) + x0;

                list.Add(new Point(x, y));
            }
        }

        list.Sort((a, b) => Math.Sign(a.X - b.X));

        chart1.Series[0].Points.Clear();
        chart1.Series[0].ChartType = SeriesChartType.Range;
        chart1.Series[0].Color = Color.Red;
        chart1.Series[0].BorderColor = Color.Cyan;
        chart1.ChartAreas[0].AxisX.Minimum = 0;
        chart1.ChartAreas[0].AxisX.Interval = 1;

        for (int i = 0; i < list.Count; i++)
        {
            double xx = list[i].X;
            double yy = list[i].Y;
            if (yy > y)
            {
                chart1.Series[0].Points.AddXY(xx, y, yy);
            }
            else
            {
                chart1.Series[0].Points.AddXY(xx, yy, yy);
            }
        }

        chart1.ChartAreas[0].AxisY.StripLines.Add(new StripLine { IntervalOffset = y, Interval = 0, BorderColor = Color.Orange, BorderWidth = 2 });

    }
    private void CreateChart()
    {

        chart1.Series.Clear();
        var series = new Series("Pierwszy Zbiór");
        var series1 = new Series("Drugi Zbiór");
        var series2 = new Series("Wynik");
        series.ChartType = SeriesChartType.Line;
        series1.ChartType = SeriesChartType.Line;
        series2.ChartType = SeriesChartType.Line;
        List<Point> points = new List<Point>();

        points.Add(new Point(Convert.ToInt32(textBox1.Text), 0));
        points.Add(new Point(Convert.ToInt32(textBox2.Text), 1));
        points.Add(new Point(Convert.ToInt32(textBox3.Text), 1));
        points.Add(new Point(Convert.ToInt32(textBox4.Text), 0));
        int licznik = 0;
        foreach (Point element in points)
        {
            series.Points.AddXY(element.X, element.Y);
            licznik++;
        }
        chart1.Series.Add(series);
        List<Point> wynik = new List<Point>();
        UpdateChart(points);

    }
...