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