using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Model { public partial class PumpCurve { /// /// 通过 频率 计算流量扬程曲线表达式 /// public CurveExpress CalcuCurveQhByHz(double hz) { if (this.CurveInfo == null||this.CurveInfo.CurveQH==null) return default; var points = this.CurveInfo?.CurveQH?.GetFitPoints(20); double f_ratio = hz / 50.0; var pts = points.Select(x => new CurvePoint(x.X * f_ratio, x.Y * f_ratio * f_ratio)).ToList(); return new CurveExpress(pts); } /// /// 通过 频率 计算流量功率曲线表达式 /// public CurveExpress CalcuCurveQpByHz(double hz) { if (this.CurveInfo == null||this.CurveInfo.CurveQP==null) return default; var points = this.CurveInfo.CurveQP.GetFitPoints(20); double f_ratio = hz / 50.0; var pts = points.Select(x => new CurvePoint(x.X * f_ratio, x.Y * f_ratio * f_ratio * f_ratio)).ToList(); return new CurveExpress(pts); } /// /// 通过 流量 获取 拟合功率 /// public double GetFitP(double hz, double q) { var express = CalcuCurveQpByHz(hz); return FitCurveHelper.GetFitPointY(express, q); } /// /// 获取拟合点 /// public List GetFitPoints(eFeatCurveType featCurveType, int pointNumber = 20) { if (this.PointInfo == null) return default; List list = null; switch (featCurveType) { case eFeatCurveType.QH: { if (this.CurveInfo != null && this.CurveInfo.CurveQH != null) { list=this.CurveInfo.CurveQH.GetFitPoints(pointNumber); } } break; case eFeatCurveType.QP: { if (this.CurveInfo != null && this.CurveInfo.CurveQP != null) { list = this.CurveInfo.CurveQP.GetFitPoints(pointNumber); } } break; case eFeatCurveType.QE: { if (this.CurveInfo != null && this.CurveInfo.CurveQE != null) { list = this.CurveInfo.CurveQE.GetFitPoints(pointNumber); } } break; default:break; } return list; } /// /// api中, 用于返回到前段ECHART用 /// /// /// /// static public List> GetEChartPoint(IStation.Model.CurveExpress curveExpress, int PointNumber) { if (curveExpress == null) return null; if (PointNumber > 10000) PointNumber = 10000; if (PointNumber <= 0) PointNumber = 12; var ev_points = IStation.Model.FitCurveHelper.GetFitPoints(curveExpress, PointNumber); List> echart_points = new List>(); foreach (var ev_pt in ev_points) { if (ev_pt.Y > 0) { List echart_point = new List(); echart_point.Add(ev_pt.X); echart_point.Add(ev_pt.Y); echart_points.Add(echart_point); } } return echart_points; } } }