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;
}
}
}