using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace IStation.Model
|
{
|
/// <summary>
|
/// 相似换算辅助类
|
/// </summary>
|
public class SimilarCalculateHelper
|
{
|
/// <summary>
|
/// 计算相似流量扬程曲线
|
/// </summary>
|
/// <param name="expressGroup">表达式</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <param name="pointNumber">拟合点数量</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 计算相似流量扬程曲线
|
/// </summary>
|
/// <param name="express">表达式</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <param name="pointNumber">拟合点数量</param>
|
/// <returns></returns>
|
public static CurveExpress CalculateQH(CurveExpress express, double originHz, double changeHz, int pointNumber = 12)
|
{
|
if (express == null)
|
return null;
|
if (changeHz < 1)
|
return null;
|
List<CurvePoint> 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<CurvePoint>();
|
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);
|
}
|
|
/// <summary>
|
/// 计算相似流量功率曲线
|
/// </summary>
|
/// <param name="express">表达式</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <param name="pointNumber">拟合点数量</param>
|
/// <returns></returns>
|
public static CurveExpress CalculateQP(CurveExpress express, double originHz, double changeHz, int pointNumber = 12)
|
{
|
if (express == null)
|
return null;
|
if (changeHz < 1)
|
return null;
|
List<CurvePoint> 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<CurvePoint>();
|
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);
|
}
|
|
/// <summary>
|
/// 计算相似流量效率曲线
|
/// </summary>
|
/// <param name="express">表达式</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <param name="pointNumber">拟合点数量</param>
|
/// <returns></returns>
|
public static CurveExpress CalculateQE(CurveExpress express, double originHz, double changeHz, int pointNumber = 12)
|
{
|
if (express == null)
|
return null;
|
if (changeHz < 1)
|
return null;
|
List<CurvePoint> 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<CurvePoint>();
|
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);
|
}
|
|
|
/// <summary>
|
/// 计算相似流量扬程点
|
/// </summary>
|
/// <param name="fitPoint">点</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 计算相似流量功率点
|
/// </summary>
|
/// <param name="express">点</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 计算相似流量效率点
|
/// </summary>
|
/// <param name="express">点</param>
|
/// <param name="originHz">原始频率</param>
|
/// <param name="changeHz">换算频率</param>
|
/// <returns></returns>
|
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;
|
}
|
|
}
|
}
|