C#:如何在C#中获取图表中两个系列之间的面积?
我在c#的图表中有两个系列。我只想得到这两个系列之间的面积。这些系列是相互连接的 我已附上图表图像 这里有两个系列。例如,系列1和系列2。如果序列2跨越级数1,则该区域将不被考虑。仅当series2低于series1时,此区域仅需计算。C#:如何在C#中获取图表中两个系列之间的面积?,c#,charts,area,C#,Charts,Area,我在c#的图表中有两个系列。我只想得到这两个系列之间的面积。这些系列是相互连接的 我已附上图表图像 这里有两个系列。例如,系列1和系列2。如果序列2跨越级数1,则该区域将不被考虑。仅当series2低于series1时,此区域仅需计算。静态void Main(字符串[]args) static void Main(string[] args) { List<Point> Points1 = new List<Point>(); //Points1.Add
静态void Main(字符串[]args)
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=新列表();
//点1.Add();指定系列点
列表点2=新列表();
//Points2.Add();指定系列点
系列系列1=新系列(点1);
系列2=新系列(点2);
var betweenArea=Math.Abs(Series1.Area()-Series2.Area());
}
公开课系列
{
列表点{get;set;}
公共系列(列表点)
{
点数=点数;
}
公共双区()
{
双面积=0;
var points=points.OrderBy(P=>P.X.ToList();
对于(int i=0;i
你可以给面积上色,但计算面积是一个数学问题
我会这样做:
- 首先,对于每个系列中的每个点,在其正上方/正下方添加/插入点李>
- 现在有了一系列具有平行垂直边的多边形
- 每个区域可以分成三部分:中心矩形和顶部和底部三角形
- 宽度和高度为KNOW,因此矩形区域为
,三角形区域为w*h
w*h/2
- 通过对相应序列中的上一个点和下一个点进行插值,可以找到相应的点
- 正常情况下,下图为绿色/洋红色
- 如果一侧为零,则没有问题
- 如果系列1中的一个点高于或低于系列2中的下一个点,则需要再添加两个点,并在倾斜多边形上进行计算。请参见下面的橙色/青色线条李>
我不知道是否有一种内置的方法可以做到这一点,但计算两个系列的面积然后取其差值非常简单。如何计算单个系列的面积?每个线段都是梯形(或矩形+三角形)。把每个线段的面积加起来,就得到了这个系列的总面积。你可以给面积上色,但是计算它的面积是一个数学问题。啊,这样简单多了!我正在尝试这个代码。但是我在这一行“var points=points.OrderBy(P=>P.X).ToList();”中得到了一条错误消息“Value cannot be null”:公共部分类Form1:Form{public Form1(){InitializeComponent();}Series Series1=new Series();Series Series2=new Series();private void button1\u单击(object sender,EventArgs e){var betweenArea=Math.Abs(Series1.Area()-Series2.Area());}私有无效按钮2(object sender,EventArgs e){chart1.Series[“Series1”].ChartType=serieChartChartType.Line;chart1.Series1[“Series1”].MarkerStyle=MarkerStyle.Circle;chart1.Series[“Series1”]。Color=Color.Blue;chart1.Series2[“Series2”]。ChartType=SeriesChartType.Line;chart1.Series2[“Series2”]。MarkerStyle=MarkerStyle.Circle;chart1.Series2[“Series2”]。Color=Color.Red;chart1.Series1[“Series1”]。Points.AddXY(3,4);chart1.Series[“Series1”]Points.AddXY(5,4);chart1.Series[“Series2”]Points.AddXY(3,4);chart1.Series[“Series2”]Points.AddXY(3,2);chart1.Series[“Series2”]Points.AddXY(5,2);chart1.Series[“Series2”]Points.AddXY(5,4);}@rakib我是在控制台应用程序中写的,但主要是代码,你们可以复制粘贴到任何你们想要的地方