/// <summary> /// 进行两个点集的相减运算 /// </summary> /// <param name="Peakdatalist1"></param> /// <param name="Peakdatalist2"></param> /// <returns></returns> public static List <PointF> Sub(List <PointF> Peakdatalist1, List <PointF> Peakdatalist2) { List <PointF> res = new List <PointF>(); PeakStr _peskstr = GetData(Peakdatalist1, Peakdatalist2); #region 进行插值计算 double[] _TY = InterPolator(_peskstr._SX, _peskstr._SY, _peskstr._TSX); #endregion #region 进行相加计算 for (int i = 0; i < _TY.Length; i++) { res.Add(new PointF((float)_peskstr._TSX[i], (float)(_peskstr._TSY[i] - _TY[i]))); } #endregion return(res); }
/// <summary> /// 根据提供的两个点集进行计算得到两个点集的横坐标和纵坐标并分类返回 /// </summary> /// <param name="Peakdatalist1"></param> /// <param name="Peakdatalist2"></param> /// <returns></returns> private static PeakStr GetData(List <PointF> Peakdatalist1, List <PointF> Peakdatalist2) { PeakStr Resstr = new PeakStr(); float _peak1length = Peakdatalist1[Peakdatalist1.Count - 1].X; //队列1持续时间 float _peak2length = Peakdatalist2[Peakdatalist2.Count - 1].X; //队列2持续时间 double[] _TSX; //目标插值点横坐标 double[] _TSY; //目标原始数据 double[] _TY; //目标原始数据 double[] _SX; //原始数据横坐标 double[] _SY; //原始数据纵坐标 #region 获得原始数据:2012-06-01增加 int dataCount = _peak1length >= _peak2length ? Peakdatalist2.Count : Peakdatalist1.Count; _TSX = new double[dataCount]; _TSY = new double[dataCount]; _SX = new double[Peakdatalist2.Count]; _SY = new double[Peakdatalist2.Count]; for (int i = 0; i < dataCount; i++) { if (i >= Peakdatalist1.Count) { break; } _TSX[i] = Convert.ToDouble(Peakdatalist1[i].X); _TSY[i] = Convert.ToDouble(Peakdatalist1[i].Y); } for (int i = 0; i < Peakdatalist2.Count; i++) { _SX[i] = Convert.ToDouble(Peakdatalist2[i].X); _SY[i] = Convert.ToDouble(Peakdatalist2[i].Y); } #endregion #region 获得原始数据:2012-06-01删除 //if (_peak1length >= _peak2length) //{ // _TSX = new double[Peakdatalist2.Count]; // _TSY = new double[Peakdatalist2.Count]; // _SX = new double[Peakdatalist1.Count]; // _SY = new double[Peakdatalist1.Count]; // int i = 0; // foreach (PointF data in Peakdatalist2) // { // _TSX[i] = Convert.ToDouble(data.X); // _TSY[i] = Convert.ToDouble(data.Y); // i++; // } // i = 0; // foreach (PointF data in Peakdatalist1) // { // _SX[i] = Convert.ToDouble(data.X); // _SY[i] = Convert.ToDouble(data.Y); // i++; // } // i = 0; //} //else //{ // _TSX = new double[Peakdatalist1.Count]; // _TSY = new double[Peakdatalist1.Count]; // _SX = new double[Peakdatalist2.Count]; // _SY = new double[Peakdatalist2.Count]; // int i = 0; // foreach (PointF data in Peakdatalist1) // { // _TSX[i] = Convert.ToDouble(data.X); // _TSY[i] = Convert.ToDouble(data.Y); // i++; // } // i = 0; // foreach (PointF data in Peakdatalist2) // { // _SX[i] = Convert.ToDouble(data.X); // _SY[i] = Convert.ToDouble(data.Y); // i++; // } // i = 0; //} #endregion Resstr._TSX = _TSX; Resstr._TSY = _TSY; Resstr._SX = _SX; Resstr._SY = _SY; return(Resstr); }