using System; using System.Collections.Generic; using System.Linq; namespace IStation.Model { /// /// 相似换算辅助类 /// public class SimilarCalculateHelper { /// /// 计算相似流量扬程曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static FeatCurveExpressGroup Calculate(FeatCurveExpressGroup expressGroup, double originHz, double changeHz, int pointNumber = 12) { if (expressGroup == null) return null; if (changeHz < 1) return null; if (expressGroup.CurveQH == null) return null; var similarExpressGroup = new FeatCurveExpressGroup(); similarExpressGroup.CurveQH = CalculateQH(expressGroup.CurveQH, originHz, changeHz, pointNumber); similarExpressGroup.CurveQP = CalculateQP(expressGroup.CurveQP, originHz, changeHz, pointNumber); similarExpressGroup.CurveQE = CalculateQE(expressGroup.CurveQE, originHz, changeHz, pointNumber); return similarExpressGroup; } /// /// 计算相似流量扬程曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateQH(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量功率曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateQP(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio * ratio; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量效率曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateQE(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量扬程点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateQH(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio; return similarPoint; } /// /// 计算相似流量功率点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateQP(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio * ratio; return similarPoint; } /// /// 计算相似流量效率点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateQE(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y; return similarPoint; } } }