namespace Yw.Geometry
|
{
|
public class EquipCurveHelper
|
{
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="designPoint"></param>
|
/// <param name="sectPoint"></param>
|
/// <returns></returns>
|
static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
|
Yw.Geometry.CubicSpline2d CurveExpressQH,
|
Yw.Geometry.Point2d designPoint,
|
out Yw.Geometry.Point2d sectPoint)
|
{
|
return CalcEquipCurve(CurveExpressQH, designPoint, 0, false, 11, out sectPoint);
|
}
|
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="designPoint"></param>
|
/// <param name="equipCurveZeroH"></param>
|
/// <param name="sectPoint"></param>
|
/// <returns></returns>
|
static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
|
Yw.Geometry.CubicSpline2d CurveExpressQH,
|
Yw.Geometry.Point2d designPoint,
|
double equipCurveZeroH,
|
out Yw.Geometry.Point2d sectPoint)
|
{
|
return CalcEquipCurve(CurveExpressQH, designPoint, equipCurveZeroH, false, 11, out sectPoint);
|
}
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="designPoint"></param>
|
/// <param name="equipCurveZeroH"></param>
|
/// <param name="isExendCurve"></param>
|
/// <param name="fitPointNum"></param>
|
/// <param name="sectPoint"></param>
|
/// <returns></returns>
|
static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
|
Yw.Geometry.CubicSpline2d CurveExpressQH,
|
Yw.Geometry.Point2d designPoint,
|
double equipCurveZeroH,
|
bool isExendCurve,//当designPoint超过曲线时, 是否延长装置线到designPoint位置
|
int fitPointNum,
|
out Yw.Geometry.Point2d sectPoint)
|
{
|
sectPoint = GetSectPoint(CurveExpressQH, designPoint, equipCurveZeroH);
|
if (sectPoint == null)
|
{
|
return null;
|
}
|
if (isExendCurve)
|
{
|
Yw.Geometry.Point2d endPt;
|
if (sectPoint.X > designPoint.X)
|
endPt = sectPoint;
|
else
|
endPt = designPoint;
|
|
//
|
return new Yw.Geometry.EquipCurveParas(equipCurveZeroH, endPt, fitPointNum);
|
}
|
else
|
{
|
return new Yw.Geometry.EquipCurveParas(equipCurveZeroH, sectPoint, fitPointNum);
|
}
|
}
|
|
/// <summary>
|
/// 计算装置曲线与流量扬程曲线的交点
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="designPoint"></param>
|
/// <param name="equipCurveZeroH"></param>
|
/// <returns></returns>
|
static public Yw.Geometry.Point2d GetSectPoint(
|
Yw.Geometry.CubicSpline2d CurveExpressQH,
|
Yw.Geometry.Point2d designPoint,
|
double equipCurveZeroH)
|
{//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
|
double ratioExtend = 1.15;//CurveExpressQH适当延长一点
|
var sectPoint = Yw.Geometry.ParabolaCurveHelper_H.GetSectPoint(CurveExpressQH, designPoint, equipCurveZeroH, ratioExtend);
|
if (sectPoint == null)
|
{
|
return null;
|
}
|
if (sectPoint.X > CurveExpressQH.MaxX * ratioExtend)
|
{
|
return null;
|
}
|
|
return sectPoint;
|
}
|
|
/// <summary>
|
/// 计算装置曲线与流量扬程曲线的交点
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="DesignPoint"></param>
|
/// <param name="equipCurveZeroH"></param>
|
/// <param name="ratioExtend"></param>
|
/// <returns></returns>
|
static public Yw.Geometry.Point2d GetSectPoint(
|
Yw.Geometry.CubicSpline2d CurveExpressQH,
|
Yw.Geometry.Point2d DesignPoint,
|
double equipCurveZeroH,
|
double ratioExtend)
|
{//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
|
|
var sectPoint = Yw.Geometry.ParabolaCurveHelper_H.GetSectPoint(CurveExpressQH, DesignPoint, equipCurveZeroH, ratioExtend);
|
if (sectPoint == null)
|
{
|
return null;
|
}
|
if (sectPoint.X > CurveExpressQH.MaxX * ratioExtend)
|
{
|
return null;
|
}
|
|
return sectPoint;
|
}
|
|
}
|
}
|