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