C#:如何在C#中获取图表中两个系列之间的区域?

时间:2016-06-16 03:51:24

标签: c# charts area

我在c#的图表中有两个系列。我只想获得这两个系列之间的区域。这些系列相互连接。

我附上了图表图片。

enter image description here

这里有两个系列。例如Series1和Series2。如果series2越过系列1,则不考虑该区域。只有当series2低于series1时,此区域才需要计算。

2 个答案:

答案 0 :(得分:3)

static void Main(string[] args)
{
    List<Point> Points1 = new List<Point>();
    //Points1.Add(); assign your series points

    List<Point> Points2 = new List<Point>();
    //Points2.Add(); assign your series points

    Series Series1 = new Series(Points1);
    Series Series2 = new Series(Points2);

    var betweenArea = Math.Abs(Series1.Area() - Series2.Area());
}

public class Series
{

    List<Point> Points { get; set; }

    public Series(List<Point> points)
    {
        Points = points;
    }

    public double Area()
    {
        double Area = 0;
        var points = Points.OrderBy(P => P.X).ToList();
        for (int i = 0; i < points.Count - 1; i++)
        {
            Point Point1;
            Point Point2;
            if (points[i].Y < points[i + 1].Y)
            {
                Point1 = points[i];
                Point2 = points[i + 1];
            }
            else
             {
                 Point1 = points[i + 1];
                 Point2 = points[i];
             }

             Area += Point1.Y * (Math.Abs(Point1.X - Point2.X));

            Area += ((Math.Abs(Point1.Y - Point2.Y)) * (Math.Abs(Point1.X - Point2.X)))/2;
        }

        return Area;
    }
}

public class Point
{
    public double X { get; set; }
    public double Y { get; set; }
}

答案 1 :(得分:2)

您可以为区域see here着色,但计算其区域是数学问题。

我将如何做到这一点:

  • 首先为每个系列中的每个点添加/插入正上方/下方的点。
  • 现在你有一系列具有平行垂直边的多边形。
  • 每个区域可以分为三个部分:中心矩形和顶部和底部三角形
  • 宽度和高度是knonw,因此矩形的区域为w*h,三角形的区域为w*h/2
  • 通过插入相应系列中的前一个和后一个点来找到相应的点。

只是一些简单的步骤。更难的部分是跟踪起点和终点以及空和特殊情况。

  • 正常情况下是绿色/洋红色。
  • 如果一方为零则没有问题
  • 如果series1中的某个点高于或低于series2中的下一个点,则需要再添加两个点并对倾斜的多边形进行计算。请参阅下面的橙色/青色线!

enter image description here