namespace Yw.Geometry
{
public class EquipCurveHelper
{
///
/// 根据流量扬程线,以及给定设计点, 返回交点和装置曲线
///
///
///
///
///
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);
}
///
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
///
///
///
///
///
///
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);
}
///
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
///
///
///
///
///
///
///
///
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);
}
}
///
/// 计算装置曲线与流量扬程曲线的交点
///
///
///
///
///
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;
}
///
/// 计算装置曲线与流量扬程曲线的交点
///
///
///
///
///
///
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;
}
}
}